@codingame/monaco-vscode-katex-common 28.4.1 → 29.1.0

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.
Files changed (154) hide show
  1. package/package.json +2 -2
  2. package/vscode/src/vs/platform/actions/browser/buttonbar.js +2 -2
  3. package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatAccessibilityProvider.js +17 -15
  4. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatContinueInAction.d.ts +2 -2
  5. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatContinueInAction.js +9 -9
  6. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatElicitationActions.js +1 -1
  7. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatExecuteActions.d.ts +3 -1
  8. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatExecuteActions.js +158 -47
  9. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatTitleActions.js +22 -17
  10. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionHoverWidget.js +8 -8
  11. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsControl.d.ts +16 -4
  12. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsControl.js +121 -14
  13. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsFilter.d.ts +8 -1
  14. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsFilter.js +15 -8
  15. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsOpener.js +1 -1
  16. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsViewer.d.ts +29 -13
  17. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsViewer.js +349 -109
  18. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/media/agentsessionsviewer.css +47 -23
  19. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentWidgets.d.ts +6 -1
  20. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentWidgets.js +104 -62
  21. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatImplicitContext.js +1 -3
  22. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/implicitContextAttachment.js +13 -11
  23. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingActions.js +34 -40
  24. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorActions.js +21 -16
  25. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorOverlay.js +7 -7
  26. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingExplanationWidget.js +14 -14
  27. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/chatSessionPickerActionItem.d.ts +8 -1
  28. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/chatSessionPickerActionItem.js +13 -4
  29. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/chatSessions.contribution.d.ts +29 -50
  30. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/chatSessions.contribution.js +261 -282
  31. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/searchableOptionPickerActionItem.d.ts +2 -1
  32. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/searchableOptionPickerActionItem.js +7 -5
  33. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatAgentHover.js +2 -2
  34. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatArtifactsWidget.d.ts +31 -0
  35. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatArtifactsWidget.js +184 -0
  36. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentMarkdownRenderer.js +4 -2
  37. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatAgentCommandContentPart.js +1 -1
  38. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatAnonymousRateLimitedPart.js +2 -2
  39. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatChangesSummaryPart.js +1 -1
  40. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatCodeCitationContentPart.js +1 -1
  41. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatCommandContentPart.js +1 -1
  42. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatConfirmationContentPart.js +2 -2
  43. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatConfirmationWidget.js +1 -1
  44. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatDisabledClaudeHooksContentPart.js +4 -3
  45. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatExtensionsContentPart.js +1 -1
  46. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatHookContentPart.js +1 -1
  47. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatInlineAnchorWidget.d.ts +3 -2
  48. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatInlineAnchorWidget.js +42 -34
  49. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatMarkdownContentPart.d.ts +1 -0
  50. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatMarkdownContentPart.js +14 -18
  51. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatMcpServersInteractionContentPart.js +11 -9
  52. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatMultiDiffContentPart.js +4 -4
  53. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatProgressContentPart.js +6 -2
  54. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatQuestionCarouselPart.d.ts +25 -2
  55. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatQuestionCarouselPart.js +332 -114
  56. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatQuotaExceededPart.js +4 -4
  57. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatReferencesContentPart.d.ts +1 -0
  58. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatReferencesContentPart.js +7 -7
  59. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatResourceGroupWidget.d.ts +2 -0
  60. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatResourceGroupWidget.js +10 -5
  61. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatSubagentContentPart.d.ts +1 -1
  62. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatSubagentContentPart.js +11 -16
  63. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatSuggestNextWidget.d.ts +7 -1
  64. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatSuggestNextWidget.js +66 -7
  65. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatTextEditContentPart.js +1 -1
  66. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatThinkingContentPart.d.ts +28 -3
  67. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatThinkingContentPart.js +272 -107
  68. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatThinkingExternalResourcesWidget.d.ts +18 -0
  69. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatThinkingExternalResourcesWidget.js +70 -0
  70. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatTipContentPart.js +9 -9
  71. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatTodoListWidget.js +17 -17
  72. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatToolInputOutputContentPart.d.ts +1 -1
  73. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatToolInputOutputContentPart.js +6 -3
  74. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatTreeContentPart.js +1 -1
  75. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatWorkspaceEditContentPart.js +3 -3
  76. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/codeBlockPart.js +14 -14
  77. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatConfirmationWidget.css +151 -0
  78. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatInlineAnchorWidget.css +6 -6
  79. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatQuestionCarousel.css +96 -10
  80. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatTerminalToolProgressPart.css +6 -1
  81. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatThinkingContent.css +86 -10
  82. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/abstractToolConfirmationSubPart.d.ts +7 -0
  83. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/abstractToolConfirmationSubPart.js +5 -2
  84. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatExtensionsInstallToolSubPart.js +4 -4
  85. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatInputOutputMarkdownProgressPart.d.ts +1 -1
  86. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatInputOutputMarkdownProgressPart.js +8 -6
  87. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatMcpAppModel.js +1 -1
  88. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatMcpAppSubPart.js +3 -3
  89. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatModifiedFilesConfirmationSubPart.d.ts +28 -0
  90. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatModifiedFilesConfirmationSubPart.js +273 -0
  91. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatSimpleToolProgressPart.js +3 -2
  92. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatTerminalToolConfirmationSubPart.js +28 -16
  93. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatTerminalToolProgressPart.d.ts +22 -1
  94. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatTerminalToolProgressPart.js +81 -32
  95. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolConfirmationSubPart.d.ts +1 -0
  96. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolConfirmationSubPart.js +20 -7
  97. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolInvocationPart.js +11 -1
  98. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolOutputPart.js +2 -2
  99. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolPartUtilities.d.ts +6 -0
  100. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolPartUtilities.js +21 -7
  101. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolPostExecuteConfirmationPart.js +5 -5
  102. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolProgressPart.js +2 -12
  103. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatDragAndDrop.js +12 -12
  104. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatListRenderer.d.ts +0 -6
  105. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatListRenderer.js +112 -163
  106. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatListWidget.js +11 -1
  107. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatWidget.d.ts +9 -1
  108. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatWidget.js +137 -52
  109. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatFollowups.js +1 -1
  110. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatInputPart.d.ts +12 -0
  111. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatInputPart.js +108 -38
  112. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatModelPicker.d.ts +9 -3
  113. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatModelPicker.js +385 -247
  114. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/delegationSessionPickerActionItem.d.ts +5 -1
  115. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/delegationSessionPickerActionItem.js +23 -7
  116. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modePickerActionItem.js +6 -6
  117. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPickerActionItem.d.ts +4 -1
  118. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPickerActionItem2.js +4 -2
  119. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/permissionPickerActionItem.js +23 -23
  120. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/sessionTargetPickerActionItem.js +3 -3
  121. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/workspacePickerActionItem.js +3 -3
  122. package/vscode/src/vs/workbench/contrib/chat/browser/widget/media/chat.css +124 -17
  123. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatContextUsageDetails.d.ts +4 -0
  124. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatContextUsageDetails.js +24 -7
  125. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatContextUsageWidget.js +30 -11
  126. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/media/chatContextUsageDetails.css +84 -0
  127. package/vscode/src/vs/workbench/contrib/chat/common/chatImageExtraction.d.ts +31 -0
  128. package/vscode/src/vs/workbench/contrib/chat/common/chatImageExtraction.js +170 -0
  129. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/internalCustomizations/internalPromptFileSystem.d.ts +47 -0
  130. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/internalCustomizations/internalPromptFileSystem.js +95 -0
  131. package/vscode/src/vs/workbench/contrib/chat/common/widget/annotations.js +4 -1
  132. package/vscode/src/vs/workbench/contrib/chat/common/widget/chatColors.js +15 -15
  133. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatAffordance.d.ts +1 -1
  134. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatAffordance.js +4 -3
  135. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatController.d.ts +2 -0
  136. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatController.js +38 -6
  137. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatEditorAffordance.d.ts +1 -0
  138. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatEditorAffordance.js +31 -0
  139. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatOverlayWidget.d.ts +12 -3
  140. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatOverlayWidget.js +130 -23
  141. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionService.d.ts +23 -0
  142. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionService.js +41 -0
  143. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatWidget.js +5 -5
  144. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatZoneWidget.js +1 -1
  145. package/vscode/src/vs/workbench/contrib/inlineChat/browser/media/inlineChatOverlayWidget.css +55 -3
  146. package/vscode/src/vs/workbench/contrib/inlineChat/common/inlineChat.d.ts +4 -1
  147. package/vscode/src/vs/workbench/contrib/inlineChat/common/inlineChat.js +50 -39
  148. package/vscode/src/vs/workbench/contrib/interactive/browser/replInputHintContentWidget.js +3 -3
  149. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/cellStatusBar/executionStatusBarItemController.js +7 -7
  150. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/find/notebookFindWidget.js +2 -2
  151. package/vscode/src/vs/workbench/contrib/replNotebook/browser/replEditor.js +1 -1
  152. package/vscode/src/vs/workbench/contrib/replNotebook/browser/replEditorInput.js +1 -1
  153. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatQuestionCarouselAutoReply.d.ts +0 -35
  154. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatQuestionCarouselAutoReply.js +0 -440
