@codingame/monaco-vscode-katex-common 30.0.1 → 31.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +3 -3
- package/vscode/src/vs/platform/actions/browser/actionbar.d.ts +16 -0
- package/vscode/src/vs/platform/actions/browser/actionbar.js +22 -0
- package/vscode/src/vs/platform/actions/browser/buttonbar.js +2 -2
- package/vscode/src/vs/platform/networkFilter/common/domainMatcher.d.ts +50 -0
- package/vscode/src/vs/platform/networkFilter/common/domainMatcher.js +138 -0
- package/vscode/src/vs/platform/networkFilter/common/settings.d.ts +12 -0
- package/vscode/src/vs/platform/networkFilter/common/settings.js +14 -0
- package/vscode/src/vs/platform/sandbox/common/sandboxHelperIpc.d.ts +18 -0
- package/vscode/src/vs/platform/sandbox/common/sandboxHelperIpc.js +13 -0
- package/vscode/src/vs/platform/sandbox/common/terminalSandboxService.d.ts +73 -0
- package/vscode/src/vs/platform/sandbox/common/terminalSandboxService.js +10 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatAccessibilityProvider.js +16 -16
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatContinueInAction.d.ts +3 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatContinueInAction.js +51 -24
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatElicitationActions.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatExecuteActions.d.ts +2 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatExecuteActions.js +64 -72
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatTitleActions.js +10 -10
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolActions.d.ts +2 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolActions.js +17 -14
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolPicker.js +13 -13
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionApprovalModel.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionHoverWidget.js +17 -18
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsControl.js +5 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsFilter.d.ts +5 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsFilter.js +73 -9
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsOpener.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsViewer.js +32 -32
- package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentModel.d.ts +1 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentModel.js +20 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentWidgets.d.ts +1 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentWidgets.js +73 -49
- package/vscode/src/vs/workbench/contrib/chat/browser/attachments/implicitContextAttachment.js +12 -12
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingActions.d.ts +0 -6
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingActions.js +41 -99
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorActions.js +14 -14
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorOverlay.d.ts +2 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorOverlay.js +13 -9
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingExplanationWidget.js +12 -12
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/chatSessionPickerActionItem.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/toolSetsContribution.js +14 -15
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatAgentHover.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatArtifactsWidget.d.ts +11 -12
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatArtifactsWidget.js +339 -161
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentMarkdownRenderer.js +9 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatAgentCommandContentPart.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatAnonymousRateLimitedPart.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatAttachmentsContentPart.d.ts +9 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatAttachmentsContentPart.js +33 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatChangesSummaryPart.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatCodeCitationContentPart.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatCollections.d.ts +43 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatCollections.js +147 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatCommandContentPart.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatConfirmationContentPart.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatConfirmationWidget.d.ts +4 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatConfirmationWidget.js +55 -6
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatContentCodePools.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatContentCodePools.js +7 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatContentParts.d.ts +1 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatDiffBlockPart.js +42 -10
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatDisabledClaudeHooksContentPart.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatExtensionsContentPart.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatHookContentPart.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatIncrementalRendering/animations/animation.d.ts +18 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatIncrementalRendering/animations/animationRegistry.d.ts +15 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatIncrementalRendering/animations/animationRegistry.js +16 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatIncrementalRendering/animations/blockAnimations.d.ts +13 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatIncrementalRendering/animations/blockAnimations.js +33 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatIncrementalRendering/buffers/buffer.d.ts +46 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatIncrementalRendering/buffers/bufferRegistry.d.ts +11 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatIncrementalRendering/buffers/bufferRegistry.js +12 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatIncrementalRendering/buffers/offBuffer.d.ts +9 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatIncrementalRendering/buffers/offBuffer.js +12 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatIncrementalRendering/buffers/paragraphBuffer.d.ts +23 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatIncrementalRendering/buffers/paragraphBuffer.js +37 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatIncrementalRendering/buffers/wordBuffer.d.ts +34 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatIncrementalRendering/buffers/wordBuffer.js +68 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatIncrementalRendering/chatIncrementalRendering.d.ts +77 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatIncrementalRendering/chatIncrementalRendering.js +170 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatIncrementalRendering/media/chatIncrementalRendering.css +112 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatInlineAnchorWidget.d.ts +3 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatInlineAnchorWidget.js +26 -16
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatMarkdownContentPart.d.ts +24 -6
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatMarkdownContentPart.js +111 -145
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatMcpServersInteractionContentPart.js +8 -8
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatMultiDiffContentPart.js +4 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatPlanReviewPart.d.ts +58 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatPlanReviewPart.js +425 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatProgressContentPart.d.ts +16 -7
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatProgressContentPart.js +68 -25
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatQuestionCarouselPart.d.ts +5 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatQuestionCarouselPart.js +101 -45
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatQuotaExceededPart.js +4 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatReferencesContentPart.js +6 -6
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatResourceGroupWidget.js +5 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatSubagentContentPart.d.ts +36 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatSubagentContentPart.js +217 -25
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatSuggestNextWidget.js +6 -6
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatTextEditContentPart.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatThinkingContentPart.d.ts +23 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatThinkingContentPart.js +168 -60
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatTipContentPart.js +10 -10
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatTodoListWidget.js +18 -17
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatToolInputOutputContentPart.d.ts +1 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatToolInputOutputContentPart.js +7 -18
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatToolOutputContentSubPart.d.ts +1 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatToolOutputContentSubPart.js +7 -19
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatTreeContentPart.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatWorkspaceEditContentPart.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/codeBlockPart.d.ts +24 -19
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/codeBlockPart.js +104 -78
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatConfirmationWidget.css +11 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatPlanReview.css +257 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatQuestionCarousel.css +19 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatSubagentContent.css +30 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatTerminalToolProgressPart.css +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatThinkingContent.css +12 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatToolConfirmationCarousel.css +286 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/abstractToolConfirmationSubPart.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatExtensionsInstallToolSubPart.js +4 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatMcpAppModel.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatMcpAppSubPart.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatMissingSandboxDepsConfirmationSubPart.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatModifiedFilesConfirmationSubPart.js +15 -11
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatTerminalToolConfirmationSubPart.d.ts +1 -7
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatTerminalToolConfirmationSubPart.js +25 -47
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatTerminalToolProgressPart.d.ts +29 -53
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatTerminalToolProgressPart.js +258 -321
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolConfirmationCarouselPart.d.ts +53 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolConfirmationCarouselPart.js +392 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolConfirmationSubPart.d.ts +1 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolConfirmationSubPart.js +24 -30
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolInvocationPart.d.ts +2 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolInvocationPart.js +9 -8
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolOutputPart.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolPartUtilities.js +5 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolPostExecuteConfirmationPart.js +5 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/terminalToolAutoExpand.d.ts +6 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/terminalToolAutoExpand.js +2 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatDragAndDrop.js +11 -11
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatListRenderer.d.ts +38 -11
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatListRenderer.js +577 -113
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatListWidget.d.ts +0 -7
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatListWidget.js +4 -7
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatWidget.d.ts +1 -8
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatWidget.js +58 -75
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatFollowups.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatInputPart.d.ts +44 -12
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatInputPart.js +362 -188
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatInputPickerActionItem.d.ts +0 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatModelPicker.d.ts +4 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatModelPicker.js +42 -95
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatModelSelectionLogic.d.ts +2 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/delegationSessionPickerActionItem.js +9 -10
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modePickerActionItem.js +57 -38
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPickerActionItem.d.ts +21 -15
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/{modelPickerActionItem2.js → modelPickerActionItem.js} +5 -7
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/permissionPickerActionItem.js +38 -31
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/sessionTargetPickerActionItem.js +4 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/workspacePickerActionItem.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/media/chat.css +94 -40
- package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatContextUsageDetails.js +7 -7
- package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatContextUsageWidget.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/common/chatArtifactExtraction.d.ts +16 -0
- package/vscode/src/vs/workbench/contrib/chat/common/chatArtifactExtraction.js +218 -0
- package/vscode/src/vs/workbench/contrib/chat/common/chatImageExtraction.js +7 -7
- package/vscode/src/vs/workbench/contrib/chat/common/widget/annotations.js +6 -1
- package/vscode/src/vs/workbench/contrib/chat/common/widget/chatColors.js +15 -15
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatAffordance.js +12 -21
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatController.d.ts +2 -32
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatController.js +355 -156
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatEditorAffordance.d.ts +2 -13
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatEditorAffordance.js +72 -65
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatOverlayWidget.d.ts +4 -43
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatOverlayWidget.js +238 -204
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatWidget.d.ts +4 -19
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatWidget.js +128 -115
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatZoneWidget.d.ts +6 -9
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatZoneWidget.js +152 -49
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/media/inlineChat.css +64 -0
- package/vscode/src/vs/workbench/contrib/inlineChat/common/inlineChat.js +40 -40
- package/vscode/src/vs/workbench/contrib/interactive/browser/replInputHintContentWidget.js +3 -3
- package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/cellStatusBar/executionStatusBarItemController.js +7 -7
- package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/find/notebookFindWidget.js +2 -2
- package/vscode/src/vs/workbench/contrib/notebook/browser/controller/cellOperations.js +2 -2
- package/vscode/src/vs/workbench/contrib/notebook/browser/controller/insertCellActions.js +24 -24
- package/vscode/src/vs/workbench/contrib/notebook/browser/diff/diffComponents.js +3 -3
- package/vscode/src/vs/workbench/contrib/notebook/browser/diff/diffElementOutputs.js +7 -7
- package/vscode/src/vs/workbench/contrib/notebook/browser/diff/notebookDiffEditor.js +1 -1
- package/vscode/src/vs/workbench/contrib/notebook/browser/diff/notebookDiffEditorBrowser.js +5 -5
- package/vscode/src/vs/workbench/contrib/notebook/browser/diff/notebookDiffList.js +1 -1
- package/vscode/src/vs/workbench/contrib/replNotebook/browser/replEditor.js +1 -1
- package/vscode/src/vs/workbench/contrib/replNotebook/browser/replEditorInput.js +1 -1
- package/vscode/src/vs/workbench/contrib/terminal/terminalContribChatExports.d.ts +2 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/alternativeRecommendation.d.ts +2 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/alternativeRecommendation.js +41 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandParsers/commandFileWriteParser.d.ts +24 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandParsers/sedFileWriteParser.d.ts +26 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandParsers/sedFileWriteParser.js +142 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/basicExecuteStrategy.d.ts +45 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/basicExecuteStrategy.js +165 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/executeStrategy.d.ts +53 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/executeStrategy.js +163 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/noneExecuteStrategy.d.ts +27 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/noneExecuteStrategy.js +142 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/richExecuteStrategy.d.ts +29 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/richExecuteStrategy.js +144 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/strategyHelpers.d.ts +40 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/strategyHelpers.js +174 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/outputHelpers.d.ts +7 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/outputHelpers.js +43 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalHelpers.d.ts +42 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalHelpers.js +256 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalToolTelemetry.d.ts +42 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalToolTelemetry.js +94 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/toolTerminalCreator.d.ts +42 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/toolTerminalCreator.js +221 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/autoApprove/commandLineAutoApprover.d.ts +31 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/autoApprove/commandLineAutoApprover.js +392 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/autoApprove/npmScriptAutoApprover.d.ts +45 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/autoApprove/npmScriptAutoApprover.js +243 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineAnalyzer.d.ts +52 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineAnalyzer.js +10 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineAutoApproveAnalyzer.d.ts +20 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineAutoApproveAnalyzer.js +310 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineFileWriteAnalyzer.d.ts +19 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineFileWriteAnalyzer.js +168 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineSandboxAnalyzer.d.ts +11 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineSandboxAnalyzer.js +33 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/commandLinePresenter.d.ts +41 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/nodeCommandLinePresenter.d.ts +19 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/nodeCommandLinePresenter.js +37 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/pythonCommandLinePresenter.d.ts +19 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/pythonCommandLinePresenter.js +37 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/rubyCommandLinePresenter.d.ts +19 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/rubyCommandLinePresenter.js +44 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/sandboxedCommandLinePresenter.d.ts +13 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/sandboxedCommandLinePresenter.js +22 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineRewriter/commandLineBackgroundDetachRewriter.d.ts +22 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineRewriter/commandLineBackgroundDetachRewriter.js +47 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineRewriter/commandLineCdPrefixRewriter.d.ts +5 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineRewriter/commandLineCdPrefixRewriter.js +27 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineRewriter/commandLinePreventHistoryRewriter.d.ts +14 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineRewriter/commandLinePreventHistoryRewriter.js +29 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineRewriter/commandLinePwshChainOperatorRewriter.d.ts +8 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineRewriter/commandLinePwshChainOperatorRewriter.js +33 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineRewriter/commandLineRewriter.d.ts +24 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineRewriter/commandLineSandboxRewriter.d.ts +8 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineRewriter/commandLineSandboxRewriter.js +32 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/outputMonitor.d.ts +108 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/outputMonitor.js +412 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/types.d.ts +42 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/types.js +23 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/outputAnalyzer.d.ts +9 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.d.ts +192 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.js +2258 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/sandboxOutputAnalyzer.d.ts +22 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/sandboxOutputAnalyzer.js +43 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/terminalCommandArtifactCollector.d.ts +17 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/terminalCommandArtifactCollector.js +118 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/terminalToolAutoApprove.d.ts +22 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/terminalToolAutoApprove.js +44 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/toolIds.d.ts +1 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/treeSitterCommandParser.d.ts +25 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/treeSitterCommandParser.js +141 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminalSandboxService.d.ts +85 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminalSandboxService.js +608 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/searchableOptionPickerActionItem.d.ts +0 -40
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/searchableOptionPickerActionItem.js +0 -196
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPickerActionItem2.d.ts +0 -29
- package/vscode/src/vs/workbench/contrib/chat/common/widget/codeBlockModelCollection.d.ts +0 -46
- package/vscode/src/vs/workbench/contrib/chat/common/widget/codeBlockModelCollection.js +0 -215
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatGutterAffordance.d.ts +0 -18
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatGutterAffordance.js +0 -107
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
|
|
2
2
|
import { __decorate, __param } from '@codingame/monaco-vscode-api/external/tslib/tslib.es6';
|
|
3
|
-
import { $ as $$1, append, addDisposableListener, EventType, createElement, DisposableResizeObserver, clearNode, addStandardDisposableListener, WindowIntervalTimer, getWindow, reset, findParentWithClass } from '@codingame/monaco-vscode-api/vscode/vs/base/browser/dom';
|
|
3
|
+
import { $ as $$1, append, addDisposableListener, EventType, createElement, DisposableResizeObserver, clearNode, addStandardDisposableListener, WindowIntervalTimer, getWindow, reset, findParentWithClass, hide, show } from '@codingame/monaco-vscode-api/vscode/vs/base/browser/dom';
|
|
4
4
|
import { renderFormattedText } from '@codingame/monaco-vscode-api/vscode/vs/base/browser/formattedTextRenderer';
|
|
5
5
|
import { StandardKeyboardEvent } from '@codingame/monaco-vscode-api/vscode/vs/base/browser/keyboardEvent';
|
|
6
6
|
import { alert } from '@codingame/monaco-vscode-api/vscode/vs/base/browser/ui/aria/aria';
|
|
7
7
|
import { getDefaultHoverDelegate } from '@codingame/monaco-vscode-api/vscode/vs/base/browser/ui/hover/hoverDelegateFactory';
|
|
8
8
|
import { CachedListVirtualDelegate } from '@codingame/monaco-vscode-api/vscode/vs/base/browser/ui/list/list';
|
|
9
9
|
import { coalesce, distinct } from '@codingame/monaco-vscode-api/vscode/vs/base/common/arrays';
|
|
10
|
-
import { findLast } from '@codingame/monaco-vscode-api/vscode/vs/base/common/arraysFind';
|
|
11
10
|
import { Codicon } from '@codingame/monaco-vscode-api/vscode/vs/base/common/codicons';
|
|
12
11
|
import { toErrorMessage } from '@codingame/monaco-vscode-api/vscode/vs/base/common/errorMessage';
|
|
13
12
|
import { canceledName } from '@codingame/monaco-vscode-api/vscode/vs/base/common/errors';
|
|
@@ -15,7 +14,7 @@ import { Emitter } from '@codingame/monaco-vscode-api/vscode/vs/base/common/even
|
|
|
15
14
|
import { MarkdownString } from '@codingame/monaco-vscode-api/vscode/vs/base/common/htmlContent';
|
|
16
15
|
import { Iterable } from '@codingame/monaco-vscode-api/vscode/vs/base/common/iterator';
|
|
17
16
|
import { KeyCode } from '@codingame/monaco-vscode-api/vscode/vs/base/common/keyCodes';
|
|
18
|
-
import { Disposable, DisposableStore, dispose, toDisposable
|
|
17
|
+
import { Disposable, DisposableStore, dispose, toDisposable } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
|
|
19
18
|
import { ResourceMap } from '@codingame/monaco-vscode-api/vscode/vs/base/common/map';
|
|
20
19
|
import { FileAccess, Schemas } from '@codingame/monaco-vscode-api/vscode/vs/base/common/network';
|
|
21
20
|
import { clamp } from '@codingame/monaco-vscode-api/vscode/vs/base/common/numbers';
|
|
@@ -44,12 +43,12 @@ import { ChatContextKeys } from '@codingame/monaco-vscode-api/vscode/vs/workbenc
|
|
|
44
43
|
import { chatSubcommandLeader } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/requestParser/chatParserTypes';
|
|
45
44
|
import { ChatAgentVoteDirection, ChatRequestQueueKind, IChatToolInvocation, isChatFollowup, ChatErrorLevel } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/chatService/chatService';
|
|
46
45
|
import { IChatService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/chatService/chatService.service';
|
|
46
|
+
import { ChatPlanReviewData } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/model/chatProgressTypes/chatPlanReviewData';
|
|
47
47
|
import { ChatQuestionCarouselData } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/model/chatProgressTypes/chatQuestionCarouselData';
|
|
48
48
|
import { localChatSessionType } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/chatSessionsService';
|
|
49
49
|
import { getChatSessionType } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/model/chatUri';
|
|
50
50
|
import { isResponseVM, isPendingDividerVM, isRequestVM } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/model/chatViewModel';
|
|
51
51
|
import { getNWords } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/model/chatWordCounter';
|
|
52
|
-
import { CodeBlockModelCollection } from '../../common/widget/codeBlockModelCollection.js';
|
|
53
52
|
import { ChatConfiguration, ChatAgentLocation, CollapsedToolsDisplayMode, ThinkingDisplayMode, ChatModeKind } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/constants';
|
|
54
53
|
import { ClickAnimation } from '@codingame/monaco-vscode-api/vscode/vs/base/browser/ui/animations/animations';
|
|
55
54
|
import { MarkHelpfulActionId } from '../actions/chatTitleActions.js';
|
|
@@ -68,13 +67,14 @@ import { InlineTextModelCollection } from './chatContentParts/chatContentParts.j
|
|
|
68
67
|
import { ChatElicitationContentPart } from './chatContentParts/chatElicitationContentPart.js';
|
|
69
68
|
import { ChatErrorConfirmationContentPart } from './chatContentParts/chatErrorConfirmationPart.js';
|
|
70
69
|
import { ChatErrorContentPart } from './chatContentParts/chatErrorContentPart.js';
|
|
70
|
+
import { ChatPlanReviewPart } from './chatContentParts/chatPlanReviewPart.js';
|
|
71
71
|
import { ChatQuestionCarouselPart } from './chatContentParts/chatQuestionCarouselPart.js';
|
|
72
72
|
import { ChatExtensionsContentPart } from './chatContentParts/chatExtensionsContentPart.js';
|
|
73
|
-
import {
|
|
73
|
+
import { ChatMarkdownContentPart, codeblockHasClosingBackticks } from './chatContentParts/chatMarkdownContentPart.js';
|
|
74
74
|
import { ChatMcpServersInteractionContentPart } from './chatContentParts/chatMcpServersInteractionContentPart.js';
|
|
75
75
|
import { ChatDisabledClaudeHooksContentPart } from './chatContentParts/chatDisabledClaudeHooksContentPart.js';
|
|
76
76
|
import { ChatMultiDiffContentPart } from './chatContentParts/chatMultiDiffContentPart.js';
|
|
77
|
-
import { ChatWorkingProgressContentPart, ChatProgressContentPart } from './chatContentParts/chatProgressContentPart.js';
|
|
77
|
+
import { ChatWorkingProgressContentPart, ChatProgressSubPart, ChatProgressContentPart } from './chatContentParts/chatProgressContentPart.js';
|
|
78
78
|
import { ChatPullRequestContentPart } from './chatContentParts/chatPullRequestContentPart.js';
|
|
79
79
|
import { ChatQuotaExceededPart } from './chatContentParts/chatQuotaExceededPart.js';
|
|
80
80
|
import { CollapsibleListPool, ChatUsedReferencesListContentPart } from './chatContentParts/chatReferencesContentPart.js';
|
|
@@ -90,6 +90,7 @@ import { ChatCodeBlockContentProvider } from './chatContentParts/codeBlockPart.j
|
|
|
90
90
|
import '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/index';
|
|
91
91
|
import { isEqual } from '@codingame/monaco-vscode-api/vscode/vs/base/common/resources';
|
|
92
92
|
import { IAccessibilityService } from '@codingame/monaco-vscode-api/vscode/vs/platform/accessibility/common/accessibility.service';
|
|
93
|
+
import { ITelemetryService } from '@codingame/monaco-vscode-api/vscode/vs/platform/telemetry/common/telemetry.service';
|
|
93
94
|
import { ChatHookContentPart } from './chatContentParts/chatHookContentPart.js';
|
|
94
95
|
import { HookType } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/hookTypes';
|
|
95
96
|
import { IWorkbenchEnvironmentService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/environment/common/environmentService.service';
|
|
@@ -129,7 +130,6 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
129
130
|
editorOptions,
|
|
130
131
|
rendererOptions,
|
|
131
132
|
delegate,
|
|
132
|
-
codeBlockModelCollection,
|
|
133
133
|
overflowWidgetsDomNode,
|
|
134
134
|
viewModel,
|
|
135
135
|
instantiationService,
|
|
@@ -144,12 +144,12 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
144
144
|
chatService,
|
|
145
145
|
accessibilitySignalService,
|
|
146
146
|
accessibilityService,
|
|
147
|
-
environmentService
|
|
147
|
+
environmentService,
|
|
148
|
+
telemetryService
|
|
148
149
|
) {
|
|
149
150
|
super();
|
|
150
151
|
this.rendererOptions = rendererOptions;
|
|
151
152
|
this.delegate = delegate;
|
|
152
|
-
this.codeBlockModelCollection = codeBlockModelCollection;
|
|
153
153
|
this.viewModel = viewModel;
|
|
154
154
|
this.instantiationService = instantiationService;
|
|
155
155
|
this.configService = configService;
|
|
@@ -164,6 +164,7 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
164
164
|
this.accessibilitySignalService = accessibilitySignalService;
|
|
165
165
|
this.accessibilityService = accessibilityService;
|
|
166
166
|
this.environmentService = environmentService;
|
|
167
|
+
this.telemetryService = telemetryService;
|
|
167
168
|
this.codeBlocksByResponseId = ( new Map());
|
|
168
169
|
this.codeBlocksByEditorUri = ( new ResourceMap());
|
|
169
170
|
this.fileTreesByResponseId = ( new Map());
|
|
@@ -172,6 +173,7 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
172
173
|
this.responseTemplateDataByRequestId = ( new Map());
|
|
173
174
|
this.pendingQuestionCarousels = ( new ResourceMap());
|
|
174
175
|
this._notifiedQuestionCarousels = ( new Set());
|
|
176
|
+
this.workingProgressConfirmationEndListeners = ( new WeakSet());
|
|
175
177
|
this._onDidClickFollowup = this._register(( new Emitter()));
|
|
176
178
|
this.onDidClickFollowup = this._onDidClickFollowup.event;
|
|
177
179
|
this._onDidClickRerunWithAgentOrCommandDetection = this._register(( new Emitter()));
|
|
@@ -190,17 +192,18 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
190
192
|
this._currentLayoutWidth = observableValue(this, 0);
|
|
191
193
|
this._isVisible = true;
|
|
192
194
|
this._onDidChangeVisibility = this._register(( new Emitter()));
|
|
195
|
+
this._incrementalRenderingTelemetryLogged = false;
|
|
193
196
|
this._announcedToolProgressKeys = ( new Set());
|
|
194
197
|
this.chatContentMarkdownRenderer = this.instantiationService.createInstance(ChatContentMarkdownRenderer);
|
|
195
198
|
this.markdownDecorationsRenderer = this.instantiationService.createInstance(ChatMarkdownDecorationsRenderer);
|
|
196
199
|
this._editorPool = this._register(
|
|
197
|
-
this.instantiationService.createInstance(EditorPool, editorOptions, delegate, overflowWidgetsDomNode,
|
|
200
|
+
this.instantiationService.createInstance(EditorPool, editorOptions, delegate, overflowWidgetsDomNode, true)
|
|
198
201
|
);
|
|
199
202
|
this._toolEditorPool = this._register(
|
|
200
203
|
this.instantiationService.createInstance(EditorPool, editorOptions, delegate, overflowWidgetsDomNode, true)
|
|
201
204
|
);
|
|
202
205
|
this._diffEditorPool = this._register(
|
|
203
|
-
this.instantiationService.createInstance(DiffEditorPool, editorOptions, delegate, overflowWidgetsDomNode,
|
|
206
|
+
this.instantiationService.createInstance(DiffEditorPool, editorOptions, delegate, overflowWidgetsDomNode, true)
|
|
204
207
|
);
|
|
205
208
|
this._treePool = this._register(
|
|
206
209
|
this.instantiationService.createInstance(TreePool, this._onDidChangeVisibility.event)
|
|
@@ -211,11 +214,8 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
211
214
|
undefined,
|
|
212
215
|
undefined
|
|
213
216
|
));
|
|
214
|
-
this._register(this.instantiationService.createInstance(ChatCodeBlockContentProvider));
|
|
215
217
|
this._inlineTextModels = this._register(this.instantiationService.createInstance(InlineTextModelCollection));
|
|
216
|
-
this.
|
|
217
|
-
this.instantiationService.createInstance(CodeBlockModelCollection, "tools")
|
|
218
|
-
);
|
|
218
|
+
this._register(this.instantiationService.createInstance(ChatCodeBlockContentProvider));
|
|
219
219
|
this._register(this.chatService.onDidSubmitRequest(e => {
|
|
220
220
|
const carousels = this.pendingQuestionCarousels.get(e.chatSessionResource);
|
|
221
221
|
if (carousels) {
|
|
@@ -265,6 +265,9 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
265
265
|
return;
|
|
266
266
|
}
|
|
267
267
|
const normalizedHeight = Math.ceil(height);
|
|
268
|
+
if (normalizedHeight === template.currentElement.currentRenderedHeight) {
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
268
271
|
template.currentElement.currentRenderedHeight = normalizedHeight;
|
|
269
272
|
if (template.currentElement !== this._elementBeingRendered) {
|
|
270
273
|
this._onDidChangeItemHeight.fire({
|
|
@@ -306,12 +309,13 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
306
309
|
this.fileTreesByResponseId.clear();
|
|
307
310
|
this.focusedFileTreesByResponseId.clear();
|
|
308
311
|
this.responseTemplateDataByRequestId.clear();
|
|
312
|
+
this.templateDataByRequestId.clear();
|
|
313
|
+
this._onDidUpdateViewModel.fire();
|
|
309
314
|
this._editorPool.clear();
|
|
310
315
|
this._toolEditorPool.clear();
|
|
311
316
|
this._diffEditorPool.clear();
|
|
312
317
|
this._treePool.clear();
|
|
313
318
|
this._contentReferencesListPool.clear();
|
|
314
|
-
this._onDidUpdateViewModel.fire();
|
|
315
319
|
}
|
|
316
320
|
getCodeBlockInfoForEditor(uri) {
|
|
317
321
|
return this.codeBlocksByEditorUri.get(uri);
|
|
@@ -460,7 +464,7 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
460
464
|
const checkpointRestoreContainer = append(rowContainer, $(".checkpoint-restore-container"));
|
|
461
465
|
append(checkpointRestoreContainer, $(".checkpoint-line-left"));
|
|
462
466
|
const label = append(checkpointRestoreContainer, $("span.checkpoint-label-text"));
|
|
463
|
-
label.textContent = ( localize(
|
|
467
|
+
label.textContent = ( localize(7116, "Checkpoint Restored"));
|
|
464
468
|
const dot = append(checkpointRestoreContainer, $("span.checkpoint-dot-separator"));
|
|
465
469
|
dot.textContent = "·";
|
|
466
470
|
dot.setAttribute("aria-hidden", "true");
|
|
@@ -595,6 +599,7 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
595
599
|
templateData.footerToolbar.context = undefined;
|
|
596
600
|
templateData.checkpointToolbar.context = undefined;
|
|
597
601
|
templateData.checkpointRestoreToolbar.context = undefined;
|
|
602
|
+
templateData.currentElement = undefined;
|
|
598
603
|
}
|
|
599
604
|
renderChatTreeItem(element, index, templateData) {
|
|
600
605
|
if (templateData.currentElement && templateData.currentElement.id !== element.id) {
|
|
@@ -667,6 +672,10 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
667
672
|
"show-detail-progress",
|
|
668
673
|
isResponseVM(element) && !element.isComplete && !element.progressMessages.length && !progressMessageAtBottomOfResponse
|
|
669
674
|
);
|
|
675
|
+
templateData.rowContainer.classList.toggle(
|
|
676
|
+
"chat-progress-reservable",
|
|
677
|
+
isResponseVM(element) && !element.isComplete && !!progressMessageAtBottomOfResponse
|
|
678
|
+
);
|
|
670
679
|
const updateContainerCheckmarks = () => templateData.rowContainer.classList.toggle(
|
|
671
680
|
"show-checkmarks",
|
|
672
681
|
!!this.configService.getValue(AccessibilityWorkbenchSettingId.ShowChatCheckmarks)
|
|
@@ -680,14 +689,15 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
680
689
|
if (!this.rendererOptions.noHeader) {
|
|
681
690
|
this.renderAvatar(element, templateData);
|
|
682
691
|
}
|
|
692
|
+
const isSystemInitiatedRequest = isRequestVM(element) && !!element.isSystemInitiated;
|
|
683
693
|
templateData.username.textContent = element.username;
|
|
684
694
|
templateData.username.classList.toggle(
|
|
685
695
|
"hidden",
|
|
686
|
-
element.username === COPILOT_USERNAME || this.environmentService.isSessionsWindow
|
|
696
|
+
element.username === COPILOT_USERNAME || this.environmentService.isSessionsWindow || isSystemInitiatedRequest
|
|
687
697
|
);
|
|
688
698
|
templateData.avatarContainer.classList.toggle(
|
|
689
699
|
"hidden",
|
|
690
|
-
element.username === COPILOT_USERNAME || this.environmentService.isSessionsWindow
|
|
700
|
+
element.username === COPILOT_USERNAME || this.environmentService.isSessionsWindow || isSystemInitiatedRequest
|
|
691
701
|
);
|
|
692
702
|
this.hoverHidden(templateData.requestHover);
|
|
693
703
|
clearNode(templateData.detail);
|
|
@@ -698,7 +708,10 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
698
708
|
const supportsForkOrRestoration = this.rendererOptions.supportsFork || (this.rendererOptions.restorable ?? true);
|
|
699
709
|
const checkpointEnabled = this.configService.getValue(ChatConfiguration.CheckpointsEnabled) && supportsForkOrRestoration;
|
|
700
710
|
const isPendingRequest = isRequestVM(element) && !!element.pendingKind;
|
|
701
|
-
templateData.checkpointContainer.classList.toggle(
|
|
711
|
+
templateData.checkpointContainer.classList.toggle(
|
|
712
|
+
"hidden",
|
|
713
|
+
isResponseVM(element) || isPendingRequest || isSystemInitiatedRequest || !checkpointEnabled
|
|
714
|
+
);
|
|
702
715
|
templateData.footerToolbar.refresh();
|
|
703
716
|
templateData.checkpointToolbar.refresh();
|
|
704
717
|
templateData.checkpointRestoreToolbar.refresh();
|
|
@@ -747,7 +760,7 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
747
760
|
templateData.requestHover.classList.toggle("editing", editing && isInput);
|
|
748
761
|
templateData.requestHover.classList.toggle(
|
|
749
762
|
"hidden",
|
|
750
|
-
(!!this.viewModel?.editing && !editing) || isResponseVM(element) || !this.rendererOptions.editable
|
|
763
|
+
(!!this.viewModel?.editing && !editing) || isResponseVM(element) || !this.rendererOptions.editable || isSystemInitiatedRequest
|
|
751
764
|
);
|
|
752
765
|
templateData.requestHover.classList.toggle("expanded", this.configService.getValue("chat.editRequests") === "hover");
|
|
753
766
|
templateData.requestHover.classList.toggle("checkpoints-enabled", checkpointEnabled);
|
|
@@ -766,28 +779,38 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
766
779
|
rowRoot?.classList.toggle("response", isResponseVM(element));
|
|
767
780
|
templateData.rowContainer.classList.toggle(mostRecentResponseClassName, index === this.delegate.getListLength() - 1);
|
|
768
781
|
templateData.rowContainer.classList.toggle("confirmation-message", isRequestVM(element) && !!element.confirmation);
|
|
769
|
-
const shouldShowHeader = isResponseVM(element) && !this.rendererOptions.noHeader;
|
|
782
|
+
const shouldShowHeader = (isResponseVM(element) && !this.rendererOptions.noHeader) && !isSystemInitiatedRequest;
|
|
770
783
|
templateData.header?.classList.toggle("header-disabled", !shouldShowHeader);
|
|
771
784
|
if (isRequestVM(element) && element.confirmation) {
|
|
772
785
|
this.renderConfirmationAction(element, templateData);
|
|
773
786
|
}
|
|
787
|
+
const incrementalRendering = this.configService.getValue(ChatConfiguration.IncrementalRendering);
|
|
774
788
|
if (isResponseVM(element) && index === this.delegate.getListLength() - 1 && (!element.isComplete || element.renderData)) {
|
|
775
789
|
this.traceLayout("renderElement", `start progressive render, index=${index}`);
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
790
|
+
if (incrementalRendering && !element.renderData) {
|
|
791
|
+
this.logIncrementalRenderingTelemetry();
|
|
792
|
+
this.doIncrementalRender(element, index, templateData);
|
|
793
|
+
} else {
|
|
794
|
+
const timer = templateData.elementDisposables.add(new WindowIntervalTimer());
|
|
795
|
+
const runProgressiveRender = initial => {
|
|
796
|
+
try {
|
|
797
|
+
if (this.doNextProgressiveRender(element, index, templateData, !!initial)) {
|
|
798
|
+
timer.cancel();
|
|
799
|
+
}
|
|
800
|
+
} catch (err) {
|
|
780
801
|
timer.cancel();
|
|
802
|
+
this.logService.error(err);
|
|
781
803
|
}
|
|
782
|
-
}
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
};
|
|
787
|
-
timer.cancelAndSet(runProgressiveRender, 50, getWindow(templateData.rowContainer));
|
|
788
|
-
runProgressiveRender(true);
|
|
804
|
+
};
|
|
805
|
+
timer.cancelAndSet(runProgressiveRender, 50, getWindow(templateData.rowContainer));
|
|
806
|
+
runProgressiveRender(true);
|
|
807
|
+
}
|
|
789
808
|
} else {
|
|
790
809
|
if (isResponseVM(element)) {
|
|
810
|
+
if (incrementalRendering) {
|
|
811
|
+
const rate = this.getProgressiveRenderRate(element);
|
|
812
|
+
this._updateMorpherRate(templateData, rate, true);
|
|
813
|
+
}
|
|
791
814
|
this.renderChatResponseBasic(element, index, templateData);
|
|
792
815
|
} else if (isRequestVM(element)) {
|
|
793
816
|
this.renderChatRequest(element, index, templateData);
|
|
@@ -813,11 +836,16 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
813
836
|
const dividerContent = $$1(".pending-divider-content");
|
|
814
837
|
const label = append(dividerContent, $$1("span.pending-divider-label"));
|
|
815
838
|
if (element.dividerKind === ChatRequestQueueKind.Steering) {
|
|
816
|
-
|
|
817
|
-
|
|
839
|
+
if (element.isSystemInitiated) {
|
|
840
|
+
label.textContent = ( localize(7117, "System Notification"));
|
|
841
|
+
label.title = ( localize(7118, "System notification will be sent after the next tool call happens"));
|
|
842
|
+
} else {
|
|
843
|
+
label.textContent = ( localize(7119, "Steering"));
|
|
844
|
+
label.title = ( localize(7120, "Steering message will be sent after the next tool call happens"));
|
|
845
|
+
}
|
|
818
846
|
} else {
|
|
819
|
-
label.textContent = ( localize(
|
|
820
|
-
label.title = ( localize(
|
|
847
|
+
label.textContent = ( localize(7121, "Queued"));
|
|
848
|
+
label.title = ( localize(7122, "Queued messages will be sent after the current request completes"));
|
|
821
849
|
}
|
|
822
850
|
templateData.value.appendChild(dividerContent);
|
|
823
851
|
}
|
|
@@ -825,10 +853,10 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
825
853
|
clearNode(templateData.detail);
|
|
826
854
|
if (element.agentOrSlashCommandDetected) {
|
|
827
855
|
const msg = element.slashCommand ? ( localize(
|
|
828
|
-
|
|
856
|
+
7123,
|
|
829
857
|
"used {0} [[(rerun without)]]",
|
|
830
858
|
`${chatSubcommandLeader}${element.slashCommand.name}`
|
|
831
|
-
)) : ( localize(
|
|
859
|
+
)) : ( localize(7124, "[[(rerun without)]]"));
|
|
832
860
|
reset(templateData.detail, renderFormattedText(msg, {
|
|
833
861
|
actionHandler: {
|
|
834
862
|
disposables: templateData.elementDisposables,
|
|
@@ -841,7 +869,7 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
841
869
|
this.delegate.currentChatMode(),
|
|
842
870
|
this.rendererOptions.progressMessageAtBottomOfResponse
|
|
843
871
|
)) {
|
|
844
|
-
templateData.detail.textContent = ( localize(
|
|
872
|
+
templateData.detail.textContent = ( localize(7125, "Working"));
|
|
845
873
|
}
|
|
846
874
|
}
|
|
847
875
|
renderConfirmationAction(element, templateData) {
|
|
@@ -850,7 +878,7 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
850
878
|
append(templateData.detail, $("span.codicon.codicon-check", {
|
|
851
879
|
"aria-hidden": "true"
|
|
852
880
|
}));
|
|
853
|
-
append(templateData.detail, $("span.confirmation-text", undefined, ( localize(
|
|
881
|
+
append(templateData.detail, $("span.confirmation-text", undefined, ( localize(7126, "Selected \"{0}\"", element.confirmation))));
|
|
854
882
|
templateData.header?.classList.remove("header-disabled");
|
|
855
883
|
templateData.header?.classList.add("partially-disabled");
|
|
856
884
|
}
|
|
@@ -889,14 +917,7 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
889
917
|
}
|
|
890
918
|
renderChatResponseBasic(element, index, templateData) {
|
|
891
919
|
templateData.rowContainer.classList.toggle("chat-response-loading", (isResponseVM(element) && !element.isComplete));
|
|
892
|
-
|
|
893
|
-
const lastThinking = this.getLastThinkingPart(templateData.renderedParts);
|
|
894
|
-
if (lastThinking?.domNode && lastThinking.getIsActive()) {
|
|
895
|
-
lastThinking.finalizeTitleIfDefault();
|
|
896
|
-
lastThinking.markAsInactive();
|
|
897
|
-
}
|
|
898
|
-
this.finalizeAllSubagentParts(templateData);
|
|
899
|
-
}
|
|
920
|
+
this.finalizeCompletedResponseParts(element, templateData);
|
|
900
921
|
const content = [];
|
|
901
922
|
const isFiltered = !!element.errorDetails?.responseIsFiltered;
|
|
902
923
|
if (!isFiltered) {
|
|
@@ -923,57 +944,205 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
923
944
|
if (fileChangesSummaryPart) {
|
|
924
945
|
content.push(fileChangesSummaryPart);
|
|
925
946
|
}
|
|
947
|
+
const workingProgress = this.shouldShowWorkingProgress(element, content, false, templateData);
|
|
948
|
+
if (workingProgress) {
|
|
949
|
+
content.push(workingProgress);
|
|
950
|
+
}
|
|
926
951
|
const diff = this.diff(templateData.renderedParts ?? [], content, element);
|
|
927
952
|
this.renderChatContentDiff(diff, content, element, index, templateData);
|
|
953
|
+
this.finalizeCompletedResponseParts(element, templateData);
|
|
954
|
+
}
|
|
955
|
+
finalizeCompletedResponseParts(element, templateData) {
|
|
956
|
+
if (!element.isComplete && !element.isCanceled) {
|
|
957
|
+
return;
|
|
958
|
+
}
|
|
959
|
+
const lastThinking = this.getLastThinkingPart(templateData.renderedParts);
|
|
960
|
+
if (lastThinking?.domNode && lastThinking.getIsActive()) {
|
|
961
|
+
lastThinking.finalizeTitleIfDefault();
|
|
962
|
+
lastThinking.markAsInactive();
|
|
963
|
+
}
|
|
964
|
+
this.finalizeAllSubagentParts(templateData);
|
|
928
965
|
}
|
|
929
966
|
shouldShowWorkingProgress(element, partsToRender, moreContentAvailable, templateData) {
|
|
930
|
-
if (element.agentOrSlashCommandDetected || this.rendererOptions.renderStyle === "minimal"
|
|
967
|
+
if (element.agentOrSlashCommandDetected || this.rendererOptions.renderStyle === "minimal") {
|
|
968
|
+
return undefined;
|
|
969
|
+
}
|
|
970
|
+
const showProgressDetails = this.configService.getValue(ChatConfiguration.ChatPersistentProgressEnabled) !== false;
|
|
971
|
+
if (element.isComplete) {
|
|
972
|
+
return undefined;
|
|
973
|
+
}
|
|
974
|
+
const workingState = {
|
|
975
|
+
confirmationAdjustedTimestamp: element.confirmationAdjustedTimestamp,
|
|
976
|
+
completionTokenCountObs: element.completionTokenCountObs,
|
|
977
|
+
isComplete: element.isComplete,
|
|
978
|
+
completedAt: element.model.completedAt,
|
|
979
|
+
elapsedMs: element.model.elapsedMs
|
|
980
|
+
};
|
|
981
|
+
if (!checkModeOption(
|
|
931
982
|
this.delegate.currentChatMode(),
|
|
932
983
|
this.rendererOptions.progressMessageAtBottomOfResponse
|
|
933
984
|
)) {
|
|
934
|
-
return
|
|
985
|
+
return undefined;
|
|
986
|
+
}
|
|
987
|
+
if (isResponseVM(element)) {
|
|
988
|
+
const widget = this.chatWidgetService.getWidgetBySessionResource(element.sessionResource);
|
|
989
|
+
if (widget?.inputPart.hasActiveToolConfirmationCarousel) {
|
|
990
|
+
const nonSubagentConfirmationCount = this.getPendingToolConfirmationCount(partsToRender, false);
|
|
991
|
+
if (nonSubagentConfirmationCount > 0) {
|
|
992
|
+
return {
|
|
993
|
+
kind: "working",
|
|
994
|
+
content: ( new MarkdownString()).appendText(this.getConfirmationPendingLabel(nonSubagentConfirmationCount))
|
|
995
|
+
};
|
|
996
|
+
}
|
|
997
|
+
if (this.getPendingToolConfirmationCount(partsToRender, true) > 0 || this.getSubagentPart(templateData.renderedParts)) {
|
|
998
|
+
return undefined;
|
|
999
|
+
}
|
|
1000
|
+
return {
|
|
1001
|
+
kind: "working",
|
|
1002
|
+
content: ( new MarkdownString()).appendText(this.getConfirmationPendingLabel(1))
|
|
1003
|
+
};
|
|
1004
|
+
}
|
|
1005
|
+
}
|
|
1006
|
+
let lastPart;
|
|
1007
|
+
for (let i = partsToRender.length - 1; i >= 0; i--) {
|
|
1008
|
+
const part = partsToRender[i];
|
|
1009
|
+
if (part.kind !== "markdownContent" || part.content.value.trim().length > 0) {
|
|
1010
|
+
lastPart = part;
|
|
1011
|
+
break;
|
|
1012
|
+
}
|
|
1013
|
+
}
|
|
1014
|
+
if (showProgressDetails) {
|
|
1015
|
+
const lastThinking = this.getLastThinkingPart(templateData.renderedParts);
|
|
1016
|
+
if (lastThinking?.getIsActive() && !lastThinking.isFixedScrollingMode) {
|
|
1017
|
+
return undefined;
|
|
1018
|
+
}
|
|
1019
|
+
if (lastPart?.kind === "progressMessage") {
|
|
1020
|
+
return undefined;
|
|
1021
|
+
}
|
|
1022
|
+
return {
|
|
1023
|
+
kind: "working",
|
|
1024
|
+
state: workingState
|
|
1025
|
+
};
|
|
935
1026
|
}
|
|
936
1027
|
if (( partsToRender.some(
|
|
937
1028
|
part => part.kind === "toolInvocation" && IChatToolInvocation.isStreaming(part)
|
|
938
1029
|
))) {
|
|
939
|
-
return
|
|
1030
|
+
return undefined;
|
|
940
1031
|
}
|
|
941
1032
|
if (( partsToRender.some(
|
|
942
1033
|
part => part.kind === "toolInvocation" && !IChatToolInvocation.isComplete(part) && isMcpToolInvocation(part)
|
|
943
1034
|
))) {
|
|
944
|
-
return
|
|
1035
|
+
return undefined;
|
|
945
1036
|
}
|
|
946
|
-
const lastPart = findLast(
|
|
947
|
-
partsToRender,
|
|
948
|
-
part => part.kind !== "markdownContent" || part.content.value.trim().length > 0
|
|
949
|
-
);
|
|
950
1037
|
const lastThinking = this.getLastThinkingPart(templateData.renderedParts);
|
|
951
1038
|
if (lastThinking) {
|
|
952
|
-
return
|
|
1039
|
+
return undefined;
|
|
953
1040
|
}
|
|
954
1041
|
if (lastPart && (lastPart.kind === "toolInvocation" || lastPart.kind === "toolInvocationSerialized")) {
|
|
955
1042
|
if (lastPart.isAttachedToThinking) {
|
|
956
|
-
return
|
|
1043
|
+
return undefined;
|
|
957
1044
|
}
|
|
958
1045
|
const collapsedToolsMode = this.configService.getValue("chat.agent.thinking.collapsedTools");
|
|
959
1046
|
if (collapsedToolsMode !== CollapsedToolsDisplayMode.Off && this.shouldPinPart(lastPart, isResponseVM(element) ? element : undefined)) {
|
|
960
|
-
return
|
|
1047
|
+
return undefined;
|
|
961
1048
|
}
|
|
962
1049
|
}
|
|
963
1050
|
const hasRenderedThinkingPart = ( (templateData.renderedParts ?? []).some(part => part instanceof ChatThinkingContentPart));
|
|
964
1051
|
const hasEditPillMarkdown = ( partsToRender.some(part => part.kind === "markdownContent" && this.hasEditCodeblockUri(part)));
|
|
965
1052
|
if (hasRenderedThinkingPart && hasEditPillMarkdown) {
|
|
966
|
-
return
|
|
1053
|
+
return undefined;
|
|
967
1054
|
}
|
|
968
1055
|
if (this.getSubagentPart(templateData.renderedParts)) {
|
|
969
|
-
return
|
|
1056
|
+
return undefined;
|
|
970
1057
|
}
|
|
971
|
-
if (!lastPart || lastPart.kind === "references" || (lastPart.kind === "markdownContent" && !moreContentAvailable && this.hasBeenCaughtUpLongEnough(element)) || ((lastPart.kind === "toolInvocation" || lastPart.kind === "toolInvocationSerialized") && (IChatToolInvocation.isComplete(lastPart) || lastPart
|
|
1058
|
+
if (!lastPart || lastPart.kind === "references" || (lastPart.kind === "markdownContent" && !moreContentAvailable && this.hasBeenCaughtUpLongEnough(element)) || ((lastPart.kind === "toolInvocation" || lastPart.kind === "toolInvocationSerialized") && (IChatToolInvocation.isComplete(lastPart) || IChatToolInvocation.isEffectivelyHidden(lastPart))) || ((lastPart.kind === "textEditGroup" || lastPart.kind === "notebookEditGroup") && lastPart.done && !( partsToRender.some(
|
|
972
1059
|
part => part.kind === "toolInvocation" && !IChatToolInvocation.isComplete(part)
|
|
973
1060
|
))) || (lastPart.kind === "progressTask" && lastPart.deferred.isSettled) || lastPart.kind === "mcpServersStarting" || lastPart.kind === "disabledClaudeHooks" || lastPart.kind === "hook") {
|
|
974
|
-
return
|
|
1061
|
+
return {
|
|
1062
|
+
kind: "working"
|
|
1063
|
+
};
|
|
975
1064
|
}
|
|
976
|
-
return
|
|
1065
|
+
return undefined;
|
|
1066
|
+
}
|
|
1067
|
+
getPendingToolConfirmationCount(parts, includeSubagentConfirmations) {
|
|
1068
|
+
return parts.filter(part => {
|
|
1069
|
+
if (part.kind !== "toolInvocation") {
|
|
1070
|
+
return false;
|
|
1071
|
+
}
|
|
1072
|
+
const state = part.state.get();
|
|
1073
|
+
return state.type === IChatToolInvocation.StateKind.WaitingForConfirmation && !!state.confirmationMessages?.title && part.presentation !== "hidden" && part.source.type !== "mcp" && (isSubagentToolInvocation(part) === includeSubagentConfirmations);
|
|
1074
|
+
}).length;
|
|
1075
|
+
}
|
|
1076
|
+
getConfirmationPendingLabel(count) {
|
|
1077
|
+
return count === 1 ? ( localize(7127, "1 confirmation pending")) : ( localize(7128, "{0} confirmations pending", count));
|
|
1078
|
+
}
|
|
1079
|
+
removeWorkingProgressContentPart(templateData) {
|
|
1080
|
+
const renderedParts = templateData.renderedParts;
|
|
1081
|
+
if (!renderedParts) {
|
|
1082
|
+
return;
|
|
1083
|
+
}
|
|
1084
|
+
for (let i = renderedParts.length - 1; i >= 0; i--) {
|
|
1085
|
+
const part = renderedParts[i];
|
|
1086
|
+
if (part instanceof ChatWorkingProgressContentPart) {
|
|
1087
|
+
part.dispose();
|
|
1088
|
+
part.domNode?.remove();
|
|
1089
|
+
renderedParts.splice(i, 1);
|
|
1090
|
+
this.fireItemHeightChange(templateData);
|
|
1091
|
+
return;
|
|
1092
|
+
}
|
|
1093
|
+
}
|
|
1094
|
+
}
|
|
1095
|
+
updateWorkingProgressForPendingConfirmations(templateData) {
|
|
1096
|
+
const element = templateData.currentElement;
|
|
1097
|
+
if (!isResponseVM(element)) {
|
|
1098
|
+
return;
|
|
1099
|
+
}
|
|
1100
|
+
if (element.isComplete && this.configService.getValue(ChatConfiguration.ChatPersistentProgressEnabled) !== false) {
|
|
1101
|
+
return;
|
|
1102
|
+
}
|
|
1103
|
+
const pendingConfirmationCount = this.getPendingToolConfirmationCount(element.response.value, false);
|
|
1104
|
+
if (pendingConfirmationCount === 0) {
|
|
1105
|
+
this.removeWorkingProgressContentPart(templateData);
|
|
1106
|
+
return;
|
|
1107
|
+
}
|
|
1108
|
+
const workingProgressPart = this.getWorkingProgressContentPart(templateData);
|
|
1109
|
+
if (workingProgressPart) {
|
|
1110
|
+
workingProgressPart.updateWorkingContent(( new MarkdownString()).appendText(this.getConfirmationPendingLabel(pendingConfirmationCount)));
|
|
1111
|
+
}
|
|
1112
|
+
}
|
|
1113
|
+
getWorkingProgressContentPart(templateData) {
|
|
1114
|
+
const renderedParts = templateData.renderedParts;
|
|
1115
|
+
if (!renderedParts) {
|
|
1116
|
+
return undefined;
|
|
1117
|
+
}
|
|
1118
|
+
for (let i = renderedParts.length - 1; i >= 0; i--) {
|
|
1119
|
+
const part = renderedParts[i];
|
|
1120
|
+
if (part instanceof ChatWorkingProgressContentPart) {
|
|
1121
|
+
return part;
|
|
1122
|
+
}
|
|
1123
|
+
}
|
|
1124
|
+
return undefined;
|
|
1125
|
+
}
|
|
1126
|
+
createUpdateWorkingProgressOnConfirmationEnd(toolInvocation, templateData) {
|
|
1127
|
+
if (( this.workingProgressConfirmationEndListeners.has(toolInvocation))) {
|
|
1128
|
+
return undefined;
|
|
1129
|
+
}
|
|
1130
|
+
this.workingProgressConfirmationEndListeners.add(toolInvocation);
|
|
1131
|
+
let wasWaitingForConfirmation = false;
|
|
1132
|
+
const disposable = autorun(reader => {
|
|
1133
|
+
const currentState = toolInvocation.state.read(reader);
|
|
1134
|
+
const isWaitingForConfirmation = currentState.type === IChatToolInvocation.StateKind.WaitingForConfirmation;
|
|
1135
|
+
if (wasWaitingForConfirmation && !isWaitingForConfirmation) {
|
|
1136
|
+
this.updateWorkingProgressForPendingConfirmations(templateData);
|
|
1137
|
+
this.workingProgressConfirmationEndListeners.delete(toolInvocation);
|
|
1138
|
+
disposable.dispose();
|
|
1139
|
+
}
|
|
1140
|
+
wasWaitingForConfirmation = isWaitingForConfirmation;
|
|
1141
|
+
});
|
|
1142
|
+
return toDisposable(() => {
|
|
1143
|
+
this.workingProgressConfirmationEndListeners.delete(toolInvocation);
|
|
1144
|
+
disposable.dispose();
|
|
1145
|
+
});
|
|
977
1146
|
}
|
|
978
1147
|
hasBeenCaughtUpLongEnough(element) {
|
|
979
1148
|
const lastRenderTime = element.renderData?.lastRenderTime;
|
|
@@ -998,6 +1167,11 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
998
1167
|
renderChatRequest(element, index, templateData) {
|
|
999
1168
|
templateData.rowContainer.classList.toggle("chat-response-loading", false);
|
|
1000
1169
|
templateData.rowContainer.classList.toggle("pending-request", !!element.pendingKind);
|
|
1170
|
+
templateData.rowContainer.classList.toggle("system-initiated-request", !!element.isSystemInitiated);
|
|
1171
|
+
if (element.isSystemInitiated) {
|
|
1172
|
+
this.renderSystemInitiatedRequest(element, templateData);
|
|
1173
|
+
return;
|
|
1174
|
+
}
|
|
1001
1175
|
if (element.pendingKind && this._pendingDragController) {
|
|
1002
1176
|
templateData.rowContainer.dataset.pendingRequestId = element.id;
|
|
1003
1177
|
templateData.rowContainer.dataset.pendingKind = element.pendingKind;
|
|
@@ -1064,7 +1238,6 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
1064
1238
|
container: templateData.rowContainer,
|
|
1065
1239
|
editorPool: this._editorPool,
|
|
1066
1240
|
diffEditorPool: this._diffEditorPool,
|
|
1067
|
-
codeBlockModelCollection: this.codeBlockModelCollection,
|
|
1068
1241
|
currentWidth: this._currentLayoutWidth,
|
|
1069
1242
|
onDidChangeVisibility: this._onDidChangeVisibility.event,
|
|
1070
1243
|
inlineTextModels: this._inlineTextModels,
|
|
@@ -1102,13 +1275,73 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
1102
1275
|
}
|
|
1103
1276
|
templateData.renderedParts = parts;
|
|
1104
1277
|
if (element.variables.length) {
|
|
1105
|
-
const newPart = this.renderAttachments(
|
|
1278
|
+
const newPart = this.renderAttachments(
|
|
1279
|
+
element.variables,
|
|
1280
|
+
element.contentReferences,
|
|
1281
|
+
element.modelId,
|
|
1282
|
+
templateData
|
|
1283
|
+
);
|
|
1106
1284
|
if (newPart.domNode) {
|
|
1107
1285
|
templateData.value.appendChild(newPart.domNode);
|
|
1108
1286
|
}
|
|
1109
1287
|
templateData.elementDisposables.add(newPart);
|
|
1110
1288
|
}
|
|
1111
1289
|
}
|
|
1290
|
+
renderSystemInitiatedRequest(element, templateData) {
|
|
1291
|
+
clearNode(templateData.value);
|
|
1292
|
+
if (templateData.renderedParts) {
|
|
1293
|
+
dispose(templateData.renderedParts);
|
|
1294
|
+
}
|
|
1295
|
+
templateData.renderedParts = [];
|
|
1296
|
+
const label = element.systemInitiatedLabel ?? element.messageText;
|
|
1297
|
+
const rendered = this.chatContentMarkdownRenderer.render(( new MarkdownString(label)));
|
|
1298
|
+
templateData.elementDisposables.add(rendered);
|
|
1299
|
+
rendered.element.classList.add("progress-step");
|
|
1300
|
+
const progressPart = this.instantiationService.createInstance(ChatProgressSubPart, rendered.element, Codicon.check, undefined);
|
|
1301
|
+
templateData.elementDisposables.add(progressPart);
|
|
1302
|
+
templateData.value.appendChild(progressPart.domNode);
|
|
1303
|
+
}
|
|
1304
|
+
doIncrementalRender(element, index, templateData) {
|
|
1305
|
+
if (!this._isVisible) {
|
|
1306
|
+
return;
|
|
1307
|
+
}
|
|
1308
|
+
const rate = this.getProgressiveRenderRate(element);
|
|
1309
|
+
this._updateMorpherRate(templateData, rate, element.isComplete || element.isCanceled);
|
|
1310
|
+
if (element.isCanceled || element.isComplete) {
|
|
1311
|
+
element.renderData = undefined;
|
|
1312
|
+
templateData.rowContainer.classList.toggle("chat-response-loading", false);
|
|
1313
|
+
this.renderChatResponseBasic(element, index, templateData);
|
|
1314
|
+
return;
|
|
1315
|
+
}
|
|
1316
|
+
templateData.rowContainer.classList.toggle("chat-response-loading", true);
|
|
1317
|
+
const contentForThisTurn = this.getNextProgressiveRenderContent(element, templateData);
|
|
1318
|
+
const partsToRender = this.diff(templateData.renderedParts ?? [], contentForThisTurn.content, element);
|
|
1319
|
+
const contentIsAlreadyRendered = partsToRender.every(part => part === null);
|
|
1320
|
+
if (!contentIsAlreadyRendered) {
|
|
1321
|
+
this.renderChatContentDiff(partsToRender, contentForThisTurn.content, element, index, templateData);
|
|
1322
|
+
}
|
|
1323
|
+
}
|
|
1324
|
+
_updateMorpherRate(templateData, rate, isComplete) {
|
|
1325
|
+
const renderedParts = templateData.renderedParts;
|
|
1326
|
+
if (!renderedParts) {
|
|
1327
|
+
return;
|
|
1328
|
+
}
|
|
1329
|
+
for (const part of renderedParts) {
|
|
1330
|
+
if (part instanceof ChatMarkdownContentPart) {
|
|
1331
|
+
part.updateStreamRate(rate, isComplete);
|
|
1332
|
+
}
|
|
1333
|
+
}
|
|
1334
|
+
}
|
|
1335
|
+
logIncrementalRenderingTelemetry() {
|
|
1336
|
+
if (this._incrementalRenderingTelemetryLogged) {
|
|
1337
|
+
return;
|
|
1338
|
+
}
|
|
1339
|
+
this._incrementalRenderingTelemetryLogged = true;
|
|
1340
|
+
this.telemetryService.publicLog2("chatIncrementalRenderingSettings", {
|
|
1341
|
+
animationStyle: this.configService.getValue(ChatConfiguration.IncrementalRenderingStyle) ?? "none",
|
|
1342
|
+
buffering: this.configService.getValue(ChatConfiguration.IncrementalRenderingBuffering) ?? "word"
|
|
1343
|
+
});
|
|
1344
|
+
}
|
|
1112
1345
|
doNextProgressiveRender(element, index, templateData, isInRenderElement) {
|
|
1113
1346
|
if (!this._isVisible) {
|
|
1114
1347
|
return true;
|
|
@@ -1187,6 +1420,12 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
1187
1420
|
renderedParts[contentIndex] = alreadyRenderedPart;
|
|
1188
1421
|
return;
|
|
1189
1422
|
}
|
|
1423
|
+
if (partToRender.kind === "markdownContent" && alreadyRenderedPart instanceof ChatMarkdownContentPart && this.configService.getValue(ChatConfiguration.IncrementalRendering)) {
|
|
1424
|
+
if (alreadyRenderedPart.tryIncrementalUpdate(partToRender)) {
|
|
1425
|
+
renderedParts[contentIndex] = alreadyRenderedPart;
|
|
1426
|
+
return;
|
|
1427
|
+
}
|
|
1428
|
+
}
|
|
1190
1429
|
alreadyRenderedPart.dispose();
|
|
1191
1430
|
if (alreadyRenderedPart.domNode) {
|
|
1192
1431
|
const thinkingToolWrapper = findParentWithClass(alreadyRenderedPart.domNode, "chat-thinking-tool-wrapper");
|
|
@@ -1203,7 +1442,6 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
1203
1442
|
container: templateData.rowContainer,
|
|
1204
1443
|
editorPool: this._editorPool,
|
|
1205
1444
|
diffEditorPool: this._diffEditorPool,
|
|
1206
|
-
codeBlockModelCollection: this.codeBlockModelCollection,
|
|
1207
1445
|
currentWidth: this._currentLayoutWidth,
|
|
1208
1446
|
onDidChangeVisibility: this._onDidChangeVisibility.event,
|
|
1209
1447
|
inlineTextModels: this._inlineTextModels,
|
|
@@ -1212,12 +1450,13 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
1212
1450
|
};
|
|
1213
1451
|
const lastThinking = this.getLastThinkingPart(renderedParts);
|
|
1214
1452
|
if (lastThinking && (partToRender.kind === "toolInvocation" || partToRender.kind === "toolInvocationSerialized" || partToRender.kind === "markdownContent" || partToRender.kind === "textEditGroup" || partToRender.kind === "hook") && this.shouldPinPart(partToRender, element)) {
|
|
1453
|
+
if (alreadyRenderedPart instanceof ChatMarkdownContentPart) {
|
|
1454
|
+
lastThinking.removeEditPillByPartId(alreadyRenderedPart.codeblocksPartId);
|
|
1455
|
+
}
|
|
1215
1456
|
const newPart = this.renderChatContentPart(partToRender, templateData, context);
|
|
1216
1457
|
if (newPart) {
|
|
1217
1458
|
renderedParts[contentIndex] = newPart;
|
|
1218
|
-
|
|
1219
|
-
alreadyRenderedPart.domNode.remove();
|
|
1220
|
-
}
|
|
1459
|
+
alreadyRenderedPart?.domNode?.remove();
|
|
1221
1460
|
}
|
|
1222
1461
|
return;
|
|
1223
1462
|
}
|
|
@@ -1253,6 +1492,7 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
1253
1492
|
getNextProgressiveRenderContent(element, templateData) {
|
|
1254
1493
|
const data = this.getDataForProgressiveRender(element);
|
|
1255
1494
|
const renderImmediately = this.configService.getValue("chat.experimental.renderMarkdownImmediately") === true;
|
|
1495
|
+
const incrementalRendering = this.configService.getValue(ChatConfiguration.IncrementalRendering) === true;
|
|
1256
1496
|
const renderableResponse = annotateSpecialMarkdownContent(element.response.value);
|
|
1257
1497
|
this.traceLayout(
|
|
1258
1498
|
"getNextProgressiveRenderContent",
|
|
@@ -1267,7 +1507,7 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
1267
1507
|
let moreContentAvailable = false;
|
|
1268
1508
|
for (let i = 0; i < renderableResponse.length; i++) {
|
|
1269
1509
|
const part = renderableResponse[i];
|
|
1270
|
-
if (part.kind === "markdownContent" && !renderImmediately) {
|
|
1510
|
+
if (part.kind === "markdownContent" && !renderImmediately && !incrementalRendering) {
|
|
1271
1511
|
const wordCountResult = getNWords(part.content.value, numNeededWords);
|
|
1272
1512
|
this.traceLayout(
|
|
1273
1513
|
"getNextProgressiveRenderContent",
|
|
@@ -1315,10 +1555,9 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
1315
1555
|
renderedParts: partsToRender
|
|
1316
1556
|
};
|
|
1317
1557
|
}
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
});
|
|
1558
|
+
const workingProgress = this.shouldShowWorkingProgress(element, partsToRender, moreContentAvailable, templateData);
|
|
1559
|
+
if (workingProgress) {
|
|
1560
|
+
partsToRender.push(workingProgress);
|
|
1322
1561
|
}
|
|
1323
1562
|
const fileChangesSummaryPart = this.getChatFileChangesSummaryPart(element);
|
|
1324
1563
|
if (fileChangesSummaryPart) {
|
|
@@ -1487,7 +1726,7 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
1487
1726
|
return;
|
|
1488
1727
|
}
|
|
1489
1728
|
for (const part of templateData.renderedParts) {
|
|
1490
|
-
if (part instanceof ChatSubagentContentPart && part.getIsActive()) {
|
|
1729
|
+
if (part instanceof ChatSubagentContentPart && part.getIsActive() && !part.hasToolsWaitingForConfirmation) {
|
|
1491
1730
|
part.markAsInactive();
|
|
1492
1731
|
}
|
|
1493
1732
|
}
|
|
@@ -1496,6 +1735,7 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
1496
1735
|
this.finalizeCurrentThinkingPart(context, templateData);
|
|
1497
1736
|
const lastSubagent = this.getSubagentPart(templateData.renderedParts, subagentId);
|
|
1498
1737
|
if (lastSubagent) {
|
|
1738
|
+
this.maybeRouteSubagentToolToCarousel(toolInvocation, lastSubagent, context, templateData, codeBlockStartIndex);
|
|
1499
1739
|
if (!isParentSubagentTool(toolInvocation)) {
|
|
1500
1740
|
lastSubagent.appendToolInvocation(toolInvocation, codeBlockStartIndex);
|
|
1501
1741
|
}
|
|
@@ -1510,14 +1750,69 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
1510
1750
|
this._contentReferencesListPool,
|
|
1511
1751
|
this._toolEditorPool,
|
|
1512
1752
|
() => this._currentLayoutWidth.get(),
|
|
1513
|
-
this._toolInvocationCodeBlockCollection,
|
|
1514
1753
|
this._announcedToolProgressKeys
|
|
1515
1754
|
);
|
|
1755
|
+
this.maybeRouteSubagentToolToCarousel(toolInvocation, subagentPart, context, templateData, codeBlockStartIndex);
|
|
1516
1756
|
if (!isParentSubagentTool(toolInvocation)) {
|
|
1517
1757
|
subagentPart.appendToolInvocation(toolInvocation, codeBlockStartIndex);
|
|
1518
1758
|
}
|
|
1519
1759
|
return subagentPart;
|
|
1520
1760
|
}
|
|
1761
|
+
maybeRouteSubagentToolToCarousel(toolInvocation, subagentPart, context, templateData, codeBlockStartIndex) {
|
|
1762
|
+
if (!this.configService.getValue(ChatConfiguration.ToolConfirmationCarousel)) {
|
|
1763
|
+
return;
|
|
1764
|
+
}
|
|
1765
|
+
if (toolInvocation.kind !== "toolInvocation" || !isResponseVM(context.element)) {
|
|
1766
|
+
return;
|
|
1767
|
+
}
|
|
1768
|
+
if (isParentSubagentTool(toolInvocation) || toolInvocation.presentation === "hidden" || toolInvocation.source.type === "mcp") {
|
|
1769
|
+
return;
|
|
1770
|
+
}
|
|
1771
|
+
if (!!this.viewModel?.editing) {
|
|
1772
|
+
return;
|
|
1773
|
+
}
|
|
1774
|
+
const widget = this.chatWidgetService.getWidgetBySessionResource(context.element.sessionResource);
|
|
1775
|
+
if (!widget) {
|
|
1776
|
+
return;
|
|
1777
|
+
}
|
|
1778
|
+
const subAgentInvocationId = subagentPart.subAgentInvocationId;
|
|
1779
|
+
const agentName = subagentPart.getAgentLabel();
|
|
1780
|
+
const scrollToSubagent = targetSubAgentId => {
|
|
1781
|
+
const currentTemplateData = this.getTemplateDataForRequestId(context.element.id);
|
|
1782
|
+
const currentSubagentPart = this.getSubagentPart(currentTemplateData?.renderedParts, targetSubAgentId) ?? subagentPart;
|
|
1783
|
+
currentSubagentPart.domNode.scrollIntoView({
|
|
1784
|
+
behavior: "smooth",
|
|
1785
|
+
block: "center"
|
|
1786
|
+
});
|
|
1787
|
+
};
|
|
1788
|
+
const navigateToCarousel = targetSubAgentId => {
|
|
1789
|
+
widget.inputPart.activateCarouselForSubagent(targetSubAgentId);
|
|
1790
|
+
};
|
|
1791
|
+
const factory = tool => this.instantiationService.createInstance(
|
|
1792
|
+
ChatToolInvocationPart,
|
|
1793
|
+
tool,
|
|
1794
|
+
context,
|
|
1795
|
+
this.chatContentMarkdownRenderer,
|
|
1796
|
+
this._contentReferencesListPool,
|
|
1797
|
+
this._toolEditorPool,
|
|
1798
|
+
() => this._currentLayoutWidth.get(),
|
|
1799
|
+
this._announcedToolProgressKeys,
|
|
1800
|
+
codeBlockStartIndex
|
|
1801
|
+
);
|
|
1802
|
+
const addToolToCarousel = tool => {
|
|
1803
|
+
widget.inputPart.addToolToConfirmationCarousel(tool, factory, subAgentInvocationId, agentName, scrollToSubagent);
|
|
1804
|
+
const listener = this.createUpdateWorkingProgressOnConfirmationEnd(tool, templateData);
|
|
1805
|
+
if (listener) {
|
|
1806
|
+
templateData.elementDisposables.add(listener);
|
|
1807
|
+
}
|
|
1808
|
+
};
|
|
1809
|
+
const shouldUseCarouselForTool = (tool, state) => this.configService.getValue(ChatConfiguration.ToolConfirmationCarousel) && !this.viewModel?.editing && tool.presentation !== "hidden" && tool.source.type !== "mcp" && state.type === IChatToolInvocation.StateKind.WaitingForConfirmation && !!state.confirmationMessages?.title;
|
|
1810
|
+
subagentPart.enableCarouselMode(navigateToCarousel, addToolToCarousel, shouldUseCarouselForTool);
|
|
1811
|
+
const toolState = toolInvocation.state.get();
|
|
1812
|
+
if (toolState.type === IChatToolInvocation.StateKind.WaitingForConfirmation && toolState.confirmationMessages?.title) {
|
|
1813
|
+
addToolToCarousel(toolInvocation);
|
|
1814
|
+
}
|
|
1815
|
+
}
|
|
1521
1816
|
finalizeCurrentThinkingPart(context, templateData) {
|
|
1522
1817
|
const lastThinking = this.getLastThinkingPart(templateData.renderedParts);
|
|
1523
1818
|
if (!lastThinking) {
|
|
@@ -1541,19 +1836,19 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
1541
1836
|
const isResponseElement = isResponseVM(context.element);
|
|
1542
1837
|
const shouldPin = this.shouldPinPart(content, isResponseElement ? context.element : undefined);
|
|
1543
1838
|
if (context.element.isComplete && !shouldPin) {
|
|
1544
|
-
|
|
1545
|
-
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
|
|
1549
|
-
}
|
|
1839
|
+
const elementTemplateData = this.getTemplateDataForRequestId(context.element.id);
|
|
1840
|
+
if (elementTemplateData?.renderedParts) {
|
|
1841
|
+
const lastThinking = this.getLastThinkingPart(elementTemplateData.renderedParts);
|
|
1842
|
+
if (lastThinking?.getIsActive()) {
|
|
1843
|
+
this.finalizeCurrentThinkingPart(context, elementTemplateData);
|
|
1550
1844
|
}
|
|
1551
1845
|
}
|
|
1552
1846
|
}
|
|
1553
1847
|
const isSubagentContent = (content.kind === "toolInvocation" || content.kind === "toolInvocationSerialized") && isSubagentToolInvocation(content);
|
|
1554
1848
|
if (context.element.isComplete && !isSubagentContent) {
|
|
1555
|
-
|
|
1556
|
-
|
|
1849
|
+
const elementTemplateData = this.getTemplateDataForRequestId(context.element.id);
|
|
1850
|
+
if (elementTemplateData) {
|
|
1851
|
+
this.finalizeAllSubagentParts(elementTemplateData);
|
|
1557
1852
|
}
|
|
1558
1853
|
}
|
|
1559
1854
|
if (content.kind === "treeData") {
|
|
@@ -1620,6 +1915,8 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
1620
1915
|
return this.renderElicitation(context, content, templateData);
|
|
1621
1916
|
} else if (content.kind === "questionCarousel") {
|
|
1622
1917
|
return this.renderQuestionCarousel(context, content, templateData);
|
|
1918
|
+
} else if (content.kind === "planReview") {
|
|
1919
|
+
return this.renderPlanReview(context, content);
|
|
1623
1920
|
} else if (content.kind === "changesSummary") {
|
|
1624
1921
|
return this.renderChangesSummary(content, context, templateData);
|
|
1625
1922
|
} else if (content.kind === "mcpServersStarting") {
|
|
@@ -1643,7 +1940,7 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
1643
1940
|
"ChatListItemRenderer#renderChatContentPart: error rendering content",
|
|
1644
1941
|
toErrorMessage(err, true)
|
|
1645
1942
|
);
|
|
1646
|
-
const errorPart = this.instantiationService.createInstance(ChatErrorContentPart, ChatErrorLevel.Error, ( new MarkdownString(( localize(
|
|
1943
|
+
const errorPart = this.instantiationService.createInstance(ChatErrorContentPart, ChatErrorLevel.Error, ( new MarkdownString(( localize(7129, "Failed to render content")) + `: ${toErrorMessage(err, false)}`)), content, this.chatContentMarkdownRenderer);
|
|
1647
1944
|
return {
|
|
1648
1945
|
dispose: () => errorPart.dispose(),
|
|
1649
1946
|
domNode: errorPart.domNode,
|
|
@@ -1756,10 +2053,8 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
1756
2053
|
}));
|
|
1757
2054
|
part.codeblocks?.forEach((info, i) => {
|
|
1758
2055
|
codeBlocksByResponseId[codeBlockStartIndex + i] = info;
|
|
1759
|
-
|
|
1760
|
-
|
|
1761
|
-
return;
|
|
1762
|
-
}
|
|
2056
|
+
const uri = info.uri;
|
|
2057
|
+
if (uri) {
|
|
1763
2058
|
this.codeBlocksByEditorUri.set(uri, info);
|
|
1764
2059
|
part.addDisposable(toDisposable(() => {
|
|
1765
2060
|
const codeblock = this.codeBlocksByEditorUri.get(uri);
|
|
@@ -1767,10 +2062,19 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
1767
2062
|
this.codeBlocksByEditorUri.delete(uri);
|
|
1768
2063
|
}
|
|
1769
2064
|
}));
|
|
1770
|
-
}
|
|
2065
|
+
}
|
|
1771
2066
|
});
|
|
1772
2067
|
}
|
|
1773
2068
|
renderToolInvocation(toolInvocation, context, templateData) {
|
|
2069
|
+
if (IChatToolInvocation.isComplete(toolInvocation)) {
|
|
2070
|
+
const msg = toolInvocation.pastTenseMessage ?? toolInvocation.invocationMessage;
|
|
2071
|
+
const text = typeof msg === "string" ? msg : msg?.value;
|
|
2072
|
+
if (!text || text.trim().length === 0) {
|
|
2073
|
+
return this.renderNoContent(
|
|
2074
|
+
other => (other.kind === "toolInvocation" || other.kind === "toolInvocationSerialized") && other.toolCallId === toolInvocation.toolCallId
|
|
2075
|
+
);
|
|
2076
|
+
}
|
|
2077
|
+
}
|
|
1774
2078
|
if (this.configService.getValue("chat.agent.thinking.collapsedTools") === CollapsedToolsDisplayMode.Off) {
|
|
1775
2079
|
this.finalizeCurrentThinkingPart(context, templateData);
|
|
1776
2080
|
}
|
|
@@ -1785,7 +2089,6 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
1785
2089
|
this._contentReferencesListPool,
|
|
1786
2090
|
this._toolEditorPool,
|
|
1787
2091
|
() => this._currentLayoutWidth.get(),
|
|
1788
|
-
this._toolInvocationCodeBlockCollection,
|
|
1789
2092
|
this._announcedToolProgressKeys,
|
|
1790
2093
|
codeBlockStartIndex
|
|
1791
2094
|
);
|
|
@@ -1799,7 +2102,7 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
1799
2102
|
const collapsedToolsMode = this.configService.getValue("chat.agent.thinking.collapsedTools");
|
|
1800
2103
|
if (isResponseVM(context.element) && collapsedToolsMode !== CollapsedToolsDisplayMode.Off) {
|
|
1801
2104
|
const lastThinking = this.getLastThinkingPart(templateData.renderedParts);
|
|
1802
|
-
if (!lastThinking && toolInvocation
|
|
2105
|
+
if (!lastThinking && !IChatToolInvocation.isEffectivelyHidden(toolInvocation) && this.shouldPinPart(toolInvocation, context.element) && collapsedToolsMode === CollapsedToolsDisplayMode.Always) {
|
|
1803
2106
|
const thinkingPart = this.renderThinkingPart({
|
|
1804
2107
|
kind: "thinking"
|
|
1805
2108
|
}, context, templateData);
|
|
@@ -1818,7 +2121,7 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
1818
2121
|
return thinkingPart;
|
|
1819
2122
|
}
|
|
1820
2123
|
if (this.shouldPinPart(toolInvocation, context.element)) {
|
|
1821
|
-
if (lastThinking && toolInvocation
|
|
2124
|
+
if (lastThinking && !IChatToolInvocation.isEffectivelyHidden(toolInvocation)) {
|
|
1822
2125
|
toolInvocation.isAttachedToThinking = true;
|
|
1823
2126
|
lastThinking.appendItem(createToolPart, toolInvocation.toolId, toolInvocation, templateData.value);
|
|
1824
2127
|
this.setupConfirmationTransitionWatcher(
|
|
@@ -1838,12 +2141,46 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
1838
2141
|
}
|
|
1839
2142
|
}
|
|
1840
2143
|
const subagentId = getSubagentId(toolInvocation);
|
|
1841
|
-
if (subagentId && isResponseVM(context.element) && toolInvocation
|
|
2144
|
+
if (subagentId && isResponseVM(context.element) && !IChatToolInvocation.isEffectivelyHidden(toolInvocation)) {
|
|
1842
2145
|
return this.handleSubagentToolGrouping(toolInvocation, subagentId, context, templateData, codeBlockStartIndex);
|
|
1843
2146
|
}
|
|
1844
2147
|
const {
|
|
1845
2148
|
part
|
|
1846
2149
|
} = createToolPart();
|
|
2150
|
+
if (this.configService.getValue(ChatConfiguration.ToolConfirmationCarousel) && toolInvocation.kind === "toolInvocation" && isResponseVM(context.element) && toolInvocation.source.type !== "mcp" && !this.viewModel?.editing) {
|
|
2151
|
+
const widget = this.chatWidgetService.getWidgetBySessionResource(context.element.sessionResource);
|
|
2152
|
+
if (widget) {
|
|
2153
|
+
const factory = tool => this.instantiationService.createInstance(
|
|
2154
|
+
ChatToolInvocationPart,
|
|
2155
|
+
tool,
|
|
2156
|
+
context,
|
|
2157
|
+
this.chatContentMarkdownRenderer,
|
|
2158
|
+
this._contentReferencesListPool,
|
|
2159
|
+
this._toolEditorPool,
|
|
2160
|
+
() => this._currentLayoutWidth.get(),
|
|
2161
|
+
this._announcedToolProgressKeys,
|
|
2162
|
+
codeBlockStartIndex
|
|
2163
|
+
);
|
|
2164
|
+
const routePartToCarousel = () => {
|
|
2165
|
+
widget.inputPart.addToolToConfirmationCarousel(toolInvocation, factory);
|
|
2166
|
+
hide(part.domNode);
|
|
2167
|
+
return true;
|
|
2168
|
+
};
|
|
2169
|
+
part.addDisposable(autorun(reader => {
|
|
2170
|
+
const state = toolInvocation.state.read(reader);
|
|
2171
|
+
const isCarouselConfirmation = state.type === IChatToolInvocation.StateKind.WaitingForConfirmation && !!state.confirmationMessages?.title && toolInvocation.presentation !== "hidden" && toolInvocation.source.type !== "mcp" && !this.viewModel?.editing;
|
|
2172
|
+
if (isCarouselConfirmation) {
|
|
2173
|
+
if (!routePartToCarousel()) ;
|
|
2174
|
+
} else if (IChatToolInvocation.isEffectivelyHidden(toolInvocation, reader)) {
|
|
2175
|
+
this.updateWorkingProgressForPendingConfirmations(templateData);
|
|
2176
|
+
hide(part.domNode);
|
|
2177
|
+
} else {
|
|
2178
|
+
this.updateWorkingProgressForPendingConfirmations(templateData);
|
|
2179
|
+
show(part.domNode);
|
|
2180
|
+
}
|
|
2181
|
+
}));
|
|
2182
|
+
}
|
|
2183
|
+
}
|
|
1847
2184
|
return part;
|
|
1848
2185
|
}
|
|
1849
2186
|
setupConfirmationTransitionWatcher(
|
|
@@ -1857,10 +2194,12 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
1857
2194
|
if (toolInvocation.kind !== "toolInvocation") {
|
|
1858
2195
|
return;
|
|
1859
2196
|
}
|
|
1860
|
-
const
|
|
2197
|
+
const moveConfirmationWidgetOutOfThinking = () => {
|
|
1861
2198
|
const createdPart = getCreatedPart();
|
|
1862
2199
|
toolInvocation.isAttachedToThinking = false;
|
|
2200
|
+
let part;
|
|
1863
2201
|
if (createdPart?.domNode) {
|
|
2202
|
+
part = createdPart;
|
|
1864
2203
|
const wrapper = createdPart.domNode.parentElement;
|
|
1865
2204
|
if (wrapper?.classList.contains("chat-thinking-tool-wrapper")) {
|
|
1866
2205
|
wrapper.remove();
|
|
@@ -1870,8 +2209,10 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
1870
2209
|
} else {
|
|
1871
2210
|
thinkingPart.removeLazyItem(toolInvocation.toolId);
|
|
1872
2211
|
const {
|
|
1873
|
-
domNode
|
|
2212
|
+
domNode,
|
|
2213
|
+
part: createdPart
|
|
1874
2214
|
} = createToolPart();
|
|
2215
|
+
part = createdPart;
|
|
1875
2216
|
templateData.value.appendChild(domNode);
|
|
1876
2217
|
}
|
|
1877
2218
|
this.finalizeCurrentThinkingPart(context, templateData);
|
|
@@ -1879,13 +2220,59 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
1879
2220
|
thinkingPart.domNode?.remove();
|
|
1880
2221
|
thinkingPart.dispose();
|
|
1881
2222
|
}
|
|
2223
|
+
return part;
|
|
2224
|
+
};
|
|
2225
|
+
const isWorkingState = type => type === IChatToolInvocation.StateKind.Streaming || type === IChatToolInvocation.StateKind.Executing;
|
|
2226
|
+
const tryRouteConfirmationToCarousel = () => {
|
|
2227
|
+
if (!this.configService.getValue(ChatConfiguration.ToolConfirmationCarousel) || !isResponseVM(context.element) || this.viewModel?.editing || toolInvocation.presentation === "hidden" || toolInvocation.source.type === "mcp") {
|
|
2228
|
+
return false;
|
|
2229
|
+
}
|
|
2230
|
+
const state = toolInvocation.state.get();
|
|
2231
|
+
if (state.type !== IChatToolInvocation.StateKind.WaitingForConfirmation || !state.confirmationMessages?.title) {
|
|
2232
|
+
return false;
|
|
2233
|
+
}
|
|
2234
|
+
const widget = this.chatWidgetService.getWidgetBySessionResource(context.element.sessionResource);
|
|
2235
|
+
if (!widget) {
|
|
2236
|
+
return false;
|
|
2237
|
+
}
|
|
2238
|
+
const part = moveConfirmationWidgetOutOfThinking();
|
|
2239
|
+
const factory = tool => this.instantiationService.createInstance(
|
|
2240
|
+
ChatToolInvocationPart,
|
|
2241
|
+
tool,
|
|
2242
|
+
context,
|
|
2243
|
+
this.chatContentMarkdownRenderer,
|
|
2244
|
+
this._contentReferencesListPool,
|
|
2245
|
+
this._toolEditorPool,
|
|
2246
|
+
() => this._currentLayoutWidth.get(),
|
|
2247
|
+
this._announcedToolProgressKeys,
|
|
2248
|
+
context.codeBlockStartIndex
|
|
2249
|
+
);
|
|
2250
|
+
part.addDisposable(autorun(reader => {
|
|
2251
|
+
const currentState = toolInvocation.state.read(reader);
|
|
2252
|
+
if (currentState.type === IChatToolInvocation.StateKind.WaitingForConfirmation && currentState.confirmationMessages?.title) {
|
|
2253
|
+
widget.inputPart.addToolToConfirmationCarousel(toolInvocation, factory);
|
|
2254
|
+
hide(part.domNode);
|
|
2255
|
+
} else if (IChatToolInvocation.isEffectivelyHidden(toolInvocation, reader)) {
|
|
2256
|
+
this.updateWorkingProgressForPendingConfirmations(templateData);
|
|
2257
|
+
hide(part.domNode);
|
|
2258
|
+
} else {
|
|
2259
|
+
this.updateWorkingProgressForPendingConfirmations(templateData);
|
|
2260
|
+
show(part.domNode);
|
|
2261
|
+
}
|
|
2262
|
+
}));
|
|
2263
|
+
return true;
|
|
1882
2264
|
};
|
|
1883
2265
|
const currentState = toolInvocation.state.get();
|
|
1884
|
-
if (currentState.type === IChatToolInvocation.StateKind.WaitingForConfirmation
|
|
1885
|
-
|
|
2266
|
+
if (currentState.type === IChatToolInvocation.StateKind.WaitingForConfirmation) {
|
|
2267
|
+
if (!tryRouteConfirmationToCarousel()) {
|
|
2268
|
+
moveConfirmationWidgetOutOfThinking();
|
|
2269
|
+
}
|
|
2270
|
+
return;
|
|
2271
|
+
}
|
|
2272
|
+
if (currentState.type === IChatToolInvocation.StateKind.WaitingForPostApproval) {
|
|
2273
|
+
moveConfirmationWidgetOutOfThinking();
|
|
1886
2274
|
return;
|
|
1887
2275
|
}
|
|
1888
|
-
const isWorkingState = type => type === IChatToolInvocation.StateKind.Streaming || type === IChatToolInvocation.StateKind.Executing;
|
|
1889
2276
|
if (!isWorkingState(currentState.type)) {
|
|
1890
2277
|
return;
|
|
1891
2278
|
}
|
|
@@ -1898,7 +2285,9 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
1898
2285
|
}
|
|
1899
2286
|
didRemoveConfirmationWidget = true;
|
|
1900
2287
|
disposable.dispose();
|
|
1901
|
-
|
|
2288
|
+
if (state.type !== IChatToolInvocation.StateKind.WaitingForConfirmation || !tryRouteConfirmationToCarousel()) {
|
|
2289
|
+
moveConfirmationWidgetOutOfThinking();
|
|
2290
|
+
}
|
|
1902
2291
|
}
|
|
1903
2292
|
});
|
|
1904
2293
|
thinkingPart.addDisposable(disposable);
|
|
@@ -1928,7 +2317,7 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
1928
2317
|
}
|
|
1929
2318
|
const shouldPinToThinking = hookPart.hookType === HookType.PreToolUse || hookPart.hookType === HookType.PostToolUse;
|
|
1930
2319
|
if (shouldPinToThinking) {
|
|
1931
|
-
const hookTitle = hookPart.stopReason ? (hookPart.toolDisplayName ? ( localize(
|
|
2320
|
+
const hookTitle = hookPart.stopReason ? (hookPart.toolDisplayName ? ( localize(7130, "Blocked {0}", hookPart.toolDisplayName)) : ( localize(7131, "Blocked by hook"))) : (hookPart.toolDisplayName ? ( localize(7132, "Used {0}, but received a warning", hookPart.toolDisplayName)) : ( localize(7133, "Tool call received a warning")));
|
|
1932
2321
|
let thinkingPart = this.getLastThinkingPart(templateData.renderedParts);
|
|
1933
2322
|
if (!thinkingPart) {
|
|
1934
2323
|
const newThinking = this.renderThinkingPart({
|
|
@@ -1960,6 +2349,7 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
1960
2349
|
if (!isResponseVM(context.element)) {
|
|
1961
2350
|
return;
|
|
1962
2351
|
}
|
|
2352
|
+
this.finalizeCurrentThinkingPart(context, templateData);
|
|
1963
2353
|
const taskPart = this.instantiationService.createInstance(
|
|
1964
2354
|
ChatTaskContentPart,
|
|
1965
2355
|
task,
|
|
@@ -1984,6 +2374,21 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
1984
2374
|
renderQuestionCarousel(context, carousel, templateData) {
|
|
1985
2375
|
this.finalizeCurrentThinkingPart(context, templateData);
|
|
1986
2376
|
this._notifyOnQuestionCarousel(context, carousel);
|
|
2377
|
+
if (!carousel.terminalId && isResponseVM(context.element)) {
|
|
2378
|
+
const responseElement = context.element;
|
|
2379
|
+
const model = this.chatService.getSession(responseElement.sessionResource);
|
|
2380
|
+
const request = model?.getRequests().find(r => r.id === responseElement.requestId);
|
|
2381
|
+
if (request?.terminalExecutionId) {
|
|
2382
|
+
carousel.terminalId = request.terminalExecutionId;
|
|
2383
|
+
this.logService.trace(
|
|
2384
|
+
`ChatListItemRenderer#renderQuestionCarousel: backfilled terminalId=${carousel.terminalId} for request=${responseElement.requestId}`
|
|
2385
|
+
);
|
|
2386
|
+
} else {
|
|
2387
|
+
this.logService.trace(
|
|
2388
|
+
`ChatListItemRenderer#renderQuestionCarousel: no terminalExecutionId to backfill for request=${responseElement.requestId}`
|
|
2389
|
+
);
|
|
2390
|
+
}
|
|
2391
|
+
}
|
|
1987
2392
|
const widget = isResponseVM(context.element) ? this.chatWidgetService.getWidgetBySessionResource(context.element.sessionResource) : undefined;
|
|
1988
2393
|
const shouldAutoFocus = widget ? widget.getInput() === "" : true;
|
|
1989
2394
|
const responseId = isResponseVM(context.element) ? context.element.requestId : undefined;
|
|
@@ -2085,10 +2490,10 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
2085
2490
|
return;
|
|
2086
2491
|
}
|
|
2087
2492
|
const questionCount = carousel.questions.length;
|
|
2088
|
-
const question = carousel.questions.length > 0 && carousel.questions[0].message ? carousel.questions[0].message : ( localize(
|
|
2493
|
+
const question = carousel.questions.length > 0 && carousel.questions[0].message ? carousel.questions[0].message : ( localize(7134, "Chat input required."));
|
|
2089
2494
|
const stringQuestion = typeof question === "string" ? question : question.value;
|
|
2090
|
-
const alertMessage = questionCount === 1 ? ( localize(
|
|
2091
|
-
|
|
2495
|
+
const alertMessage = questionCount === 1 ? ( localize(7135, "Chat input required (1 question): {0}", stringQuestion)) : ( localize(
|
|
2496
|
+
7136,
|
|
2092
2497
|
"Chat input required ({0} questions): {1}",
|
|
2093
2498
|
questionCount,
|
|
2094
2499
|
stringQuestion
|
|
@@ -2097,12 +2502,60 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
2097
2502
|
if (stableKey) {
|
|
2098
2503
|
this._notifiedQuestionCarousels.add(stableKey);
|
|
2099
2504
|
}
|
|
2100
|
-
const signalMessage = questionCount === 1 ? ( localize(
|
|
2505
|
+
const signalMessage = questionCount === 1 ? ( localize(7137, "Chat needs your input (1 question).")) : ( localize(7138, "Chat needs your input ({0} questions).", questionCount));
|
|
2101
2506
|
this.accessibilitySignalService.playSignal(AccessibilitySignal.chatUserActionRequired, {
|
|
2102
2507
|
allowManyInParallel: true,
|
|
2103
2508
|
customAlertMessage: signalMessage
|
|
2104
2509
|
});
|
|
2105
2510
|
}
|
|
2511
|
+
renderPlanReview(context, review) {
|
|
2512
|
+
const widget = isResponseVM(context.element) ? this.chatWidgetService.getWidgetBySessionResource(context.element.sessionResource) : undefined;
|
|
2513
|
+
const responseId = isResponseVM(context.element) ? context.element.requestId : undefined;
|
|
2514
|
+
const reviewKey = review.resolveId ?? `${responseId ?? ""}_${context.contentIndex}`;
|
|
2515
|
+
const handleSubmit = result => {
|
|
2516
|
+
review.data = result;
|
|
2517
|
+
review.isUsed = true;
|
|
2518
|
+
if (review instanceof ChatPlanReviewData) {
|
|
2519
|
+
review.completion.complete(result);
|
|
2520
|
+
}
|
|
2521
|
+
widget?.input.clearPlanReview(undefined, reviewKey);
|
|
2522
|
+
};
|
|
2523
|
+
const responseIsComplete = isResponseVM(context.element) && context.element.isComplete;
|
|
2524
|
+
if (review.isUsed || responseIsComplete) {
|
|
2525
|
+
if (responseIsComplete && !review.isUsed) {
|
|
2526
|
+
review.isUsed = true;
|
|
2527
|
+
if (review instanceof ChatPlanReviewData) {
|
|
2528
|
+
review.completion.complete(undefined);
|
|
2529
|
+
}
|
|
2530
|
+
if (responseId) {
|
|
2531
|
+
widget?.input.clearPlanReview(responseId);
|
|
2532
|
+
}
|
|
2533
|
+
}
|
|
2534
|
+
return this.renderNoContent(other => other.kind === "planReview");
|
|
2535
|
+
}
|
|
2536
|
+
const isEditing = !!this.viewModel?.editing;
|
|
2537
|
+
const dockedPart = isEditing ? undefined : widget?.input.renderPlanReview(review, context, {
|
|
2538
|
+
onSubmit: handleSubmit
|
|
2539
|
+
});
|
|
2540
|
+
if (!dockedPart) {
|
|
2541
|
+
const fallbackPart = this.instantiationService.createInstance(ChatPlanReviewPart, review, context, {
|
|
2542
|
+
onSubmit: handleSubmit
|
|
2543
|
+
});
|
|
2544
|
+
return fallbackPart;
|
|
2545
|
+
}
|
|
2546
|
+
return this.renderNoContent((other, _followingContent, element) => {
|
|
2547
|
+
if (review.isUsed || (isResponseVM(element) && element.isComplete)) {
|
|
2548
|
+
return false;
|
|
2549
|
+
}
|
|
2550
|
+
if (other.kind === "planReview") {
|
|
2551
|
+
if (review.resolveId && other.resolveId) {
|
|
2552
|
+
return review.resolveId === other.resolveId;
|
|
2553
|
+
}
|
|
2554
|
+
return other === review;
|
|
2555
|
+
}
|
|
2556
|
+
return false;
|
|
2557
|
+
});
|
|
2558
|
+
}
|
|
2106
2559
|
removeCarouselFromTracking(context, part) {
|
|
2107
2560
|
if (isResponseVM(context.element)) {
|
|
2108
2561
|
const carousels = this.pendingQuestionCarousels.get(context.element.sessionResource);
|
|
@@ -2115,10 +2568,11 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
2115
2568
|
const part = this.instantiationService.createInstance(ChatCheckpointFileChangesSummaryContentPart, content, context);
|
|
2116
2569
|
return part;
|
|
2117
2570
|
}
|
|
2118
|
-
renderAttachments(variables, contentReferences, templateData) {
|
|
2571
|
+
renderAttachments(variables, contentReferences, modelId, templateData) {
|
|
2119
2572
|
return this.instantiationService.createInstance(ChatAttachmentsContentPart, {
|
|
2120
2573
|
variables,
|
|
2121
2574
|
contentReferences,
|
|
2575
|
+
modelId,
|
|
2122
2576
|
domNode: undefined
|
|
2123
2577
|
});
|
|
2124
2578
|
}
|
|
@@ -2152,7 +2606,6 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
2152
2606
|
this.chatContentMarkdownRenderer,
|
|
2153
2607
|
undefined,
|
|
2154
2608
|
this._currentLayoutWidth.get(),
|
|
2155
|
-
this.codeBlockModelCollection,
|
|
2156
2609
|
{}
|
|
2157
2610
|
);
|
|
2158
2611
|
markdownPart.addDisposable(
|
|
@@ -2188,7 +2641,7 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
2188
2641
|
})
|
|
2189
2642
|
);
|
|
2190
2643
|
markdownPart.addDisposable(
|
|
2191
|
-
this.hoverService.setupManagedHover(getDefaultHoverDelegate("element"), markdownPart.domNode, ( localize(
|
|
2644
|
+
this.hoverService.setupManagedHover(getDefaultHoverDelegate("element"), markdownPart.domNode, ( localize(7139, "Click to Edit")), {
|
|
2192
2645
|
trapFocus: true
|
|
2193
2646
|
})
|
|
2194
2647
|
);
|
|
@@ -2215,7 +2668,7 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
2215
2668
|
subagentPart.appendMarkdownItem(() => ({
|
|
2216
2669
|
domNode: markdownPart.domNode,
|
|
2217
2670
|
disposable: markdownPart
|
|
2218
|
-
}), markdownPart.codeblocksPartId, markdown, templateData.value);
|
|
2671
|
+
}), markdownPart.codeblocksPartId, markdown, templateData.value, markdownPart);
|
|
2219
2672
|
return subagentPart;
|
|
2220
2673
|
}
|
|
2221
2674
|
}
|
|
@@ -2228,7 +2681,7 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
2228
2681
|
thinkingPart.appendItem(() => ({
|
|
2229
2682
|
domNode: markdownPart.domNode,
|
|
2230
2683
|
disposable: markdownPart
|
|
2231
|
-
}), markdownPart.codeblocksPartId, markdown, templateData.value, markdownPart.onDidChangeDiff);
|
|
2684
|
+
}), markdownPart.codeblocksPartId, markdown, templateData.value, markdownPart.onDidChangeDiff, markdownPart);
|
|
2232
2685
|
}
|
|
2233
2686
|
return thinkingPart;
|
|
2234
2687
|
}
|
|
@@ -2306,6 +2759,17 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
2306
2759
|
if (templateData.currentElement && !this.viewModel?.editing) {
|
|
2307
2760
|
this.templateDataByRequestId.delete(templateData.currentElement.id);
|
|
2308
2761
|
}
|
|
2762
|
+
const codeBlocks = this.codeBlocksByResponseId.get(node.element.id);
|
|
2763
|
+
if (codeBlocks) {
|
|
2764
|
+
for (const info of codeBlocks) {
|
|
2765
|
+
if (info?.uri) {
|
|
2766
|
+
this.codeBlocksByEditorUri.delete(info.uri);
|
|
2767
|
+
}
|
|
2768
|
+
}
|
|
2769
|
+
this.codeBlocksByResponseId.delete(node.element.id);
|
|
2770
|
+
}
|
|
2771
|
+
this.fileTreesByResponseId.delete(node.element.id);
|
|
2772
|
+
this.focusedFileTreesByResponseId.delete(node.element.id);
|
|
2309
2773
|
if (isRequestVM(node.element) && node.element.id === this.viewModel?.editing?.id && details?.onScroll) {
|
|
2310
2774
|
this._onDidDispose.fire(templateData);
|
|
2311
2775
|
}
|
|
@@ -2333,7 +2797,7 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
|
|
|
2333
2797
|
requestHover.style.opacity = "0";
|
|
2334
2798
|
}
|
|
2335
2799
|
};
|
|
2336
|
-
ChatListItemRenderer = ChatListItemRenderer_1 = ( __decorate([( __param(
|
|
2800
|
+
ChatListItemRenderer = ChatListItemRenderer_1 = ( __decorate([( __param(5, IInstantiationService)), ( __param(6, IConfigurationService)), ( __param(7, ILogService)), ( __param(8, IContextKeyService)), ( __param(9, IThemeService)), ( __param(10, ICommandService)), ( __param(11, IHoverService)), ( __param(12, IChatWidgetService)), ( __param(13, IChatEntitlementService)), ( __param(14, IChatService)), ( __param(15, IAccessibilitySignalService)), ( __param(16, IAccessibilityService)), ( __param(17, IWorkbenchEnvironmentService)), ( __param(18, ITelemetryService))], ChatListItemRenderer));
|
|
2337
2801
|
class ChatListDelegate extends CachedListVirtualDelegate {
|
|
2338
2802
|
constructor(defaultElementHeight) {
|
|
2339
2803
|
super();
|