@@ -13,7 +13,9 @@ import { IChatWidgetService } from '@codingame/monaco-vscode-api/vscode/vs/workb
13
13
  import { ChatQueryTitlePart } from '../chatConfirmationWidget.js';
14
14
  import { ChatMarkdownContentPart } from '../chatMarkdownContentPart.js';
15
15
  import { ChatProgressSubPart } from '../chatProgressContentPart.js';
16
+ import { ChatResourceGroupWidget } from '../chatResourceGroupWidget.js';
16
17
  import { BaseChatToolInvocationSubPart } from './chatToolInvocationSubPart.js';
18
+ import { extractImagesFromToolInvocationOutputDetails } from '../../../../common/chatImageExtraction.js';
17
19
  import { TerminalToolAutoExpand } from './terminalToolAutoExpand.js';
18
20
  import { ChatCollapsibleContentPart } from '../chatCollapsibleContentPart.js';
19
21
  import * as chatTerminalToolProgressPart from '../media/chatTerminalToolProgressPart.css';
@@ -34,7 +36,7 @@ import { URI } from '@codingame/monaco-vscode-api/vscode/vs/base/common/uri';
34
36
  import { stripIcons } from '@codingame/monaco-vscode-api/vscode/vs/base/common/iconLabels';
35
37
  import { IAccessibleViewService } from '@codingame/monaco-vscode-api/vscode/vs/platform/accessibility/browser/accessibleView.service';
36
38
  import { IContextKeyService } from '@codingame/monaco-vscode-api/vscode/vs/platform/contextkey/common/contextkey.service';
37
- import { AccessibilityWorkbenchSettingId, AccessibilityVerbositySettingId } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/accessibility/browser/accessibilityConfiguration';
39
+ import { AccessibilityVerbositySettingId } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/accessibility/browser/accessibilityConfiguration';
38
40
  import { ChatContextKeys } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/actions/chatContextKeys';
39
41
  import { IKeybindingService } from '@codingame/monaco-vscode-api/vscode/vs/platform/keybinding/common/keybinding.service';
40
42
  import { DetachedTerminalCommandMirror, DetachedTerminalSnapshotMirror } from '../../../../../terminal/browser/chatTerminalCommandMirror.js';
@@ -281,7 +283,7 @@ let ChatTerminalToolProgressPart = class ChatTerminalToolProgressPart extends Ba
281
283
  const markdownOptions = {
282
284
  codeBlockRenderOptions,
283
285
  accessibilityOptions: pastTenseMessage ? {
284
- statusMessage: ( localize(6681, "{0}", stripIcons(pastTenseMessage)))
286
+ statusMessage: ( localize(6881, "{0}", stripIcons(pastTenseMessage)))
285
287
  } : undefined
286
288
  };
287
289
  this.markdownPart = this._register(_instantiationService.createInstance(
@@ -314,23 +316,57 @@ let ChatTerminalToolProgressPart = class ChatTerminalToolProgressPart extends Ba
314
316
  this.domNode = this._createCollapsibleWrapper(progressPart.domNode, displayCommand, toolInvocation, context);
315
317
  } else {
316
318
  this.domNode = progressPart.domNode;
317
- const updateCheckmarks = () => this.domNode.classList.toggle(
318
- "show-checkmarks",
319
- !!this._configurationService.getValue(AccessibilityWorkbenchSettingId.ShowChatCheckmarks)
320
- );
321
- updateCheckmarks();
322
- this._register(this._configurationService.onDidChangeConfiguration(e => {
323
- if (e.affectsConfiguration(AccessibilityWorkbenchSettingId.ShowChatCheckmarks)) {
324
- updateCheckmarks();
325
- }
326
- }));
327
319
  }
320
+ this._renderImagePills(toolInvocation, context, elements.container);
328
321
  const hasStoredOutput = !!terminalData.terminalCommandOutput;
329
322
  if (expandedStateByInvocation.get(toolInvocation) || (this._isInThinkingContainer && IChatToolInvocation.isComplete(toolInvocation) && hasStoredOutput)) {
330
323
  void this._toggleOutput(true);
331
324
  }
332
325
  this._register(this._terminalChatService.registerProgressPart(this));
333
326
  }
327
+ _renderImagePills(toolInvocation, context, innerContainer) {
328
+ const renderImages = () => {
329
+ const extracted = extractImagesFromToolInvocationOutputDetails(toolInvocation, context.element.sessionResource);
330
+ const imageParts = ( extracted.map(img => ({
331
+ kind: "data",
332
+ value: img.data.buffer,
333
+ mimeType: img.mimeType,
334
+ uri: img.uri
335
+ })));
336
+ if (imageParts.length === 0) {
337
+ return;
338
+ }
339
+ const widget = this._register(
340
+ this._instantiationService.createInstance(ChatResourceGroupWidget, imageParts)
341
+ );
342
+ if (this._thinkingCollapsibleWrapper) {
343
+ const wrapper = this._thinkingCollapsibleWrapper;
344
+ const placeWidget = expanded => {
345
+ if (expanded) {
346
+ innerContainer.appendChild(widget.domNode);
347
+ } else {
348
+ wrapper.domNode.appendChild(widget.domNode);
349
+ }
350
+ };
351
+ placeWidget(wrapper.expanded.get());
352
+ this._register(autorun(reader => {
353
+ placeWidget(wrapper.expanded.read(reader));
354
+ }));
355
+ } else {
356
+ innerContainer.appendChild(widget.domNode);
357
+ }
358
+ };
359
+ if (toolInvocation.kind === "toolInvocationSerialized") {
360
+ renderImages();
361
+ } else {
362
+ this._register(autorun(reader => {
363
+ const state = toolInvocation.state.read(reader);
364
+ if (state.type === IChatToolInvocation.StateKind.Completed) {
365
+ renderImages();
366
+ }
367
+ }));
368
+ }
369
+ }
334
370
  _createCollapsibleWrapper(contentElement, commandText, toolInvocation, context) {
335
371
  const truncatedCommand = commandText.length > MAX_COMMAND_TITLE_LENGTH ? commandText.substring(0, MAX_COMMAND_TITLE_LENGTH) + "..." : commandText;
336
372
  const isComplete = IChatToolInvocation.isComplete(toolInvocation);
@@ -340,6 +376,7 @@ let ChatTerminalToolProgressPart = class ChatTerminalToolProgressPart extends Ba
340
376
  const wrapper = this._register(this._instantiationService.createInstance(
341
377
  ChatTerminalThinkingCollapsibleWrapper,
342
378
  truncatedCommand,
379
+ this._terminalData.commandLine.isSandboxWrapped === true,
343
380
  contentElement,
344
381
  context,
345
382
  initialExpanded,
@@ -861,7 +898,7 @@ let ChatTerminalToolOutputSection = class ChatTerminalToolOutputSection extends
861
898
  if (!commandText) {
862
899
  return;
863
900
  }
864
- const ariaLabel = ( localize(6682, "Terminal output for {0}", commandText));
901
+ const ariaLabel = ( localize(6882, "Terminal output for {0}", commandText));
865
902
  const scrollableDomNode = this._scrollableContainer.getDomNode();
866
903
  scrollableDomNode.setAttribute("role", "region");
867
904
  const accessibleViewHint = this._accessibleViewService.getOpenAriaHint(AccessibilityVerbositySettingId.TerminalChatOutput);
@@ -874,26 +911,26 @@ let ChatTerminalToolOutputSection = class ChatTerminalToolOutputSection extends
874
911
  if (!commandText) {
875
912
  return undefined;
876
913
  }
877
- const commandHeader = ( localize(6683, "Command: {0}", commandText));
914
+ const commandHeader = ( localize(6883, "Command: {0}", commandText));
878
915
  if (command) {
879
916
  const rawOutput = command.getOutput();
880
917
  if (!rawOutput || rawOutput.trim().length === 0) {
881
- return `${commandHeader}\n${( localize(6684, "No output was produced by the command."))}`;
918
+ return `${commandHeader}\n${( localize(6884, "No output was produced by the command."))}`;
882
919
  }
883
920
  const lines = rawOutput.split("\n");
884
921
  return `${commandHeader}\n${lines.join("\n").trimEnd()}`;
885
922
  }
886
923
  const snapshot = this._getTerminalCommandOutput();
887
924
  if (!snapshot) {
888
- return `${commandHeader}\n${( localize(6685, "Command output is no longer available."))}`;
925
+ return `${commandHeader}\n${( localize(6885, "Command output is no longer available."))}`;
889
926
  }
890
927
  const plain = removeAnsiEscapeCodes((snapshot.text ?? ""));
891
928
  if (!plain.trim().length) {
892
- return `${commandHeader}\n${( localize(6684, "No output was produced by the command."))}`;
929
+ return `${commandHeader}\n${( localize(6884, "No output was produced by the command."))}`;
893
930
  }
894
931
  let outputText = plain.trimEnd();
895
932
  if (snapshot.truncated) {
896
- outputText += `\n${( localize(6686, "Output truncated."))}`;
933
+ outputText += `\n${( localize(6886, "Output truncated."))}`;
897
934
  }
898
935
  return `${commandHeader}\n${outputText}`;
899
936
  }
@@ -1002,7 +1039,7 @@ let ChatTerminalToolOutputSection = class ChatTerminalToolOutputSection extends
1002
1039
  }
1003
1040
  if (!hasOutput) {
1004
1041
  if (commandFinished) {
1005
- this._showEmptyMessage(( localize(6684, "No output was produced by the command.")));
1042
+ this._showEmptyMessage(( localize(6884, "No output was produced by the command.")));
1006
1043
  }
1007
1044
  } else {
1008
1045
  this._hideEmptyMessage();
@@ -1029,7 +1066,7 @@ let ChatTerminalToolOutputSection = class ChatTerminalToolOutputSection extends
1029
1066
  if (hasText) {
1030
1067
  this._hideEmptyMessage();
1031
1068
  } else {
1032
- this._showEmptyMessage(( localize(6684, "No output was produced by the command.")));
1069
+ this._showEmptyMessage(( localize(6884, "No output was produced by the command.")));
1033
1070
  }
1034
1071
  const lineCount = result?.lineCount ?? snapshot.lineCount ?? 0;
1035
1072
  this._layoutOutput(lineCount);
@@ -1038,9 +1075,9 @@ let ChatTerminalToolOutputSection = class ChatTerminalToolOutputSection extends
1038
1075
  clearNode(this._terminalContainer);
1039
1076
  this._lastRenderedLineCount = undefined;
1040
1077
  if (!liveTerminalInstance) {
1041
- this._showEmptyMessage(( localize(6687, "Terminal is no longer available.")));
1078
+ this._showEmptyMessage(( localize(6887, "Terminal is no longer available.")));
1042
1079
  } else {
1043
- this._showEmptyMessage(( localize(6688, "Command information is not available.")));
1080
+ this._showEmptyMessage(( localize(6888, "Command information is not available.")));
1044
1081
  }
1045
1082
  }
1046
1083
  async _resolveLiveTerminal() {
@@ -1159,7 +1196,7 @@ let ChatTerminalToolOutputSection = class ChatTerminalToolOutputSection extends
1159
1196
  ChatTerminalToolOutputSection = ( __decorate([( __param(5, IAccessibleViewService)), ( __param(6, IInstantiationService)), ( __param(7, ITerminalConfigurationService)), ( __param(8, IThemeService)), ( __param(9, IContextKeyService))], ChatTerminalToolOutputSection));
1160
1197
  let ToggleChatTerminalOutputAction = class ToggleChatTerminalOutputAction extends Action {
1161
1198
  constructor(_toggle, _keybindingService, _telemetryService) {
1162
- super(TerminalContribCommandId.ToggleChatTerminalOutput, ( localize(6689, "Show Output")), ThemeIcon.asClassName(Codicon.chevronRight), true);
1199
+ super(TerminalContribCommandId.ToggleChatTerminalOutput, ( localize(6889, "Show Output")), ThemeIcon.asClassName(Codicon.chevronRight), true);
1163
1200
  this._toggle = _toggle;
1164
1201
  this._keybindingService = _keybindingService;
1165
1202
  this._telemetryService = _telemetryService;
@@ -1182,10 +1219,10 @@ let ToggleChatTerminalOutputAction = class ToggleChatTerminalOutputAction extend
1182
1219
  }
1183
1220
  _updatePresentation() {
1184
1221
  if (this._expanded) {
1185
- this.label = ( localize(6690, "Hide Output"));
1222
+ this.label = ( localize(6890, "Hide Output"));
1186
1223
  this.class = ThemeIcon.asClassName(Codicon.chevronDown);
1187
1224
  } else {
1188
- this.label = ( localize(6689, "Show Output"));
1225
+ this.label = ( localize(6889, "Show Output"));
1189
1226
  this.class = ThemeIcon.asClassName(Codicon.chevronRight);
1190
1227
  }
1191
1228
  }
@@ -1209,7 +1246,7 @@ let FocusChatInstanceAction = class FocusChatInstanceAction extends Action {
1209
1246
  ) {
1210
1247
  super(
1211
1248
  TerminalContribCommandId.FocusChatInstanceAction,
1212
- isTerminalHidden ? ( localize(6691, "Show and Focus Terminal")) : ( localize(6692, "Focus Terminal")),
1249
+ isTerminalHidden ? ( localize(6891, "Show and Focus Terminal")) : ( localize(6892, "Focus Terminal")),
1213
1250
  ThemeIcon.asClassName(Codicon.openInProduct),
1214
1251
  true
1215
1252
  );
@@ -1225,7 +1262,7 @@ let FocusChatInstanceAction = class FocusChatInstanceAction extends Action {
1225
1262
  this._updateTooltip();
1226
1263
  }
1227
1264
  async run() {
1228
- this.label = this._instance?.shellLaunchConfig.hideFromUser ? ( localize(6693, "Show and Focus Terminal")) : ( localize(6692, "Focus Terminal"));
1265
+ this.label = this._instance?.shellLaunchConfig.hideFromUser ? ( localize(6893, "Show and Focus Terminal")) : ( localize(6892, "Focus Terminal"));
1229
1266
  this._updateTooltip();
1230
1267
  let target = "none";
1231
1268
  let location = "panel";
@@ -1282,7 +1319,7 @@ let FocusChatInstanceAction = class FocusChatInstanceAction extends Action {
1282
1319
  FocusChatInstanceAction = ( __decorate([( __param(5, ITerminalService)), ( __param(6, ITerminalEditorService)), ( __param(7, ITerminalGroupService)), ( __param(8, IKeybindingService)), ( __param(9, ITelemetryService))], FocusChatInstanceAction));
1283
1320
  let ContinueInBackgroundAction = class ContinueInBackgroundAction extends Action {
1284
1321
  constructor(_terminalToolSessionId, _terminalChatService) {
1285
- super(TerminalContribCommandId.ContinueInBackground, ( localize(6694, "Continue in Background")), ThemeIcon.asClassName(Codicon.debugContinue), true);
1322
+ super(TerminalContribCommandId.ContinueInBackground, ( localize(6894, "Continue in Background")), ThemeIcon.asClassName(Codicon.debugContinue), true);
1286
1323
  this._terminalToolSessionId = _terminalToolSessionId;
1287
1324
  this._terminalChatService = _terminalChatService;
1288
1325
  }
@@ -1294,6 +1331,7 @@ ContinueInBackgroundAction = ( __decorate([( __param(1, ITerminalChatService))],
1294
1331
  let ChatTerminalThinkingCollapsibleWrapper = class ChatTerminalThinkingCollapsibleWrapper extends ChatCollapsibleContentPart {
1295
1332
  constructor(
1296
1333
  commandText,
1334
+ isSandboxWrapped,
1297
1335
  contentElement,
1298
1336
  context,
1299
1337
  initialExpanded,
@@ -1301,10 +1339,11 @@ let ChatTerminalThinkingCollapsibleWrapper = class ChatTerminalThinkingCollapsib
1301
1339
  hoverService,
1302
1340
  configurationService
1303
1341
  ) {
1304
- const title = isComplete ? `Ran \`${commandText}\`` : `Running \`${commandText}\``;
1342
+ const title = isComplete ? ( localize(6895, "Ran {0}", commandText)) : ( localize(6896, "Running {0}", commandText));
1305
1343
  super(title, context, undefined, hoverService, configurationService);
1306
1344
  this._terminalContentElement = contentElement;
1307
1345
  this._commandText = commandText;
1346
+ this._isSandboxWrapped = isSandboxWrapped;
1308
1347
  this._isComplete = isComplete;
1309
1348
  this.domNode.classList.add("chat-terminal-thinking-collapsible");
1310
1349
  if (isComplete) {
@@ -1319,7 +1358,17 @@ let ChatTerminalThinkingCollapsibleWrapper = class ChatTerminalThinkingCollapsib
1319
1358
  }
1320
1359
  const labelElement = this._collapseButton.labelElement;
1321
1360
  labelElement.textContent = "";
1322
- const prefixText = this._isComplete ? ( localize(6695, "Ran ")) : ( localize(6696, "Running "));
1361
+ if (this._isSandboxWrapped) {
1362
+ const prefixText = this._isComplete ? ( localize(6897, "Ran ")) : ( localize(6898, "Running "));
1363
+ const suffixText = ( localize(6899, " in sandbox"));
1364
+ labelElement.appendChild(createTextNode(prefixText));
1365
+ const codeElement = createElement("code");
1366
+ codeElement.textContent = this._commandText;
1367
+ labelElement.appendChild(codeElement);
1368
+ labelElement.appendChild(createTextNode(suffixText));
1369
+ return;
1370
+ }
1371
+ const prefixText = this._isComplete ? ( localize(6900, "Ran ")) : ( localize(6901, "Running "));
1323
1372
  const ranText = createTextNode(prefixText);
1324
1373
  const codeElement = createElement("code");
1325
1374
  codeElement.textContent = this._commandText;
@@ -1346,6 +1395,6 @@ let ChatTerminalThinkingCollapsibleWrapper = class ChatTerminalThinkingCollapsib
1346
1395
  return false;
1347
1396
  }
1348
1397
  };
1349
- ChatTerminalThinkingCollapsibleWrapper = ( __decorate([( __param(5, IHoverService)), ( __param(6, IConfigurationService))], ChatTerminalThinkingCollapsibleWrapper));
1398
+ ChatTerminalThinkingCollapsibleWrapper = ( __decorate([( __param(6, IHoverService)), ( __param(7, IConfigurationService))], ChatTerminalThinkingCollapsibleWrapper));
1350
1399
 
1351
- export { ChatTerminalToolProgressPart, ContinueInBackgroundAction, FocusChatInstanceAction, ToggleChatTerminalOutputAction };
1400
+ export { ChatTerminalThinkingCollapsibleWrapper, ChatTerminalToolProgressPart, ContinueInBackgroundAction, FocusChatInstanceAction, ToggleChatTerminalOutputAction };
@@ -31,6 +31,7 @@ export declare class ToolConfirmationSubPart extends AbstractToolConfirmationSub
31
31
  get codeblocks(): IChatCodeBlockInfo[];
32
32
  constructor(toolInvocation: IChatToolInvocation, context: IChatContentPartRenderContext, renderer: IMarkdownRenderer, editorPool: EditorPool, currentWidthDelegate: () => number, codeBlockModelCollection: CodeBlockModelCollection, codeBlockStartIndex: number, instantiationService: IInstantiationService, keybindingService: IKeybindingService, languageService: ILanguageService, contextKeyService: IContextKeyService, chatWidgetService: IChatWidgetService, commandService: ICommandService, markerService: IMarkerService, languageModelToolsService: ILanguageModelToolsService, chatMarkdownAnchorService: IChatMarkdownAnchorService, confirmationService: ILanguageModelToolsConfirmationService);
33
33
  protected additionalPrimaryActions(): (Separator | import("./abstractToolConfirmationSubPart.js").IAbstractToolPrimaryAction)[];
34
+ protected useAllowOnceAsPrimary(): boolean;
34
35
  protected createContentElement(): HTMLElement | string;
35
36
  protected getTitle(): string;
36
37
  private _makeMarkdownPart;
@@ -79,8 +79,8 @@ let ToolConfirmationSubPart = class ToolConfirmationSubPart extends AbstractTool
79
79
  this.render({
80
80
  allowActionId: AcceptToolConfirmationActionId,
81
81
  skipActionId: SkipToolConfirmationActionId,
82
- allowLabel: state.confirmationMessages.confirmResults ? ( localize(6697, "Allow and Review Once")) : ( localize(6698, "Allow Once")),
83
- skipLabel: ( localize(6699, "Proceed without running this tool")),
82
+ allowLabel: state.confirmationMessages.confirmResults ? ( localize(6902, "Allow and Review Once")) : ( localize(6903, "Allow Once")),
83
+ skipLabel: ( localize(6904, "Proceed without running this tool")),
84
84
  partType: "chatToolConfirmation",
85
85
  subtitle: typeof toolInvocation.originMessage === "string" ? toolInvocation.originMessage : toolInvocation.originMessage?.value
86
86
  });
@@ -92,11 +92,17 @@ let ToolConfirmationSubPart = class ToolConfirmationSubPart extends AbstractTool
92
92
  return actions;
93
93
  }
94
94
  if (state.confirmationMessages?.allowAutoConfirm !== false) {
95
+ const approveCombination = state.confirmationMessages?.approveCombination;
96
+ const combination = approveCombination ? {
97
+ label: typeof approveCombination.label === "string" ? approveCombination.label : approveCombination.label.value,
98
+ key: approveCombination.key
99
+ } : undefined;
95
100
  const confirmActions = this.confirmationService.getPreConfirmActions({
96
101
  toolId: this.toolInvocation.toolId,
97
102
  source: this.toolInvocation.source,
98
103
  parameters: state.parameters,
99
- chatSessionResource: this.context.element.sessionResource
104
+ chatSessionResource: this.context.element.sessionResource,
105
+ combination
100
106
  });
101
107
  for (const action of confirmActions) {
102
108
  if (action.divider) {
@@ -119,7 +125,7 @@ let ToolConfirmationSubPart = class ToolConfirmationSubPart extends AbstractTool
119
125
  }
120
126
  if (state.confirmationMessages?.confirmResults) {
121
127
  actions.unshift({
122
- label: ( localize(6700, "Allow and Skip Reviewing Result")),
128
+ label: ( localize(6905, "Allow and Skip Reviewing Result")),
123
129
  data: () => {
124
130
  state.confirmationMessages.confirmResults = undefined;
125
131
  this.confirmWith(this.toolInvocation, {
@@ -130,6 +136,13 @@ let ToolConfirmationSubPart = class ToolConfirmationSubPart extends AbstractTool
130
136
  }
131
137
  return actions;
132
138
  }
139
+ useAllowOnceAsPrimary() {
140
+ const state = this.toolInvocation.state.get();
141
+ if (state.type === IChatToolInvocation.StateKind.WaitingForConfirmation) {
142
+ return !!state.confirmationMessages?.approveCombination;
143
+ }
144
+ return false;
145
+ }
133
146
  createContentElement() {
134
147
  const state = this.toolInvocation.state.get();
135
148
  if (state.type !== IChatToolInvocation.StateKind.WaitingForConfirmation) {
@@ -154,11 +167,11 @@ let ToolConfirmationSubPart = class ToolConfirmationSubPart extends AbstractTool
154
167
  };
155
168
  const elements = h("div", [h(".message@messageContainer", [
156
169
  h(".message-wrapper@message"),
157
- h(".see-more@showMore", [h("a", [( localize(6701, "Show More"))])])
170
+ h(".see-more@showMore", [h("a", [( localize(6906, "Show More"))])])
158
171
  ]), h(".editor@editor"), h(".disclaimer@disclaimer")]);
159
172
  if (toolInvocation.toolSpecificData?.kind === "input" && toolInvocation.toolSpecificData.rawInput && !isEmptyObject(toolInvocation.toolSpecificData.rawInput)) {
160
173
  const titleEl = createElement("h3");
161
- titleEl.textContent = ( localize(6702, "Input"));
174
+ titleEl.textContent = ( localize(6907, "Input"));
162
175
  elements.editor.appendChild(titleEl);
163
176
  const inputData = toolInvocation.toolSpecificData;
164
177
  const codeBlockRenderOptions = {
@@ -234,7 +247,7 @@ let ToolConfirmationSubPart = class ToolConfirmationSubPart extends AbstractTool
234
247
  elements.editor.append(editor.object.element);
235
248
  if (canSeeMore) {
236
249
  const seeMore = h("div.see-more", [h("a@link")]);
237
- seeMore.link.textContent = ( localize(6703, "See more"));
250
+ seeMore.link.textContent = ( localize(6908, "See more"));
238
251
  this._register(addDisposableGenericMouseDownListener(seeMore.link, () => {
239
252
  try {
240
253
  const parsed = JSON.parse(model.getValue());
@@ -13,6 +13,7 @@ import { ChatInputOutputMarkdownProgressPart } from './chatInputOutputMarkdownPr
13
13
  import { ChatMcpAppSubPart } from './chatMcpAppSubPart.js';
14
14
  import { ChatResultListSubPart } from './chatResultListSubPart.js';
15
15
  import { ChatSimpleToolProgressPart } from './chatSimpleToolProgressPart.js';
16
+ import { ChatModifiedFilesConfirmationSubPart } from './chatModifiedFilesConfirmationSubPart.js';
16
17
  import { ChatTerminalToolConfirmationSubPart } from './chatTerminalToolConfirmationSubPart.js';
17
18
  import { ChatTerminalToolProgressPart } from './chatTerminalToolProgressPart.js';
18
19
  import { ToolConfirmationSubPart } from './chatToolConfirmationSubPart.js';
@@ -98,7 +99,7 @@ let ChatToolInvocationPart = class ChatToolInvocationPart extends Disposable {
98
99
  this.subPart = partStore.add(this.createToolInvocationSubPart());
99
100
  subPartDomNode.replaceWith(this.subPart.domNode);
100
101
  subPartDomNode = this.subPart.domNode;
101
- const isConfirmation = this.subPart instanceof ToolConfirmationSubPart || this.subPart instanceof ChatTerminalToolConfirmationSubPart || this.subPart instanceof ExtensionsInstallConfirmationWidgetSubPart || this.subPart instanceof ChatToolPostExecuteConfirmationPart;
102
+ const isConfirmation = this.subPart instanceof ToolConfirmationSubPart || this.subPart instanceof ChatTerminalToolConfirmationSubPart || this.subPart instanceof ChatModifiedFilesConfirmationSubPart || this.subPart instanceof ExtensionsInstallConfirmationWidgetSubPart || this.subPart instanceof ChatToolPostExecuteConfirmationPart;
102
103
  this.domNode.classList.toggle("has-confirmation", isConfirmation);
103
104
  partStore.add(this.subPart.onNeedsRerender(render));
104
105
  };
@@ -155,6 +156,13 @@ let ChatToolInvocationPart = class ChatToolInvocationPart extends Disposable {
155
156
  this.codeBlockModelCollection,
156
157
  this.codeBlockStartIndex
157
158
  );
159
+ } else if (this.toolInvocation.toolSpecificData?.kind === "modifiedFilesConfirmation") {
160
+ return this.instantiationService.createInstance(
161
+ ChatModifiedFilesConfirmationSubPart,
162
+ this.toolInvocation,
163
+ this.context,
164
+ this.listPool
165
+ );
158
166
  } else {
159
167
  return this.instantiationService.createInstance(
160
168
  ToolConfirmationSubPart,
@@ -235,6 +243,7 @@ let ChatToolInvocationPart = class ChatToolInvocationPart extends Disposable {
235
243
  this.toolInvocation.pastTenseMessage ?? this.toolInvocation.invocationMessage,
236
244
  this.toolInvocation.originMessage,
237
245
  resultDetails.input,
246
+ resultDetails.inputLanguage,
238
247
  resultDetails.output,
239
248
  !!resultDetails.isError
240
249
  );
@@ -249,6 +258,7 @@ let ChatToolInvocationPart = class ChatToolInvocationPart extends Disposable {
249
258
  this.toolInvocation.originMessage,
250
259
  typeof this.toolInvocation.toolSpecificData.rawInput === "string" ? this.toolInvocation.toolSpecificData.rawInput : JSON.stringify(this.toolInvocation.toolSpecificData.rawInput, null, 2),
251
260
  undefined,
261
+ undefined,
252
262
  false
253
263
  );
254
264
  }
@@ -75,7 +75,7 @@ let ChatToolOutputSubPart = class ChatToolOutputSubPart extends BaseChatToolInvo
75
75
  partState.webviewOrigin = partState.webviewOrigin;
76
76
  }
77
77
  const progressMessage = $("span");
78
- progressMessage.textContent = ( localize(6704, "Rendering tool output..."));
78
+ progressMessage.textContent = ( localize(6909, "Rendering tool output..."));
79
79
  const progressPart = this._register(this.instantiationService.createInstance(
80
80
  ChatProgressSubPart,
81
81
  progressMessage,
@@ -125,7 +125,7 @@ let ChatToolOutputSubPart = class ChatToolOutputSubPart extends BaseChatToolInvo
125
125
  iconElement.classList.add(...ThemeIcon.asClassNameArray(Codicon.error));
126
126
  errorHeaderNode.append(iconElement);
127
127
  const errorTitleNode = $(".output-error-title");
128
- errorTitleNode.textContent = ( localize(6705, "Error rendering the tool output"));
128
+ errorTitleNode.textContent = ( localize(6910, "Error rendering the tool output"));
129
129
  errorHeaderNode.append(errorTitleNode);
130
130
  const errorMessageNode = $(".output-error-details");
131
131
  errorMessageNode.textContent = error?.message || String(error);
@@ -1,5 +1,11 @@
1
1
  import { IMarkdownString } from "@codingame/monaco-vscode-api/vscode/vs/base/common/htmlContent";
2
2
  import { ConfirmedReason, IChatToolInvocation, IChatToolInvocationSerialized } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/chatService/chatService";
3
+ export declare function isMcpToolInvocation(toolInvocation: IChatToolInvocation | IChatToolInvocationSerialized): boolean;
4
+ /**
5
+ * Determines whether a tool invocation's progress text should shimmer.
6
+ * MCP tools shimmer; askQuestions defers to the caller's default; all others opt out.
7
+ */
8
+ export declare function shouldShimmerForTool(toolInvocation: IChatToolInvocation | IChatToolInvocationSerialized): boolean;
3
9
  /**
4
10
  * Creates a markdown message explaining why a tool was auto-approved.
5
11
  * @param toolInvocation The tool invocation to get the approval message for
@@ -3,6 +3,18 @@ import { MarkdownString, createMarkdownCommandLink } from '@codingame/monaco-vsc
3
3
  import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
4
4
  import { IChatToolInvocation, ToolConfirmKind } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/chatService/chatService';
5
5
 
6
+ function isMcpToolInvocation(toolInvocation) {
7
+ return toolInvocation.source?.type === "mcp" || toolInvocation.toolId.toLowerCase().includes("mcp");
8
+ }
9
+ function shouldShimmerForTool(toolInvocation) {
10
+ if (isMcpToolInvocation(toolInvocation)) {
11
+ return !IChatToolInvocation.isComplete(toolInvocation);
12
+ }
13
+ if (toolInvocation.toolId === "copilot_askQuestions" || toolInvocation.toolId === "vscode_askQuestions") {
14
+ return false;
15
+ }
16
+ return false;
17
+ }
6
18
  function getToolApprovalMessage(toolInvocation) {
7
19
  const reason = IChatToolInvocation.executionConfirmedOrDenied(toolInvocation);
8
20
  if (!reason || typeof reason === "boolean") {
@@ -14,18 +26,20 @@ function getApprovalMessageFromReason(reason) {
14
26
  let md;
15
27
  switch (reason.type) {
16
28
  case ToolConfirmKind.Setting:
17
- md = ( localize(6706, "Auto approved by {0}", createMarkdownCommandLink({
18
- title: "`" + reason.id + "`",
29
+ md = ( localize(6911, "Auto approved by {0}", createMarkdownCommandLink({
30
+ text: "`" + reason.id + "`",
19
31
  id: "workbench.action.openSettings",
20
- arguments: [reason.id]
32
+ arguments: [reason.id],
33
+ tooltip: ( localize(6912, "Open settings"))
21
34
  }, false)));
22
35
  break;
23
36
  case ToolConfirmKind.LmServicePerTool:
24
- md = reason.scope === "session" ? ( localize(6707, "Auto approved for this session")) : reason.scope === "workspace" ? ( localize(6708, "Auto approved for this workspace")) : ( localize(6709, "Auto approved for this profile"));
37
+ md = reason.scope === "session" ? ( localize(6913, "Auto approved for this session")) : reason.scope === "workspace" ? ( localize(6914, "Auto approved for this workspace")) : ( localize(6915, "Auto approved for this profile"));
25
38
  md += " (" + createMarkdownCommandLink({
26
- title: ( localize(6710, "Edit")),
39
+ text: ( localize(6916, "Edit")),
27
40
  id: "workbench.action.chat.editToolApproval",
28
- arguments: [reason.scope]
41
+ arguments: [reason.scope],
42
+ tooltip: ( localize(6917, "Edit tool approval settings"))
29
43
  }) + ")";
30
44
  break;
31
45
  case ToolConfirmKind.ConfirmationNotNeeded:
@@ -45,4 +59,4 @@ function getApprovalMessageFromReason(reason) {
45
59
  }));
46
60
  }
47
61
 
48
- export { getApprovalMessageFromReason, getToolApprovalMessage };
62
+ export { getApprovalMessageFromReason, getToolApprovalMessage, isMcpToolInvocation, shouldShimmerForTool };
@@ -46,8 +46,8 @@ let ChatToolPostExecuteConfirmationPart = class ChatToolPostExecuteConfirmationP
46
46
  this.render({
47
47
  allowActionId: AcceptToolPostConfirmationActionId,
48
48
  skipActionId: SkipToolPostConfirmationActionId,
49
- allowLabel: ( localize(6711, "Allow Once")),
50
- skipLabel: ( localize(6712, "Skip Results")),
49
+ allowLabel: ( localize(6918, "Allow Once")),
50
+ skipLabel: ( localize(6919, "Skip Results")),
51
51
  partType: "chatToolPostConfirmation",
52
52
  subtitle: typeof subtitle === "string" ? subtitle : subtitle?.value
53
53
  });
@@ -63,7 +63,7 @@ let ChatToolPostExecuteConfirmationPart = class ChatToolPostExecuteConfirmationP
63
63
  return this.createResultsDisplay(this.toolInvocation, state.contentForModel);
64
64
  }
65
65
  getTitle() {
66
- return localize(6713, "Approve Tool Result");
66
+ return localize(6920, "Approve Tool Result");
67
67
  }
68
68
  additionalPrimaryActions() {
69
69
  const actions = super.additionalPrimaryActions();
@@ -99,7 +99,7 @@ let ChatToolPostExecuteConfirmationPart = class ChatToolPostExecuteConfirmationP
99
99
  createResultsDisplay(toolInvocation, contentForModel) {
100
100
  const container = $(".tool-postconfirm-display");
101
101
  if (!contentForModel || contentForModel.length === 0) {
102
- container.textContent = ( localize(6714, "No results to display"));
102
+ container.textContent = ( localize(6921, "No results to display"));
103
103
  return container;
104
104
  }
105
105
  const parts = [];
@@ -214,7 +214,7 @@ let ChatToolPostExecuteConfirmationPart = class ChatToolPostExecuteConfirmationP
214
214
  outputSubPart.domNode.classList.add("tool-postconfirm-display");
215
215
  return outputSubPart.domNode;
216
216
  }
217
- container.textContent = ( localize(6715, "No displayable results"));
217
+ container.textContent = ( localize(6922, "No displayable results"));
218
218
  return container;
219
219
  }
220
220
  };
@@ -12,6 +12,7 @@ import { IChatToolInvocation, ToolConfirmKind } from '@codingame/monaco-vscode-a
12
12
  import { AccessibilityWorkbenchSettingId } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/accessibility/browser/accessibilityConfiguration';
13
13
  import { ChatProgressContentPart } from '../chatProgressContentPart.js';
14
14
  import { BaseChatToolInvocationSubPart } from './chatToolInvocationSubPart.js';
15
+ import { shouldShimmerForTool } from './chatToolPartUtilities.js';
15
16
  import { autorun } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/reactions/autorun';
16
17
 
17
18
  let ChatToolProgressSubPart = class ChatToolProgressSubPart extends BaseChatToolInvocationSubPart {
@@ -31,16 +32,6 @@ let ChatToolProgressSubPart = class ChatToolProgressSubPart extends BaseChatTool
31
32
  this.configurationService = configurationService;
32
33
  this.codeblocks = [];
33
34
  this.domNode = this.createProgressPart();
34
- const updateCheckmarks = () => this.domNode.classList.toggle(
35
- "show-checkmarks",
36
- !!this.configurationService.getValue(AccessibilityWorkbenchSettingId.ShowChatCheckmarks)
37
- );
38
- updateCheckmarks();
39
- this._register(this.configurationService.onDidChangeConfiguration(e => {
40
- if (e.affectsConfiguration(AccessibilityWorkbenchSettingId.ShowChatCheckmarks)) {
41
- updateCheckmarks();
42
- }
43
- }));
44
35
  }
45
36
  createProgressPart() {
46
37
  const isComplete = IChatToolInvocation.isComplete(this.toolInvocation);
@@ -98,7 +89,6 @@ let ChatToolProgressSubPart = class ChatToolProgressSubPart extends BaseChatTool
98
89
  if (shouldAnnounce) {
99
90
  this.provideScreenReaderStatus(content);
100
91
  }
101
- const isAskQuestionsTool = this.toolInvocation.toolId === "copilot_askQuestions" || this.toolInvocation.toolId === "vscode_askQuestions";
102
92
  return this.instantiationService.createInstance(
103
93
  ChatProgressContentPart,
104
94
  progressMessage,
@@ -108,7 +98,7 @@ let ChatToolProgressSubPart = class ChatToolProgressSubPart extends BaseChatTool
108
98
  true,
109
99
  this.getIcon(),
110
100
  this.toolInvocation,
111
- isAskQuestionsTool ? undefined : false
101
+ shouldShimmerForTool(this.toolInvocation)
112
102
  );
113
103
  }
114
104
  getAnnouncementKey(kind) {
@@ -180,7 +180,7 @@ let ChatDragAndDrop = class ChatDragAndDrop extends Themable {
180
180
  } else if (containsDragType(e, CodeDataTransfers.SCM_HISTORY_ITEM)) {
181
181
  return ChatDragAndDropType.SCM_HISTORY_ITEM;
182
182
  } else if (containsImageDragType(e)) {
183
- return ( this.extensionService.extensions.some(ext => isProposedApiEnabled(ext, "chatReferenceBinaryData"))) ? ChatDragAndDropType.IMAGE : undefined;
183
+ return ( this.extensionService.extensions.some(ext => isProposedApiEnabled(ext))) ? ChatDragAndDropType.IMAGE : undefined;
184
184
  } else if (containsDragType(e, "text/html")) {
185
185
  return ChatDragAndDropType.HTML;
186
186
  } else if (containsDragType(e, CodeDataTransfers.SYMBOLS)) {
@@ -209,23 +209,23 @@ let ChatDragAndDrop = class ChatDragAndDrop extends Themable {
209
209
  getDropTypeName(type) {
210
210
  switch (type) {
211
211
  case ChatDragAndDropType.FILE_INTERNAL:
212
- return localize(6716, "File");
212
+ return localize(6923, "File");
213
213
  case ChatDragAndDropType.FILE_EXTERNAL:
214
- return localize(6716, "File");
214
+ return localize(6923, "File");
215
215
  case ChatDragAndDropType.FOLDER:
216
- return localize(6717, "Folder");
216
+ return localize(6924, "Folder");
217
217
  case ChatDragAndDropType.IMAGE:
218
- return localize(6718, "Image");
218
+ return localize(6925, "Image");
219
219
  case ChatDragAndDropType.SYMBOL:
220
- return localize(6719, "Symbol");
220
+ return localize(6926, "Symbol");
221
221
  case ChatDragAndDropType.MARKER:
222
- return localize(6720, "Problem");
222
+ return localize(6927, "Problem");
223
223
  case ChatDragAndDropType.HTML:
224
- return localize(6721, "URL");
224
+ return localize(6928, "URL");
225
225
  case ChatDragAndDropType.NOTEBOOK_CELL_OUTPUT:
226
- return localize(6722, "Output");
226
+ return localize(6929, "Output");
227
227
  case ChatDragAndDropType.SCM_HISTORY_ITEM:
228
- return localize(6723, "Change");
228
+ return localize(6930, "Change");
229
229
  }
230
230
  }
231
231
  async resolveAttachmentsFromDragEvent(e) {
@@ -297,7 +297,7 @@ let ChatDragAndDrop = class ChatDragAndDrop extends Themable {
297
297
  async resolveHTMLAttachContext(e) {
298
298
  const existingAttachmentNames = ( new Set(( this.attachmentModel.attachments.map(attachment => attachment.name))));
299
299
  const createDisplayName = () => {
300
- const baseName = ( localize(6724, "Image from URL"));
300
+ const baseName = ( localize(6931, "Image from URL"));
301
301
  let uniqueName = baseName;
302
302
  let baseNameInstance = 1;
303
303
  while (( existingAttachmentNames.has(uniqueName))) {
@@ -375,7 +375,7 @@ let ChatDragAndDrop = class ChatDragAndDrop extends Themable {
375
375
  }
376
376
  getOverlayText(type) {
377
377
  const typeName = this.getDropTypeName(type);
378
- return localize(6725, "Attach {0} as Context", typeName);
378
+ return localize(6932, "Attach {0} as Context", typeName);
379
379
  }
380
380
  updateOverlayStyles(overlay) {
381
381
  overlay.style.backgroundColor = this.getColor(this.styles.overlayBackground) || "";