@codingame/monaco-vscode-api 6.0.2 → 7.0.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 (450) hide show
  1. package/README.md +93 -73
  2. package/api.js +1 -1
  3. package/debugProtocol.d.ts +10 -1
  4. package/extensions.d.ts +2 -0
  5. package/missing-services.js +21 -2
  6. package/monaco.d.ts +1 -1
  7. package/monaco.js +1 -1
  8. package/package.json +9 -9
  9. package/service-override/extensions.d.ts +1 -2
  10. package/services.js +4 -2
  11. package/vscode/src/vs/base/browser/dnd.js +1 -1
  12. package/vscode/src/vs/base/browser/dom.js +116 -5
  13. package/vscode/src/vs/base/browser/domObservable.js +16 -0
  14. package/vscode/src/vs/base/browser/markdownRenderer.js +5 -3
  15. package/vscode/src/vs/base/browser/trustedTypes.js +1 -2
  16. package/vscode/src/vs/base/browser/ui/actionbar/actionViewItems.js +1 -1
  17. package/vscode/src/vs/base/browser/ui/actionbar/actionbar.js +1 -1
  18. package/vscode/src/vs/base/browser/ui/button/button.js +2 -2
  19. package/vscode/src/vs/base/browser/ui/contextview/contextview.js +1 -4
  20. package/vscode/src/vs/base/browser/ui/dropdown/dropdown.js +1 -1
  21. package/vscode/src/vs/base/browser/ui/dropdown/dropdownActionViewItem.js +1 -1
  22. package/vscode/src/vs/base/browser/ui/highlightedlabel/highlightedLabel.js +1 -1
  23. package/vscode/src/vs/base/browser/ui/hover/hover.d.ts +32 -16
  24. package/vscode/src/vs/base/browser/ui/hover/hoverDelegate.d.ts +2 -2
  25. package/vscode/src/vs/base/browser/ui/hover/hoverDelegate2.js +2 -2
  26. package/vscode/src/vs/base/browser/ui/hover/hoverWidget.css.js +1 -1
  27. package/vscode/src/vs/base/browser/ui/hover/hoverWidget.js +2 -0
  28. package/vscode/src/vs/base/browser/ui/iconLabel/iconLabel.js +1 -1
  29. package/vscode/src/vs/base/browser/ui/iconLabel/simpleIconLabel.js +1 -1
  30. package/vscode/src/vs/base/browser/ui/inputbox/inputBox.js +1 -1
  31. package/vscode/src/vs/base/browser/ui/keybindingLabel/keybindingLabel.js +1 -1
  32. package/vscode/src/vs/base/browser/ui/list/listView.js +3 -5
  33. package/vscode/src/vs/base/browser/ui/list/rowCache.js +1 -8
  34. package/vscode/src/vs/base/browser/ui/sash/sash.js +1 -1
  35. package/vscode/src/vs/base/browser/ui/selectBox/selectBoxCustom.js +7 -11
  36. package/vscode/src/vs/base/browser/ui/splitview/paneview.js +1 -1
  37. package/vscode/src/vs/base/browser/ui/splitview/splitview.js +1 -1
  38. package/vscode/src/vs/base/browser/ui/table/tableWidget.js +1 -1
  39. package/vscode/src/vs/base/browser/ui/toggle/toggle.js +1 -1
  40. package/vscode/src/vs/base/browser/ui/toolbar/toolbar.d.ts +8 -1
  41. package/vscode/src/vs/base/browser/ui/toolbar/toolbar.js +2 -3
  42. package/vscode/src/vs/base/browser/ui/tree/abstractTree.js +1 -1
  43. package/vscode/src/vs/base/browser/ui/tree/asyncDataTree.js +0 -3
  44. package/vscode/src/vs/base/common/assert.js +1 -1
  45. package/vscode/src/vs/base/common/collections.js +49 -1
  46. package/vscode/src/vs/base/common/equals.js +55 -5
  47. package/vscode/src/vs/base/common/errors.js +14 -1
  48. package/vscode/src/vs/base/common/event.js +2 -1
  49. package/vscode/src/vs/base/common/history.js +7 -4
  50. package/vscode/src/vs/base/common/iterator.js +9 -1
  51. package/vscode/src/vs/base/common/map.d.ts +41 -0
  52. package/vscode/src/vs/base/common/numbers.js +18 -1
  53. package/vscode/src/vs/base/common/observableInternal/api.js +11 -0
  54. package/vscode/src/vs/base/common/observableInternal/autorun.js +18 -1
  55. package/vscode/src/vs/base/common/observableInternal/base.d.ts +8 -1
  56. package/vscode/src/vs/base/common/observableInternal/base.js +2 -5
  57. package/vscode/src/vs/base/common/observableInternal/derived.js +13 -3
  58. package/vscode/src/vs/base/common/observableInternal/lazyObservableValue.js +109 -0
  59. package/vscode/src/vs/base/common/observableInternal/promise.js +3 -0
  60. package/vscode/src/vs/base/common/observableInternal/utils.d.ts +7 -0
  61. package/vscode/src/vs/base/common/observableInternal/utils.js +64 -12
  62. package/vscode/src/vs/base/common/prefixTree.d.ts +52 -0
  63. package/vscode/src/vs/base/common/product.d.ts +1 -0
  64. package/vscode/src/vs/base/parts/ipc/common/ipc.js +1 -1
  65. package/vscode/src/vs/editor/browser/config/charWidthReader.js +1 -1
  66. package/vscode/src/vs/editor/browser/controller/textAreaHandler.js +1 -1
  67. package/vscode/src/vs/editor/browser/coreCommands.js +2 -1
  68. package/vscode/src/vs/editor/browser/observableCodeEditor.js +230 -0
  69. package/vscode/src/vs/editor/browser/services/abstractCodeEditorService.js +1 -1
  70. package/vscode/src/vs/editor/browser/services/hoverService/hoverService.js +26 -26
  71. package/vscode/src/vs/editor/browser/services/hoverService/updatableHoverWidget.js +2 -2
  72. package/vscode/src/vs/editor/browser/view/domLineBreaksComputer.js +1 -1
  73. package/vscode/src/vs/editor/browser/view/viewLayer.js +4 -12
  74. package/vscode/src/vs/editor/browser/viewParts/contentWidgets/contentWidgets.js +1 -1
  75. package/vscode/src/vs/editor/browser/viewParts/glyphMargin/glyphMargin.js +1 -1
  76. package/vscode/src/vs/editor/browser/viewParts/viewZones/viewZones.js +2 -2
  77. package/vscode/src/vs/editor/browser/widget/codeEditor/codeEditorWidget.js +15 -4
  78. package/vscode/src/vs/editor/browser/widget/diffEditor/components/diffEditorEditors.js +8 -8
  79. package/vscode/src/vs/editor/browser/widget/diffEditor/components/diffEditorViewZones/diffEditorViewZones.js +4 -4
  80. package/vscode/src/vs/editor/browser/widget/diffEditor/diffEditorOptions.js +1 -1
  81. package/vscode/src/vs/editor/browser/widget/diffEditor/diffEditorViewModel.js +1 -1
  82. package/vscode/src/vs/editor/browser/widget/diffEditor/diffEditorWidget.js +14 -2
  83. package/vscode/src/vs/editor/browser/widget/diffEditor/features/gutterFeature.js +1 -1
  84. package/vscode/src/vs/editor/browser/widget/diffEditor/features/movedBlocksLinesFeature.js +2 -2
  85. package/vscode/src/vs/editor/browser/widget/diffEditor/registrations.contribution.js +2 -2
  86. package/vscode/src/vs/editor/browser/widget/diffEditor/utils/editorGutter.js +3 -3
  87. package/vscode/src/vs/editor/browser/widget/diffEditor/utils.js +2 -2
  88. package/vscode/src/vs/editor/browser/widget/multiDiffEditor/colors.js +1 -1
  89. package/vscode/src/vs/editor/browser/widget/multiDiffEditor/multiDiffEditorWidgetImpl.js +2 -2
  90. package/vscode/src/vs/editor/common/config/editorOptions.d.ts +5 -0
  91. package/vscode/src/vs/editor/common/config/editorOptions.js +83 -65
  92. package/vscode/src/vs/editor/common/core/editorColorRegistry.js +43 -43
  93. package/vscode/src/vs/editor/common/cursor/cursor.js +3 -2
  94. package/vscode/src/vs/editor/common/cursor/cursorTypeEditOperations.js +911 -0
  95. package/vscode/src/vs/editor/common/cursor/cursorTypeOperations.js +36 -799
  96. package/vscode/src/vs/editor/common/cursor/cursorWordOperations.js +6 -5
  97. package/vscode/src/vs/editor/common/languageFeatureRegistry.d.ts +1 -0
  98. package/vscode/src/vs/editor/common/languageFeatureRegistry.js +3 -0
  99. package/vscode/src/vs/editor/common/languages/autoIndent.js +23 -1
  100. package/vscode/src/vs/editor/common/languages.d.ts +20 -3
  101. package/vscode/src/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsImpl.js +6 -6
  102. package/vscode/src/vs/editor/common/model/pieceTreeTextBuffer/pieceTreeBase.js +19 -0
  103. package/vscode/src/vs/editor/common/model/pieceTreeTextBuffer/pieceTreeTextBuffer.js +3 -0
  104. package/vscode/src/vs/editor/common/model/textModel.js +6 -2
  105. package/vscode/src/vs/editor/common/model/tokenizationTextModelPart.js +5 -5
  106. package/vscode/src/vs/editor/common/model.d.ts +4 -0
  107. package/vscode/src/vs/editor/common/services/getIconClasses.js +1 -1
  108. package/vscode/src/vs/editor/common/services/semanticTokensProviderStyling.js +2 -15
  109. package/vscode/src/vs/editor/common/standalone/standaloneEnums.js +63 -62
  110. package/vscode/src/vs/editor/common/viewModel/viewModelImpl.js +11 -8
  111. package/vscode/src/vs/editor/contrib/bracketMatching/browser/bracketMatching.js +1 -1
  112. package/vscode/src/vs/editor/contrib/codeAction/browser/codeActionController.js +2 -17
  113. package/vscode/src/vs/editor/contrib/codeAction/browser/lightBulbWidget.css.js +1 -1
  114. package/vscode/src/vs/editor/contrib/codeAction/browser/lightBulbWidget.js +18 -5
  115. package/vscode/src/vs/editor/contrib/colorPicker/browser/colorHoverParticipant.js +55 -27
  116. package/vscode/src/vs/editor/contrib/colorPicker/browser/colorPickerWidget.js +7 -4
  117. package/vscode/src/vs/editor/contrib/colorPicker/browser/standaloneColorPickerWidget.js +9 -9
  118. package/vscode/src/vs/editor/contrib/contextmenu/browser/contextmenu.js +1 -1
  119. package/vscode/src/vs/editor/contrib/dropOrPasteInto/browser/copyPasteController.js +103 -47
  120. package/vscode/src/vs/editor/contrib/dropOrPasteInto/browser/defaultProviders.js +8 -2
  121. package/vscode/src/vs/editor/contrib/dropOrPasteInto/browser/dropIntoEditorController.js +18 -10
  122. package/vscode/src/vs/editor/contrib/find/browser/findWidget.js +2 -4
  123. package/vscode/src/vs/editor/contrib/folding/browser/folding.css.js +1 -1
  124. package/vscode/src/vs/editor/contrib/folding/browser/folding.js +33 -13
  125. package/vscode/src/vs/editor/contrib/folding/browser/foldingDecorations.js +12 -7
  126. package/vscode/src/vs/editor/contrib/gotoError/browser/gotoErrorWidget.js +1 -1
  127. package/vscode/src/vs/editor/contrib/gotoSymbol/browser/peek/referencesWidget.js +2 -2
  128. package/vscode/src/vs/editor/contrib/hover/browser/contentHoverController.js +161 -185
  129. package/vscode/src/vs/editor/contrib/hover/browser/contentHoverRendered.js +321 -0
  130. package/vscode/src/vs/editor/contrib/hover/browser/contentHoverStatusBar.js +4 -1
  131. package/vscode/src/vs/editor/contrib/hover/browser/contentHoverTypes.js +6 -21
  132. package/vscode/src/vs/editor/contrib/hover/browser/contentHoverWidget.js +39 -40
  133. package/vscode/src/vs/editor/contrib/hover/browser/hoverAccessibleViews.js +55 -46
  134. package/vscode/src/vs/editor/contrib/hover/browser/hoverActions.js +12 -2
  135. package/vscode/src/vs/editor/contrib/hover/browser/hoverController.js +15 -9
  136. package/vscode/src/vs/editor/contrib/hover/browser/hoverTypes.js +11 -1
  137. package/vscode/src/vs/editor/contrib/hover/browser/markdownHoverParticipant.js +141 -93
  138. package/vscode/src/vs/editor/contrib/hover/browser/markerHoverParticipant.js +24 -7
  139. package/vscode/src/vs/editor/contrib/indentation/browser/indentation.js +36 -1
  140. package/vscode/src/vs/editor/contrib/inlayHints/browser/inlayHintsHover.js +5 -3
  141. package/vscode/src/vs/editor/contrib/inlineCompletions/browser/ghostTextWidget.js +1 -1
  142. package/vscode/src/vs/editor/contrib/inlineCompletions/browser/hoverParticipant.js +25 -12
  143. package/vscode/src/vs/editor/contrib/inlineCompletions/browser/inlineCompletionsController.js +88 -118
  144. package/vscode/src/vs/editor/contrib/inlineCompletions/browser/inlineCompletionsHintsWidget.js +1 -1
  145. package/vscode/src/vs/editor/contrib/inlineCompletions/browser/inlineCompletionsModel.js +34 -33
  146. package/vscode/src/vs/editor/contrib/inlineCompletions/browser/inlineCompletionsSource.js +2 -2
  147. package/vscode/src/vs/editor/contrib/inlineCompletions/browser/provideInlineCompletions.js +11 -4
  148. package/vscode/src/vs/editor/contrib/inlineCompletions/browser/suggestWidgetInlineCompletionProvider.js +10 -19
  149. package/vscode/src/vs/editor/contrib/inlineEdit/browser/ghostTextWidget.js +1 -1
  150. package/vscode/src/vs/editor/contrib/inlineEdit/browser/hoverParticipant.js +45 -27
  151. package/vscode/src/vs/editor/contrib/inlineEdit/browser/inlineEditController.js +4 -4
  152. package/vscode/src/vs/editor/contrib/inlineEdit/browser/inlineEditHintsWidget.js +1 -1
  153. package/vscode/src/vs/editor/contrib/inlineEdits/browser/commands.js +126 -0
  154. package/vscode/src/vs/editor/contrib/inlineEdits/browser/consts.js +9 -0
  155. package/vscode/src/vs/editor/contrib/inlineEdits/browser/inlineEdits.contribution.js +9 -0
  156. package/vscode/src/vs/editor/contrib/inlineEdits/browser/inlineEditsController.js +82 -0
  157. package/vscode/src/vs/editor/contrib/inlineEdits/browser/inlineEditsModel.js +240 -0
  158. package/vscode/src/vs/editor/contrib/inlineEdits/browser/inlineEditsWidget.css.js +4 -0
  159. package/vscode/src/vs/editor/contrib/inlineEdits/browser/inlineEditsWidget.js +322 -0
  160. package/vscode/src/vs/editor/contrib/inlineProgress/browser/inlineProgress.js +8 -4
  161. package/vscode/src/vs/editor/contrib/linesOperations/browser/linesOperations.js +3 -2
  162. package/vscode/src/vs/editor/contrib/parameterHints/browser/parameterHintsWidget.js +1 -1
  163. package/vscode/src/vs/editor/contrib/peekView/browser/peekView.js +2 -2
  164. package/vscode/src/vs/editor/contrib/placeholderText/browser/placeholderText.contribution.js +60 -0
  165. package/vscode/src/vs/editor/contrib/placeholderText/browser/placeholderText.css.js +4 -0
  166. package/vscode/src/vs/editor/contrib/rename/browser/renameWidget.js +1 -1
  167. package/vscode/src/vs/editor/contrib/stickyScroll/browser/stickyScroll.css.js +1 -1
  168. package/vscode/src/vs/editor/contrib/stickyScroll/browser/stickyScrollController.js +38 -20
  169. package/vscode/src/vs/editor/contrib/stickyScroll/browser/stickyScrollWidget.js +3 -0
  170. package/vscode/src/vs/editor/contrib/suggest/browser/suggestWidget.js +9 -9
  171. package/vscode/src/vs/editor/contrib/suggest/browser/suggestWidgetStatus.js +10 -32
  172. package/vscode/src/vs/editor/contrib/symbolIcons/browser/symbolIcons.js +23 -138
  173. package/vscode/src/vs/editor/contrib/unicodeHighlighter/browser/unicodeHighlighter.js +3 -0
  174. package/vscode/src/vs/editor/contrib/wordHighlighter/browser/highlightDecorations.js +5 -5
  175. package/vscode/src/vs/editor/contrib/wordOperations/browser/wordOperations.js +13 -12
  176. package/vscode/src/vs/editor/contrib/wordPartOperations/browser/wordPartOperations.js +3 -3
  177. package/vscode/src/vs/editor/editor.api.d.ts +31 -5
  178. package/vscode/src/vs/platform/accessibility/browser/accessibilityService.js +21 -0
  179. package/vscode/src/vs/platform/accessibilitySignal/browser/accessibilitySignalService.js +5 -6
  180. package/vscode/src/vs/platform/actionWidget/browser/actionWidget.js +1 -1
  181. package/vscode/src/vs/platform/actions/browser/buttonbar.js +27 -6
  182. package/vscode/src/vs/platform/actions/browser/floatingMenu.js +1 -1
  183. package/vscode/src/vs/platform/actions/browser/menuEntryActionViewItem.css.js +1 -1
  184. package/vscode/src/vs/platform/actions/browser/menuEntryActionViewItem.js +33 -3
  185. package/vscode/src/vs/platform/actions/browser/toolbar.js +2 -1
  186. package/vscode/src/vs/platform/actions/common/actions.d.ts +3 -0
  187. package/vscode/src/vs/platform/actions/common/actions.js +3 -0
  188. package/vscode/src/vs/platform/actions/common/menuService.js +3 -2
  189. package/vscode/src/vs/platform/clipboard/browser/clipboardService.js +1 -1
  190. package/vscode/src/vs/platform/configuration/common/configurationRegistry.d.ts +7 -5
  191. package/vscode/src/vs/platform/configuration/common/configurationRegistry.js +109 -13
  192. package/vscode/src/vs/platform/diagnostics/common/diagnostics.d.ts +2 -0
  193. package/vscode/src/vs/platform/extensionManagement/common/extensionManagement.d.ts +12 -6
  194. package/vscode/src/vs/platform/extensionManagement/common/extensionManagement.js +2 -0
  195. package/vscode/src/vs/platform/extensionManagement/common/extensionManagement.service.d.ts +3 -3
  196. package/vscode/src/vs/platform/extensionManagement/common/extensionsScannerService.js +20 -10
  197. package/vscode/src/vs/platform/extensions/common/extensionValidator.js +46 -8
  198. package/vscode/src/vs/platform/extensions/common/extensions.d.ts +1 -1
  199. package/vscode/src/vs/platform/extensions/common/extensions.js +12 -3
  200. package/vscode/src/vs/platform/extensions/common/extensionsApiProposals.js +368 -0
  201. package/vscode/src/vs/platform/files/common/watcher.js +21 -24
  202. package/vscode/src/vs/platform/list/browser/listService.js +2 -1
  203. package/vscode/src/vs/platform/observable/common/platformObservableUtils.js +2 -2
  204. package/vscode/src/vs/platform/opener/browser/link.js +1 -1
  205. package/vscode/src/vs/platform/product/common/product.js +1 -1
  206. package/vscode/src/vs/platform/quickinput/browser/quickInputTree.js +1 -1
  207. package/vscode/src/vs/platform/remote/common/remoteExtensionsScanner.service.d.ts +0 -2
  208. package/vscode/src/vs/platform/request/common/request.js +18 -8
  209. package/vscode/src/vs/platform/terminal/common/capabilities/capabilities.d.ts +2 -6
  210. package/vscode/src/vs/platform/terminal/common/capabilities/commandDetection/promptInputModel.d.ts +8 -1
  211. package/vscode/src/vs/platform/theme/common/colorUtils.d.ts +1 -1
  212. package/vscode/src/vs/platform/theme/common/colorUtils.js +25 -5
  213. package/vscode/src/vs/platform/theme/common/colors/baseColors.js +1 -1
  214. package/vscode/src/vs/platform/theme/common/colors/chartsColors.js +6 -6
  215. package/vscode/src/vs/platform/theme/common/colors/editorColors.js +35 -35
  216. package/vscode/src/vs/platform/theme/common/colors/inputColors.js +9 -9
  217. package/vscode/src/vs/platform/theme/common/colors/listColors.js +11 -11
  218. package/vscode/src/vs/platform/theme/common/colors/menuColors.js +4 -4
  219. package/vscode/src/vs/platform/theme/common/colors/minimapColors.js +5 -5
  220. package/vscode/src/vs/platform/theme/common/colors/miscColors.js +1 -1
  221. package/vscode/src/vs/platform/theme/common/colors/quickpickColors.js +5 -5
  222. package/vscode/src/vs/platform/tunnel/common/tunnel.js +4 -1
  223. package/vscode/src/vs/platform/userDataProfile/common/userDataProfile.js +75 -19
  224. package/vscode/src/vs/platform/window/common/window.d.ts +2 -2
  225. package/vscode/src/vs/workbench/api/common/extHost.api.impl.js +32 -25
  226. package/vscode/src/vs/workbench/api/common/extHost.common.services.js +2 -0
  227. package/vscode/src/vs/workbench/api/common/extHost.protocol.js +2 -0
  228. package/vscode/src/vs/workbench/api/common/extHostAuthentication.js +5 -11
  229. package/vscode/src/vs/workbench/api/common/extHostChatAgents2.js +5 -15
  230. package/vscode/src/vs/workbench/api/common/extHostChatVariables.js +2 -5
  231. package/vscode/src/vs/workbench/api/common/extHostComments.js +9 -3
  232. package/vscode/src/vs/workbench/api/common/extHostDebugService.js +32 -22
  233. package/vscode/src/vs/workbench/api/common/extHostExtensionService.js +3 -3
  234. package/vscode/src/vs/workbench/api/common/extHostLanguageFeatures.js +109 -40
  235. package/vscode/src/vs/workbench/api/common/extHostLanguageModelTools.js +46 -0
  236. package/vscode/src/vs/workbench/api/common/extHostLanguageModels.js +84 -35
  237. package/vscode/src/vs/workbench/api/common/extHostNotebook.js +2 -2
  238. package/vscode/src/vs/workbench/api/common/extHostSCM.js +50 -41
  239. package/vscode/src/vs/workbench/api/common/extHostSearch.js +2 -2
  240. package/vscode/src/vs/workbench/api/common/extHostSecrets.js +11 -8
  241. package/vscode/src/vs/workbench/api/common/extHostTerminalService.js +7 -6
  242. package/vscode/src/vs/workbench/api/common/extHostTesting.js +63 -70
  243. package/vscode/src/vs/workbench/api/common/extHostTextEditors.js +5 -3
  244. package/vscode/src/vs/workbench/api/common/extHostTypeConverters.js +75 -16
  245. package/vscode/src/vs/workbench/api/common/extHostTypes.js +29 -4
  246. package/vscode/src/vs/workbench/api/common/extHostWorkspace.js +1 -1
  247. package/vscode/src/vs/workbench/browser/actions/developerActions.js +1 -1
  248. package/vscode/src/vs/workbench/browser/parts/editor/editorActions.js +127 -107
  249. package/vscode/src/vs/workbench/browser/parts/editor/editorCommands.js +2 -2
  250. package/vscode/src/vs/workbench/browser/parts/editor/editorPanes.js +1 -1
  251. package/vscode/src/vs/workbench/browser/parts/editor/editorStatus.js +33 -21
  252. package/vscode/src/vs/workbench/browser/parts/editor/sideBySideEditor.js +1 -1
  253. package/vscode/src/vs/workbench/browser/parts/globalCompositeBar.js +5 -5
  254. package/vscode/src/vs/workbench/browser/parts/notifications/notificationsToasts.js +1 -1
  255. package/vscode/src/vs/workbench/browser/parts/notifications/notificationsViewer.js +2 -2
  256. package/vscode/src/vs/workbench/browser/parts/views/checkbox.js +2 -2
  257. package/vscode/src/vs/workbench/browser/parts/views/treeView.js +23 -6
  258. package/vscode/src/vs/workbench/browser/parts/views/viewFilter.js +3 -1
  259. package/vscode/src/vs/workbench/browser/parts/views/viewPane.js +3 -3
  260. package/vscode/src/vs/workbench/browser/parts/views/viewPaneContainer.js +1 -1
  261. package/vscode/src/vs/workbench/browser/web.api.js +8 -0
  262. package/vscode/src/vs/workbench/browser/workbench.contribution.js +199 -194
  263. package/vscode/src/vs/workbench/common/configuration.js +1 -1
  264. package/vscode/src/vs/workbench/common/contributions.js +8 -1
  265. package/vscode/src/vs/workbench/common/editor.js +5 -1
  266. package/vscode/src/vs/workbench/common/theme.js +79 -454
  267. package/vscode/src/vs/workbench/contrib/accessibility/browser/accessibilityConfiguration.js +221 -239
  268. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatActions.js +17 -15
  269. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatExecuteActions.js +1 -0
  270. package/vscode/src/vs/workbench/contrib/chat/browser/chatAgentHover.js +4 -0
  271. package/vscode/src/vs/workbench/contrib/chat/browser/chatContentParts/chatCollections.js +27 -0
  272. package/vscode/src/vs/workbench/contrib/chat/browser/chatContentParts/chatCommandContentPart.js +35 -0
  273. package/vscode/src/vs/workbench/contrib/chat/browser/chatContentParts/chatConfirmationContentPart.js +51 -0
  274. package/vscode/src/vs/workbench/contrib/chat/browser/{chatConfirmationWidget.js → chatContentParts/chatConfirmationWidget.js} +9 -9
  275. package/vscode/src/vs/workbench/contrib/chat/browser/chatContentParts/chatMarkdownContentPart.js +131 -0
  276. package/vscode/src/vs/workbench/contrib/chat/browser/chatContentParts/chatProgressContentPart.js +37 -0
  277. package/vscode/src/vs/workbench/contrib/chat/browser/chatContentParts/chatReferencesContentPart.js +263 -0
  278. package/vscode/src/vs/workbench/contrib/chat/browser/chatContentParts/chatTaskContentPart.js +37 -0
  279. package/vscode/src/vs/workbench/contrib/chat/browser/chatContentParts/chatTextEditContentPart.js +160 -0
  280. package/vscode/src/vs/workbench/contrib/chat/browser/chatContentParts/chatTreeContentPart.js +171 -0
  281. package/vscode/src/vs/workbench/contrib/chat/browser/chatContentParts/chatWarningContentPart.js +34 -0
  282. package/vscode/src/vs/workbench/contrib/chat/browser/{media → chatContentParts/media}/chatConfirmationWidget.css.js +1 -1
  283. package/vscode/src/vs/workbench/contrib/chat/browser/chatInputPart.js +91 -44
  284. package/vscode/src/vs/workbench/contrib/chat/browser/chatListRenderer.js +292 -1019
  285. package/vscode/src/vs/workbench/contrib/chat/browser/chatMarkdownDecorationsRenderer.js +2 -2
  286. package/vscode/src/vs/workbench/contrib/chat/browser/chatMarkdownRenderer.js +1 -1
  287. package/vscode/src/vs/workbench/contrib/chat/browser/chatWidget.js +22 -7
  288. package/vscode/src/vs/workbench/contrib/chat/browser/codeBlockPart.css.js +1 -1
  289. package/vscode/src/vs/workbench/contrib/chat/browser/codeBlockPart.js +61 -54
  290. package/vscode/src/vs/workbench/contrib/chat/browser/contrib/chatDynamicVariables.js +23 -16
  291. package/vscode/src/vs/workbench/contrib/chat/browser/media/chat.css.js +1 -1
  292. package/vscode/src/vs/workbench/contrib/chat/browser/media/chatAgentHover.css.js +1 -1
  293. package/vscode/src/vs/workbench/contrib/chat/common/chatAgents.js +8 -0
  294. package/vscode/src/vs/workbench/contrib/chat/common/chatColors.js +1 -1
  295. package/vscode/src/vs/workbench/contrib/chat/common/chatModel.js +3 -3
  296. package/vscode/src/vs/workbench/contrib/chat/common/chatWordCounter.js +5 -4
  297. package/vscode/src/vs/workbench/contrib/chat/common/codeBlockModelCollection.js +16 -0
  298. package/vscode/src/vs/workbench/contrib/chat/common/languageModelToolsService.service.js +3 -0
  299. package/vscode/src/vs/workbench/contrib/chat/common/languageModels.js +2 -2
  300. package/vscode/src/vs/workbench/contrib/codeActions/browser/codeActionsContribution.js +43 -16
  301. package/vscode/src/vs/workbench/contrib/codeEditor/browser/diffEditorHelper.js +1 -1
  302. package/vscode/src/vs/workbench/contrib/codeEditor/browser/find/simpleFindWidget.js +1 -3
  303. package/vscode/src/vs/workbench/contrib/codeEditor/browser/suggestEnabledInput/suggestEnabledInput.js +1 -1
  304. package/vscode/src/vs/workbench/contrib/codeEditor/browser/toggleMultiCursorModifier.js +7 -5
  305. package/vscode/src/vs/workbench/contrib/codeEditor/browser/toggleWordWrap.js +7 -7
  306. package/vscode/src/vs/workbench/contrib/comments/browser/commentColors.js +3 -3
  307. package/vscode/src/vs/workbench/contrib/comments/browser/commentGlyphWidget.js +3 -3
  308. package/vscode/src/vs/workbench/contrib/comments/browser/commentReply.js +2 -2
  309. package/vscode/src/vs/workbench/contrib/comments/browser/commentThreadBody.js +1 -1
  310. package/vscode/src/vs/workbench/contrib/comments/browser/commentThreadHeader.js +2 -1
  311. package/vscode/src/vs/workbench/contrib/comments/browser/commentThreadWidget.js +2 -1
  312. package/vscode/src/vs/workbench/contrib/comments/browser/commentThreadZoneWidget.js +1 -1
  313. package/vscode/src/vs/workbench/contrib/comments/browser/commentsController.js +8 -5
  314. package/vscode/src/vs/workbench/contrib/comments/browser/commentsTreeViewer.js +1 -1
  315. package/vscode/src/vs/workbench/contrib/comments/browser/media/panel.css.js +1 -1
  316. package/vscode/src/vs/workbench/contrib/comments/browser/media/review.css.js +1 -1
  317. package/vscode/src/vs/workbench/contrib/comments/browser/timestamp.js +1 -1
  318. package/vscode/src/vs/workbench/contrib/contextmenu/browser/contextmenu.contribution.js +5 -5
  319. package/vscode/src/vs/workbench/contrib/debug/browser/baseDebugView.js +14 -7
  320. package/vscode/src/vs/workbench/contrib/debug/browser/breakpointEditorContribution.js +4 -4
  321. package/vscode/src/vs/workbench/contrib/debug/browser/breakpointWidget.js +8 -7
  322. package/vscode/src/vs/workbench/contrib/debug/browser/breakpointsView.js +19 -16
  323. package/vscode/src/vs/workbench/contrib/debug/browser/debugColors.js +13 -12
  324. package/vscode/src/vs/workbench/contrib/debug/common/debug.d.ts +19 -2
  325. package/vscode/src/vs/workbench/contrib/debug/common/debug.js +9 -4
  326. package/vscode/src/vs/workbench/contrib/debug/common/debugModel.js +10 -5
  327. package/vscode/src/vs/workbench/contrib/debug/common/replModel.js +4 -4
  328. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsActions.js +235 -173
  329. package/vscode/src/vs/workbench/contrib/extensions/browser/media/extensionActions.css.js +1 -1
  330. package/vscode/src/vs/workbench/contrib/extensions/common/extensions.js +2 -1
  331. package/vscode/src/vs/workbench/contrib/files/browser/fileActions.js +17 -5
  332. package/vscode/src/vs/workbench/contrib/files/browser/files.contribution._configuration.js +62 -44
  333. package/vscode/src/vs/workbench/contrib/files/browser/files.contribution._editorPane.js +2 -2
  334. package/vscode/src/vs/workbench/contrib/files/browser/views/openEditorsView.js +2 -2
  335. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.js +114 -107
  336. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatContentWidget.js +33 -25
  337. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatController.js +71 -101
  338. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSession.js +38 -43
  339. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionServiceImpl.js +11 -33
  340. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatStrategies.js +3 -4
  341. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatWidget.js +49 -86
  342. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatZoneWidget.js +60 -71
  343. package/vscode/src/vs/workbench/contrib/inlineChat/browser/media/inlineChat.css.js +1 -1
  344. package/vscode/src/vs/workbench/contrib/inlineChat/browser/media/inlineChatContentWidget.css.js +1 -1
  345. package/vscode/src/vs/workbench/contrib/inlineChat/common/inlineChat.js +116 -113
  346. package/vscode/src/vs/workbench/contrib/markdown/browser/markdownDocumentRenderer.js +6 -10
  347. package/vscode/src/vs/workbench/contrib/mergeEditor/browser/mergeEditorInputModel.js +2 -2
  348. package/vscode/src/vs/workbench/contrib/multiDiffEditor/browser/multiDiffEditorInput.js +1 -0
  349. package/vscode/src/vs/workbench/contrib/multiDiffEditor/browser/scmMultiDiffSourceResolver.js +2 -2
  350. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/find/findFilters.js +12 -23
  351. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/find/findMatchDecorationModel.js +0 -2
  352. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/find/findModel.js +7 -9
  353. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/find/notebookFindReplaceWidget.js +88 -61
  354. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/find/notebookFindWidget.js +1 -3
  355. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/cellOutputActions.js +39 -3
  356. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebookChatContext.js +2 -1
  357. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebookChatController.js +12 -11
  358. package/vscode/src/vs/workbench/contrib/notebook/browser/media/notebookCellChat.css.js +1 -1
  359. package/vscode/src/vs/workbench/contrib/notebook/browser/notebookAccessibilityProvider.js +1 -1
  360. package/vscode/src/vs/workbench/contrib/notebook/browser/notebookBrowser.js +3 -2
  361. package/vscode/src/vs/workbench/contrib/notebook/browser/notebookEditorWidget.js +40 -105
  362. package/vscode/src/vs/workbench/contrib/notebook/browser/notebookIcons.js +27 -26
  363. package/vscode/src/vs/workbench/contrib/notebook/browser/notebookOptions.js +14 -5
  364. package/vscode/src/vs/workbench/contrib/notebook/browser/view/cellParts/cellActionView.js +1 -1
  365. package/vscode/src/vs/workbench/contrib/notebook/browser/view/cellParts/cellComments.js +43 -46
  366. package/vscode/src/vs/workbench/contrib/notebook/browser/view/cellParts/cellDnd.js +1 -1
  367. package/vscode/src/vs/workbench/contrib/notebook/browser/view/cellParts/cellOutput.js +4 -4
  368. package/vscode/src/vs/workbench/contrib/notebook/browser/view/cellParts/cellStatusPart.js +12 -9
  369. package/vscode/src/vs/workbench/contrib/notebook/browser/view/cellParts/cellToolbars.js +19 -14
  370. package/vscode/src/vs/workbench/contrib/notebook/browser/view/cellParts/codeCell.js +2 -2
  371. package/vscode/src/vs/workbench/contrib/notebook/browser/view/cellParts/codeCellRunToolbar.js +9 -6
  372. package/vscode/src/vs/workbench/contrib/notebook/browser/view/cellParts/markupCell.js +1 -1
  373. package/vscode/src/vs/workbench/contrib/notebook/browser/view/renderers/backLayerWebView.js +5 -3
  374. package/vscode/src/vs/workbench/contrib/notebook/browser/view/renderers/cellRenderer.js +3 -3
  375. package/vscode/src/vs/workbench/contrib/notebook/browser/view/renderers/webviewPreloads.js +1 -1
  376. package/vscode/src/vs/workbench/contrib/notebook/browser/viewModel/baseCellViewModel.js +16 -6
  377. package/vscode/src/vs/workbench/contrib/notebook/browser/viewModel/codeCellViewModel.js +8 -8
  378. package/vscode/src/vs/workbench/contrib/notebook/browser/viewModel/notebookOutlineDataSourceFactory.service.js +3 -0
  379. package/vscode/src/vs/workbench/contrib/notebook/browser/viewModel/notebookViewModelImpl.js +11 -12
  380. package/vscode/src/vs/workbench/contrib/notebook/browser/viewParts/notebookEditorStickyScroll.js +12 -13
  381. package/vscode/src/vs/workbench/contrib/notebook/browser/viewParts/notebookEditorToolbar.js +1 -1
  382. package/vscode/src/vs/workbench/contrib/notebook/browser/viewParts/notebookTopCellToolbar.js +5 -3
  383. package/vscode/src/vs/workbench/contrib/notebook/common/notebookCommon.js +9 -2
  384. package/vscode/src/vs/workbench/contrib/notebook/common/notebookEditorInput.js +37 -36
  385. package/vscode/src/vs/workbench/contrib/notebook/common/notebookEditorModel.js +18 -8
  386. package/vscode/src/vs/workbench/contrib/preferences/browser/preferencesWidgets.js +1 -1
  387. package/vscode/src/vs/workbench/contrib/preferences/browser/settingsTreeModels.js +14 -5
  388. package/vscode/src/vs/workbench/contrib/preferences/common/settingsEditorColorRegistry.js +17 -22
  389. package/vscode/src/vs/workbench/contrib/remote/browser/media/tunnelView.css.js +1 -1
  390. package/vscode/src/vs/workbench/contrib/remote/browser/tunnelView.js +7 -10
  391. package/vscode/src/vs/workbench/contrib/scm/browser/dirtydiffDecorator.js +7 -27
  392. package/vscode/src/vs/workbench/contrib/search/browser/anythingQuickAccess.js +3 -4
  393. package/vscode/src/vs/workbench/contrib/search/browser/notebookSearch/notebookSearchService.js +2 -2
  394. package/vscode/src/vs/workbench/contrib/search/browser/searchActionsFind.js +4 -0
  395. package/vscode/src/vs/workbench/contrib/search/browser/searchModel.js +3 -3
  396. package/vscode/src/vs/workbench/contrib/terminal/browser/xterm/xtermTerminal.d.ts +3 -0
  397. package/vscode/src/vs/workbench/contrib/terminal/common/terminal.d.ts +0 -1
  398. package/vscode/src/vs/workbench/contrib/terminal/common/terminalColorRegistry.js +13 -37
  399. package/vscode/src/vs/workbench/contrib/testing/common/testCoverage.d.ts +88 -0
  400. package/vscode/src/vs/workbench/contrib/testing/common/testCoverage.js +48 -31
  401. package/vscode/src/vs/workbench/contrib/testing/common/testId.d.ts +115 -0
  402. package/vscode/src/vs/workbench/contrib/testing/common/testResult.d.ts +226 -0
  403. package/vscode/src/vs/workbench/contrib/testing/common/testTypes.d.ts +319 -0
  404. package/vscode/src/vs/workbench/contrib/testing/common/testTypes.js +2 -3
  405. package/vscode/src/vs/workbench/contrib/testing/common/testingStates.d.ts +10 -0
  406. package/vscode/src/vs/workbench/contrib/webview/browser/webviewWindowDragMonitor.js +21 -2
  407. package/vscode/src/vs/workbench/contrib/webviewPanel/browser/webviewIconManager.js +7 -8
  408. package/vscode/src/vs/workbench/services/authentication/browser/authenticationService.js +3 -3
  409. package/vscode/src/vs/workbench/services/authentication/common/authentication.d.ts +10 -5
  410. package/vscode/src/vs/workbench/services/editor/common/customEditorLabelService.js +54 -21
  411. package/vscode/src/vs/workbench/services/extensionManagement/common/extensionManagement.service.d.ts +1 -0
  412. package/vscode/src/vs/workbench/services/extensions/browser/extensionService.d.ts +1 -2
  413. package/vscode/src/vs/workbench/services/extensions/common/abstractExtensionService.d.ts +2 -4
  414. package/vscode/src/vs/workbench/services/extensions/common/extensions.js +5 -3
  415. package/vscode/src/vs/workbench/services/extensions/common/extensions.service.d.ts +3 -1
  416. package/vscode/src/vs/workbench/services/extensions/common/extensionsRegistry.js +59 -41
  417. package/vscode/src/vs/workbench/services/extensions/common/rpcProtocol.js +1 -1
  418. package/vscode/src/vs/workbench/services/filesConfiguration/common/filesConfigurationService.js +3 -2
  419. package/vscode/src/vs/workbench/services/host/browser/host.service.d.ts +1 -0
  420. package/vscode/src/vs/workbench/services/language/common/languageService.js +7 -0
  421. package/vscode/src/vs/workbench/services/layout/browser/layoutService.js +1 -1
  422. package/vscode/src/vs/workbench/services/preferences/common/preferences.d.ts +2 -2
  423. package/vscode/src/vs/workbench/services/search/common/search.js +2 -1
  424. package/vscode/src/vs/workbench/services/search/common/textSearchManager.js +2 -2
  425. package/vscode/src/vs/workbench/services/statusbar/browser/statusbar.d.ts +2 -2
  426. package/vscode/src/vs/workbench/services/textfile/common/encoding.js +69 -26
  427. package/vscode/src/vs/workbench/services/textfile/common/textFileEditorModel.js +23 -4
  428. package/vscode/src/vs/workbench/services/textfile/common/textfiles.d.ts +5 -1
  429. package/vscode/src/vs/workbench/services/userDataProfile/common/userDataProfileIcons.js +1 -1
  430. package/vscode/src/vs/workbench/services/views/browser/viewsService.js +12 -5
  431. package/vscode/src/vs/workbench/services/workingCopy/common/storedFileWorkingCopy.js +38 -19
  432. package/vscode/src/vs/workbench/services/workingCopy/common/workingCopyFileService.service.d.ts +2 -1
  433. package/vscode-dts/vscode.proposed.aiTextSearchProvider.d.ts +0 -196
  434. package/vscode-dts/vscode.proposed.attributableCoverage.d.ts +28 -10
  435. package/vscode-dts/vscode.proposed.authGetSessions.d.ts +30 -22
  436. package/vscode-dts/vscode.proposed.chatProvider.d.ts +17 -8
  437. package/vscode-dts/vscode.proposed.chatVariableResolver.d.ts +0 -9
  438. package/vscode-dts/vscode.proposed.commentReveal.d.ts +32 -0
  439. package/vscode-dts/vscode.proposed.commentThreadApplicability.d.ts +10 -0
  440. package/vscode-dts/vscode.proposed.createFileSystemWatcher.d.ts +1 -1
  441. package/vscode-dts/vscode.proposed.fileComments.d.ts +12 -53
  442. package/vscode-dts/vscode.proposed.fileSearchProvider.d.ts +6 -0
  443. package/vscode-dts/vscode.proposed.inlineCompletionsAdditions.d.ts +6 -0
  444. package/vscode-dts/vscode.proposed.lmTools.d.ts +91 -0
  445. package/vscode-dts/vscode.proposed.mappedEditsProvider.d.ts +1 -1
  446. package/vscode-dts/vscode.proposed.scmHistoryProvider.d.ts +10 -6
  447. package/vscode-dts/vscode.proposed.terminalShellIntegration.d.ts +38 -13
  448. package/vscode/src/vs/editor/browser/observableUtilities.js +0 -58
  449. package/vscode/src/vs/workbench/contrib/notebook/browser/viewModel/notebookOutlineProviderFactory.service.js +0 -3
  450. package/vscode/src/vs/workbench/services/extensions/common/extensionsApiProposals.js +0 -122
@@ -1,36 +1,23 @@
1
1
  import { __decorate, __param } from '../../../../../../../external/tslib/tslib.es6.js';
2
- import { append, addDisposableListener, clearNode, WindowIntervalTimer, getWindow, reset, $ as $$1, scheduleAtNextAnimationFrame, hide, show, EventType } from '../../../../base/browser/dom.js';
2
+ import { append, addDisposableListener, clearNode, WindowIntervalTimer, getWindow, reset, $ as $$1, scheduleAtNextAnimationFrame, EventType } from '../../../../base/browser/dom.js';
3
3
  import { renderFormattedText } from '../../../../base/browser/formattedTextRenderer.js';
4
4
  import { StandardKeyboardEvent } from '../../../../base/browser/keyboardEvent.js';
5
- import { alert } from '../../../../base/browser/ui/aria/aria.js';
6
- import { Button } from '../../../../base/browser/ui/button/button.js';
7
5
  import { getDefaultHoverDelegate } from '../../../../base/browser/ui/hover/hoverDelegateFactory.js';
8
- import { renderIcon } from '../../../../base/browser/ui/iconLabel/iconLabels.js';
9
- import { distinct } from '../../../../base/common/arrays.js';
10
- import { CancellationTokenSource } from '../../../../base/common/cancellation.js';
6
+ import { distinct, coalesce } from '../../../../base/common/arrays.js';
11
7
  import { Codicon } from '../../../../base/common/codicons.js';
12
- import { Emitter, Event } from '../../../../base/common/event.js';
8
+ import { Emitter } from '../../../../base/common/event.js';
13
9
  import { MarkdownString } from '../../../../base/common/htmlContent.js';
14
10
  import { KeyCode } from '../../../../base/common/keyCodes.js';
15
- import { Disposable, DisposableStore, toDisposable } from '../../../../base/common/lifecycle.js';
11
+ import { Disposable, toDisposable, dispose, DisposableStore } from '../../../../base/common/lifecycle.js';
16
12
  import { ResourceMap } from '../../../../base/common/map.js';
17
- import { FileAccess, Schemas, matchesSomeScheme } from '../../../../base/common/network.js';
13
+ import { FileAccess } from '../../../../base/common/network.js';
18
14
  import { clamp } from '../../../../base/common/numbers.js';
19
15
  import '../../../../base/common/observableInternal/derived.js';
20
16
  import { autorun } from '../../../../base/common/observableInternal/autorun.js';
21
17
  import '../../../../base/common/observableInternal/utils.js';
22
- import { basename } from '../../../../base/common/path.js';
23
- import { isEqual, basenameOrAuthority } from '../../../../base/common/resources.js';
24
- import { equalsIgnoreCase } from '../../../../base/common/strings.js';
18
+ import '../../../../base/common/cancellation.js';
25
19
  import { ThemeIcon } from '../../../../base/common/themables.js';
26
20
  import { URI } from '../../../../base/common/uri.js';
27
- import { generateUuid } from '../../../../base/common/uuid.js';
28
- import { Range } from '../../../../editor/common/core/range.js';
29
- import { TextEdit } from '../../../../editor/common/languages.js';
30
- import { createTextBufferFactoryFromSnapshot } from '../../../../editor/common/model/textModel.js';
31
- import { IModelService } from '../../../../editor/common/services/model.js';
32
- import { DefaultModelSHA1Computer } from '../../../../editor/common/services/modelService.js';
33
- import { ITextModelService } from '../../../../editor/common/services/resolverService.js';
34
21
  import { localizeWithPath } from '../../../../nls.js';
35
22
  import { createActionViewItem, MenuEntryActionViewItem } from '../../../../platform/actions/browser/menuEntryActionViewItem.js';
36
23
  import { MenuWorkbenchToolBar } from '../../../../platform/actions/browser/toolbar.js';
@@ -38,40 +25,40 @@ import { MenuId, MenuItemAction } from '../../../../platform/actions/common/acti
38
25
  import { ICommandService } from '../../../../platform/commands/common/commands.service.js';
39
26
  import { IConfigurationService } from '../../../../platform/configuration/common/configuration.service.js';
40
27
  import { IContextKeyService } from '../../../../platform/contextkey/common/contextkey.service.js';
41
- import { FileKind, FileType } from '../../../../platform/files/common/files.js';
42
28
  import { IHoverService } from '../../../../platform/hover/browser/hover.service.js';
43
29
  import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js';
44
30
  import { ServiceCollection } from '../../../../platform/instantiation/common/serviceCollection.js';
45
- import { WorkbenchCompressibleAsyncDataTree, WorkbenchList } from '../../../../platform/list/browser/listService.js';
46
31
  import { ILogService } from '../../../../platform/log/common/log.service.js';
47
- import { IOpenerService } from '../../../../platform/opener/common/opener.service.js';
48
- import { defaultButtonStyles } from '../../../../platform/theme/browser/defaultStyles.js';
49
32
  import { ColorScheme } from '../../../../platform/theme/common/theme.js';
50
33
  import { IThemeService } from '../../../../platform/theme/common/themeService.service.js';
51
- import { ResourceLabels } from '../../../browser/labels.js';
52
34
  import { GeneratingPhrase } from './chat.js';
53
35
  import { ChatAgentHover, getChatAgentHoverOptions } from './chatAgentHover.js';
54
- import { ChatConfirmationWidget } from './chatConfirmationWidget.js';
36
+ import { ChatCommandButtonContentPart } from './chatContentParts/chatCommandContentPart.js';
37
+ import { ChatConfirmationContentPart } from './chatContentParts/chatConfirmationContentPart.js';
38
+ import { EditorPool, ChatMarkdownContentPart } from './chatContentParts/chatMarkdownContentPart.js';
39
+ import { ChatProgressContentPart } from './chatContentParts/chatProgressContentPart.js';
40
+ import { ContentReferencesListPool, ChatReferencesContentPart } from './chatContentParts/chatReferencesContentPart.js';
41
+ import { ChatTaskContentPart } from './chatContentParts/chatTaskContentPart.js';
42
+ import { DiffEditorPool, ChatTextEditContentPart } from './chatContentParts/chatTextEditContentPart.js';
43
+ import { TreePool, ChatTreeContentPart } from './chatContentParts/chatTreeContentPart.js';
44
+ import { ChatWarningContentPart } from './chatContentParts/chatWarningContentPart.js';
55
45
  import { ChatFollowups } from './chatFollowups.js';
56
46
  import { ChatMarkdownDecorationsRenderer } from './chatMarkdownDecorationsRenderer.js';
57
- import { ChatCodeBlockContentProvider, parseLocalFileData, CodeBlockPart, CodeCompareBlockPart, localFileLanguageId } from './codeBlockPart.js';
47
+ import { ChatMarkdownRenderer } from './chatMarkdownRenderer.js';
48
+ import { ChatCodeBlockContentProvider } from './codeBlockPart.js';
58
49
  import { CONTEXT_RESPONSE, CONTEXT_REQUEST, CONTEXT_RESPONSE_DETECTED_AGENT_COMMAND, CONTEXT_CHAT_RESPONSE_SUPPORT_ISSUE_REPORTING, CONTEXT_RESPONSE_VOTE, CONTEXT_RESPONSE_FILTERED } from '../common/chatContextKeys.js';
59
50
  import { chatSubcommandLeader } from '../common/chatParserTypes.js';
60
51
  import { ChatAgentVoteDirection } from '../common/chatService.js';
61
- import { IChatService } from '../common/chatService.service.js';
62
- import { IChatVariablesService } from '../common/chatVariables.service.js';
63
52
  import { isResponseVM, isRequestVM, isWelcomeVM } from '../common/chatViewModel.js';
64
53
  import { getNWords } from '../common/chatWordCounter.js';
65
- import { createFileIconThemableTreeContainerScope } from '../../files/browser/views/explorerView.js';
66
54
  import { annotateSpecialMarkdownContent } from '../common/annotations.js';
67
- import { ChatMarkdownRenderer } from './chatMarkdownRenderer.js';
68
- var ChatListItemRenderer_1, ContentReferencesListRenderer_1;
55
+ var ChatListItemRenderer_1;
69
56
  const _moduleId = "vs/workbench/contrib/chat/browser/chatListRenderer";
70
57
  const $ = $$1;
71
58
  let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
72
59
  static { ChatListItemRenderer_1 = this; }
73
60
  static { this.ID = 'item'; }
74
- constructor(editorOptions, location, rendererOptions, delegate, codeBlockModelCollection, overflowWidgetsDomNode, instantiationService, configService, logService, openerService, contextKeyService, themeService, commandService, textModelService, modelService, hoverService, chatService) {
61
+ constructor(editorOptions, location, rendererOptions, delegate, codeBlockModelCollection, overflowWidgetsDomNode, instantiationService, configService, logService, contextKeyService, themeService, commandService, hoverService) {
75
62
  super();
76
63
  this.location = location;
77
64
  this.rendererOptions = rendererOptions;
@@ -79,14 +66,10 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
79
66
  this.codeBlockModelCollection = codeBlockModelCollection;
80
67
  this.instantiationService = instantiationService;
81
68
  this.logService = logService;
82
- this.openerService = openerService;
83
69
  this.contextKeyService = contextKeyService;
84
70
  this.themeService = themeService;
85
71
  this.commandService = commandService;
86
- this.textModelService = textModelService;
87
- this.modelService = modelService;
88
72
  this.hoverService = hoverService;
89
- this.chatService = chatService;
90
73
  this.codeBlocksByResponseId = ( (new Map()));
91
74
  this.codeBlocksByEditorUri = ( (new ResourceMap()));
92
75
  this.fileTreesByResponseId = ( (new Map()));
@@ -100,7 +83,6 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
100
83
  this._currentLayoutWidth = 0;
101
84
  this._isVisible = true;
102
85
  this._onDidChangeVisibility = this._register(( (new Emitter())));
103
- this._usedReferencesEnabled = false;
104
86
  this.renderer = this._register(this.instantiationService.createInstance(ChatMarkdownRenderer, undefined));
105
87
  this.markdownDecorationsRenderer = this.instantiationService.createInstance(ChatMarkdownDecorationsRenderer);
106
88
  this._editorPool = this._register(this.instantiationService.createInstance(EditorPool, editorOptions, delegate, overflowWidgetsDomNode));
@@ -108,12 +90,6 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
108
90
  this._treePool = this._register(this.instantiationService.createInstance(TreePool, this._onDidChangeVisibility.event));
109
91
  this._contentReferencesListPool = this._register(this.instantiationService.createInstance(ContentReferencesListPool, this._onDidChangeVisibility.event));
110
92
  this._register(this.instantiationService.createInstance(ChatCodeBlockContentProvider));
111
- this._usedReferencesEnabled = configService.getValue('chat.experimental.usedReferences') ?? true;
112
- this._register(configService.onDidChangeConfiguration(e => {
113
- if (e.affectsConfiguration('chat.experimental.usedReferences')) {
114
- this._usedReferencesEnabled = configService.getValue('chat.experimental.usedReferences') ?? true;
115
- }
116
- }));
117
93
  }
118
94
  get templateId() {
119
95
  return ChatListItemRenderer_1.ID;
@@ -180,17 +156,30 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
180
156
  if (this.rendererOptions.noPadding) {
181
157
  rowContainer.classList.add('no-padding');
182
158
  }
183
- const header = append(rowContainer, $('.header'));
159
+ let headerParent = rowContainer;
160
+ let valueParent = rowContainer;
161
+ let detailContainerParent;
162
+ let toolbarParent;
163
+ if (this.rendererOptions.renderStyle === 'minimal') {
164
+ rowContainer.classList.add('interactive-item-compact');
165
+ rowContainer.classList.add('minimal');
166
+ const lhsContainer = append(rowContainer, $('.column.left'));
167
+ const rhsContainer = append(rowContainer, $('.column.right'));
168
+ headerParent = lhsContainer;
169
+ detailContainerParent = rhsContainer;
170
+ valueParent = rhsContainer;
171
+ toolbarParent = append(rowContainer, $('.header'));
172
+ }
173
+ const header = append(headerParent, $('.header'));
184
174
  const user = append(header, $('.user'));
185
175
  user.tabIndex = 0;
186
176
  user.role = 'toolbar';
187
177
  const avatarContainer = append(user, $('.avatar-container'));
188
178
  const username = append(user, $('h3.username'));
189
- const detailContainer = append(user, $('span.detail-container'));
179
+ const detailContainer = append(detailContainerParent ?? user, $('span.detail-container'));
190
180
  const detail = append(detailContainer, $('span.detail'));
191
181
  append(detailContainer, $('span.chat-animated-ellipsis'));
192
- const referencesListContainer = append(rowContainer, $('.referencesListContainer'));
193
- const value = append(rowContainer, $('.value'));
182
+ const value = append(valueParent, $('.value'));
194
183
  const elementDisposables = ( (new DisposableStore()));
195
184
  const contextKeyService = templateDisposables.add(this.contextKeyService.createScoped(rowContainer));
196
185
  const scopedInstantiationService = this.instantiationService.createChild(( (new ServiceCollection([IContextKeyService, contextKeyService]))));
@@ -199,7 +188,7 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
199
188
  header.classList.add('hidden');
200
189
  }
201
190
  else {
202
- titleToolbar = templateDisposables.add(scopedInstantiationService.createInstance(MenuWorkbenchToolBar, header, MenuId.ChatMessageTitle, {
191
+ titleToolbar = templateDisposables.add(scopedInstantiationService.createInstance(MenuWorkbenchToolBar, toolbarParent ?? header, MenuId.ChatMessageTitle, {
203
192
  menuOptions: {
204
193
  shouldForwardArgs: true
205
194
  },
@@ -216,14 +205,14 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
216
205
  }
217
206
  const agentHover = templateDisposables.add(this.instantiationService.createInstance(ChatAgentHover));
218
207
  const hoverContent = () => {
219
- if (isResponseVM(template.currentElement) && template.currentElement.agent) {
208
+ if (isResponseVM(template.currentElement) && template.currentElement.agent && !template.currentElement.agent.isDefault) {
220
209
  agentHover.setAgent(template.currentElement.agent.id);
221
210
  return agentHover.domNode;
222
211
  }
223
212
  return undefined;
224
213
  };
225
214
  const hoverOptions = getChatAgentHoverOptions(() => isResponseVM(template.currentElement) ? template.currentElement.agent : undefined, this.commandService);
226
- templateDisposables.add(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('element'), user, hoverContent, hoverOptions));
215
+ templateDisposables.add(this.hoverService.setupManagedHover(getDefaultHoverDelegate('element'), user, hoverContent, hoverOptions));
227
216
  templateDisposables.add(addDisposableListener(user, EventType.KEY_DOWN, e => {
228
217
  const ev = ( (new StandardKeyboardEvent(e)));
229
218
  if (ev.equals(KeyCode.Space) || ev.equals(KeyCode.Enter)) {
@@ -236,7 +225,7 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
236
225
  this.hoverService.hideHover();
237
226
  }
238
227
  }));
239
- const template = { avatarContainer, username, detail, referencesListContainer, value, rowContainer, elementDisposables, titleToolbar, templateDisposables, contextKeyService, agentHover };
228
+ const template = { avatarContainer, username, detail, value, rowContainer, elementDisposables, titleToolbar, templateDisposables, contextKeyService, instantiationService: scopedInstantiationService, agentHover };
240
229
  return template;
241
230
  }
242
231
  renderElement(node, index, templateData) {
@@ -278,31 +267,26 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
278
267
  }
279
268
  if (isResponseVM(element) && index === this.delegate.getListLength() - 1 && (!element.isComplete || element.renderData) && element.response.value.length) {
280
269
  this.traceLayout('renderElement', `start progressive render ${kind}, index=${index}`);
281
- const progressiveRenderingDisposables = templateData.elementDisposables.add(( (new DisposableStore())));
282
270
  const timer = templateData.elementDisposables.add(new WindowIntervalTimer());
283
271
  const runProgressiveRender = (initial) => {
284
272
  try {
285
- if (this.doNextProgressiveRender(element, index, templateData, !!initial, progressiveRenderingDisposables)) {
273
+ if (this.doNextProgressiveRender(element, index, templateData, !!initial)) {
286
274
  timer.cancel();
287
275
  }
288
276
  }
289
277
  catch (err) {
290
278
  timer.cancel();
291
- throw err;
279
+ this.logService.error(err);
292
280
  }
293
281
  };
294
282
  timer.cancelAndSet(runProgressiveRender, 50, getWindow(templateData.rowContainer));
295
283
  runProgressiveRender(true);
296
284
  }
297
285
  else if (isResponseVM(element)) {
298
- const renderableResponse = annotateSpecialMarkdownContent(element.response.value);
299
- this.basicRenderElement(renderableResponse, element, index, templateData);
286
+ this.basicRenderElement(element, index, templateData);
300
287
  }
301
288
  else if (isRequestVM(element)) {
302
- const markdown = 'message' in element.message ?
303
- element.message.message :
304
- this.markdownDecorationsRenderer.convertParsedRequestToMarkdown(element.message);
305
- this.basicRenderElement([{ content: ( (new MarkdownString(markdown))), kind: 'markdownContent' }], element, index, templateData);
289
+ this.basicRenderElement(element, index, templateData);
306
290
  }
307
291
  else {
308
292
  this.renderWelcomeMessage(element, templateData);
@@ -316,14 +300,8 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
316
300
  _renderDetail(element, templateData) {
317
301
  clearNode(templateData.detail);
318
302
  if (element.slashCommand && element.agentOrSlashCommandDetected) {
319
- let msg = '';
320
303
  const usingMsg = `${chatSubcommandLeader}${element.slashCommand.name}`;
321
- if (element.isComplete) {
322
- msg = ( localizeWithPath(_moduleId, 0, "used {0} [[(rerun without)]]", usingMsg));
323
- }
324
- else {
325
- msg = ( localizeWithPath(_moduleId, 1, "using {0}", usingMsg));
326
- }
304
+ const msg = ( localizeWithPath(_moduleId, 0, "used {0} [[(rerun without)]]", usingMsg));
327
305
  reset(templateData.detail, renderFormattedText(msg, {
328
306
  className: 'agentOrSlashCommandDetected',
329
307
  inline: true,
@@ -367,40 +345,43 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
367
345
  return Codicon.copilot;
368
346
  }
369
347
  }
370
- basicRenderElement(value, element, index, templateData) {
371
- const fillInIncompleteTokens = isResponseVM(element) && (!element.isComplete || element.isCanceled || element.errorDetails?.responseIsFiltered || element.errorDetails?.responseIsIncomplete);
348
+ basicRenderElement(element, index, templateData) {
349
+ let value = [];
350
+ if (isRequestVM(element)) {
351
+ const markdown = 'message' in element.message ?
352
+ element.message.message :
353
+ this.markdownDecorationsRenderer.convertParsedRequestToMarkdown(element.message);
354
+ value = [{ content: ( (new MarkdownString(markdown))), kind: 'markdownContent' }];
355
+ }
356
+ else if (isResponseVM(element)) {
357
+ value = annotateSpecialMarkdownContent(element.response.value);
358
+ if (element.contentReferences.length) {
359
+ value.unshift({ kind: 'references', references: element.contentReferences });
360
+ }
361
+ }
372
362
  clearNode(templateData.value);
373
- clearNode(templateData.referencesListContainer);
374
363
  if (isResponseVM(element)) {
375
364
  this.renderDetail(element, templateData);
376
365
  }
377
- this.renderContentReferencesIfNeeded(element, templateData, templateData.elementDisposables);
378
- let fileTreeIndex = 0;
379
- let codeBlockIndex = 0;
366
+ const parts = [];
380
367
  value.forEach((data, index) => {
381
- const result = data.kind === 'treeData'
382
- ? this.renderTreeData(data.treeData, element, templateData, fileTreeIndex++)
383
- : data.kind === 'markdownContent'
384
- ? this.renderMarkdown(data.content, element, templateData, fillInIncompleteTokens, codeBlockIndex)
385
- : data.kind === 'progressMessage' && onlyProgressMessagesAfterI(value, index) ? this.renderProgressMessage(data, false)
386
- : data.kind === 'progressTask' ? this.renderProgressTask(data, false, element, templateData)
387
- : data.kind === 'command' ? this.renderCommandButton(element, data)
388
- : data.kind === 'textEditGroup' ? this.renderTextEdit(element, data, templateData)
389
- : data.kind === 'warning' ? this.renderNotification('warning', data.content)
390
- : data.kind === 'confirmation' ? this.renderConfirmation(element, data, templateData)
391
- : undefined;
392
- if (result) {
393
- templateData.value.appendChild(result.element);
394
- templateData.elementDisposables.add(result);
395
- if ('codeBlockCount' in result) {
396
- codeBlockIndex += result.codeBlockCount;
397
- }
368
+ const context = {
369
+ element,
370
+ index,
371
+ content: value,
372
+ preceedingContentParts: parts,
373
+ };
374
+ const newPart = this.renderChatContentPart(data, templateData, context);
375
+ if (newPart) {
376
+ templateData.value.appendChild(newPart.domNode);
377
+ parts.push(newPart);
398
378
  }
399
379
  });
380
+ templateData.renderedParts = parts;
400
381
  if (isResponseVM(element) && element.errorDetails?.message) {
401
- const renderedError = this.renderNotification(element.errorDetails.responseIsFiltered ? 'info' : 'error', ( (new MarkdownString(element.errorDetails.message))));
382
+ const renderedError = this.instantiationService.createInstance(ChatWarningContentPart, element.errorDetails.responseIsFiltered ? 'info' : 'error', ( (new MarkdownString(element.errorDetails.message))), this.renderer);
402
383
  templateData.elementDisposables.add(renderedError);
403
- templateData.value.appendChild(renderedError.element);
384
+ templateData.value.appendChild(renderedError.domNode);
404
385
  }
405
386
  const newHeight = templateData.rowContainer.offsetHeight;
406
387
  const fireEvent = !element.currentRenderedHeight || element.currentRenderedHeight !== newHeight;
@@ -423,19 +404,23 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
423
404
  }
424
405
  renderWelcomeMessage(element, templateData) {
425
406
  clearNode(templateData.value);
426
- clearNode(templateData.referencesListContainer);
427
- hide(templateData.referencesListContainer);
428
- for (const item of element.content) {
407
+ element.content.forEach((item, i) => {
429
408
  if (Array.isArray(item)) {
430
409
  const scopedInstaService = this.instantiationService.createChild(( (new ServiceCollection([IContextKeyService, templateData.contextKeyService]))));
431
410
  templateData.elementDisposables.add(scopedInstaService.createInstance(ChatFollowups, templateData.value, item, this.location, undefined, followup => this._onDidClickFollowup.fire(followup)));
432
411
  }
433
412
  else {
434
- const result = this.renderMarkdown(item, element, templateData);
435
- templateData.value.appendChild(result.element);
413
+ const context = {
414
+ element,
415
+ index: i,
416
+ content: [],
417
+ preceedingContentParts: []
418
+ };
419
+ const result = this.renderMarkdown(item, templateData, context);
420
+ templateData.value.appendChild(result.domNode);
436
421
  templateData.elementDisposables.add(result);
437
422
  }
438
- }
423
+ });
439
424
  const newHeight = templateData.rowContainer.offsetHeight;
440
425
  const fireEvent = !element.currentRenderedHeight || element.currentRenderedHeight !== newHeight;
441
426
  element.currentRenderedHeight = newHeight;
@@ -447,165 +432,30 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
447
432
  }));
448
433
  }
449
434
  }
450
- doNextProgressiveRender(element, index, templateData, isInRenderElement, disposables) {
435
+ doNextProgressiveRender(element, index, templateData, isInRenderElement) {
451
436
  if (!this._isVisible) {
452
437
  return true;
453
438
  }
454
- const renderableResponse = annotateSpecialMarkdownContent(element.response.value);
455
439
  let isFullyRendered = false;
456
440
  if (element.isCanceled) {
457
- this.traceLayout('runProgressiveRender', `canceled, index=${index}`);
441
+ this.traceLayout('doNextProgressiveRender', `canceled, index=${index}`);
458
442
  element.renderData = undefined;
459
- this.basicRenderElement(renderableResponse, element, index, templateData);
443
+ this.basicRenderElement(element, index, templateData);
460
444
  isFullyRendered = true;
461
445
  }
462
446
  else {
463
- element.renderData ??= { renderedParts: [] };
464
- const renderedParts = element.renderData.renderedParts;
465
- const wordCountResults = [];
466
- const partsToRender = [];
467
- let somePartIsNotFullyRendered = false;
468
- renderableResponse.forEach((part, index) => {
469
- const renderedPart = renderedParts[index];
470
- if (!renderedPart) {
471
- if (part.kind === 'treeData') {
472
- partsToRender[index] = part.treeData;
473
- }
474
- else if (part.kind === 'progressMessage') {
475
- partsToRender[index] = {
476
- progressMessage: part,
477
- isAtEndOfResponse: onlyProgressMessagesAfterI(renderableResponse, index),
478
- isLast: index === renderableResponse.length - 1,
479
- };
480
- }
481
- else if (part.kind === 'command' ||
482
- part.kind === 'textEditGroup' ||
483
- part.kind === 'confirmation' ||
484
- part.kind === 'warning') {
485
- partsToRender[index] = part;
486
- }
487
- else if (part.kind === 'progressTask') {
488
- partsToRender[index] = {
489
- task: part,
490
- isSettled: part.isSettled?.() ?? true,
491
- progressLength: part.progress.length,
492
- };
493
- }
494
- else {
495
- const wordCountResult = this.getDataForProgressiveRender(element, contentToMarkdown(part.content), { renderedWordCount: 0, lastRenderTime: 0 });
496
- if (wordCountResult !== undefined) {
497
- this.traceLayout('doNextProgressiveRender', `Rendering new part ${index}, wordCountResult=${wordCountResult.actualWordCount}, rate=${wordCountResult.rate}`);
498
- partsToRender[index] = {
499
- renderedWordCount: wordCountResult.actualWordCount,
500
- lastRenderTime: Date.now(),
501
- isFullyRendered: wordCountResult.isFullString,
502
- originalMarkdown: part.content,
503
- };
504
- wordCountResults[index] = wordCountResult;
505
- }
506
- }
507
- }
508
- else if ((part.kind === 'markdownContent' || part.kind === 'progressMessage') && isMarkdownRenderData(renderedPart)) {
509
- const wordCountResult = this.getDataForProgressiveRender(element, contentToMarkdown(part.content), renderedPart);
510
- if (wordCountResult !== undefined && renderedPart.renderedWordCount !== wordCountResult?.actualWordCount) {
511
- this.traceLayout('doNextProgressiveRender', `Rendering changed part ${index}, wordCountResult=${wordCountResult.actualWordCount}, rate=${wordCountResult.rate}`);
512
- partsToRender[index] = {
513
- renderedWordCount: wordCountResult.actualWordCount,
514
- lastRenderTime: Date.now(),
515
- isFullyRendered: wordCountResult.isFullString,
516
- originalMarkdown: part.content,
517
- };
518
- wordCountResults[index] = wordCountResult;
519
- }
520
- else if (!renderedPart.isFullyRendered && !wordCountResult) {
521
- somePartIsNotFullyRendered = true;
522
- }
523
- }
524
- else if (part.kind === 'progressMessage' && isProgressMessageRenderData(renderedPart) && ((renderedPart.isAtEndOfResponse !== onlyProgressMessagesAfterI(renderableResponse, index)) ||
525
- renderedPart.isLast !== (index === renderableResponse.length - 1))) {
526
- partsToRender[index] = {
527
- progressMessage: part,
528
- isAtEndOfResponse: onlyProgressMessagesAfterI(renderableResponse, index),
529
- isLast: index === renderableResponse.length - 1,
530
- };
531
- }
532
- else if (part.kind === 'progressTask' && isProgressTaskRenderData(renderedPart)) {
533
- const isSettled = part.isSettled?.() ?? true;
534
- if (renderedPart.isSettled !== isSettled || part.progress.length !== renderedPart.progressLength || isSettled) {
535
- partsToRender[index] = { task: part, isSettled, progressLength: part.progress.length };
536
- }
537
- }
538
- });
539
- isFullyRendered = partsToRender.filter((p) => !('isSettled' in p) || !p.isSettled).length === 0 && !somePartIsNotFullyRendered;
447
+ this.traceLayout('doNextProgressiveRender', `START progressive render, index=${index}, renderData=${JSON.stringify(element.renderData)}`);
448
+ const contentForThisTurn = this.getNextProgressiveRenderContent(element);
449
+ const partsToRender = this.diff(templateData.renderedParts ?? [], contentForThisTurn, element);
450
+ isFullyRendered = partsToRender.every(part => part === null);
540
451
  if (isFullyRendered && element.isComplete) {
541
- this.traceLayout('runProgressiveRender', `end progressive render, index=${index} and clearing renderData, response is complete, index=${index}`);
452
+ this.traceLayout('doNextProgressiveRender', `END progressive render, index=${index} and clearing renderData, response is complete`);
542
453
  element.renderData = undefined;
543
- disposables.clear();
544
- this.basicRenderElement(renderableResponse, element, index, templateData);
454
+ this.basicRenderElement(element, index, templateData);
545
455
  }
546
456
  else if (!isFullyRendered) {
547
- disposables.clear();
548
- this.renderContentReferencesIfNeeded(element, templateData, disposables);
549
- let hasRenderedOneMarkdownBlock = false;
550
- partsToRender.forEach((partToRender, index) => {
551
- if (!partToRender) {
552
- return;
553
- }
554
- let result;
555
- if (isInteractiveProgressTreeData(partToRender)) {
556
- result = this.renderTreeData(partToRender, element, templateData, index);
557
- }
558
- else if (isProgressMessageRenderData(partToRender)) {
559
- if (onlyProgressMessageRenderDatasAfterI(partsToRender, index)) {
560
- result = this.renderProgressMessage(partToRender.progressMessage, index === partsToRender.length - 1);
561
- }
562
- else {
563
- result = null;
564
- }
565
- }
566
- else if (isProgressTaskRenderData(partToRender)) {
567
- result = this.renderProgressTask(partToRender.task, !partToRender.isSettled, element, templateData);
568
- }
569
- else if (isCommandButtonRenderData(partToRender)) {
570
- result = this.renderCommandButton(element, partToRender);
571
- }
572
- else if (isTextEditRenderData(partToRender)) {
573
- result = this.renderTextEdit(element, partToRender, templateData);
574
- }
575
- else if (isConfirmationRenderData(partToRender)) {
576
- result = this.renderConfirmation(element, partToRender, templateData);
577
- }
578
- else if (isWarningRenderData(partToRender)) {
579
- result = this.renderNotification('warning', partToRender.content);
580
- }
581
- else if (!hasRenderedOneMarkdownBlock && wordCountResults[index]) {
582
- const { value } = wordCountResults[index];
583
- const part = partsToRender[index];
584
- const originalMarkdown = 'originalMarkdown' in part ? part.originalMarkdown : undefined;
585
- const markdownToRender = ( (new MarkdownString(value, originalMarkdown)));
586
- result = this.renderMarkdown(markdownToRender, element, templateData, true);
587
- hasRenderedOneMarkdownBlock = true;
588
- }
589
- if (result === undefined) {
590
- return;
591
- }
592
- renderedParts[index] = partToRender;
593
- const existingElement = templateData.value.children[index];
594
- if (existingElement) {
595
- if (result === null) {
596
- templateData.value.replaceChild($('span.placeholder-for-deleted-thing'), existingElement);
597
- }
598
- else {
599
- templateData.value.replaceChild(result.element, existingElement);
600
- }
601
- }
602
- else if (result) {
603
- templateData.value.appendChild(result.element);
604
- }
605
- if (result) {
606
- disposables.add(result);
607
- }
608
- });
457
+ this.traceLayout('doNextProgressiveRender', `doing progressive render, ${partsToRender.length} parts to render`);
458
+ this.renderChatContentDiff(partsToRender, contentForThisTurn, element, templateData);
609
459
  }
610
460
  else {
611
461
  return false;
@@ -618,420 +468,230 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
618
468
  }
619
469
  return isFullyRendered;
620
470
  }
621
- renderTreeData(data, element, templateData, treeDataIndex) {
622
- const treeDisposables = ( (new DisposableStore()));
623
- const ref = treeDisposables.add(this._treePool.get());
624
- const tree = ref.object;
625
- treeDisposables.add(tree.onDidOpen((e) => {
626
- if (e.element && !('children' in e.element)) {
627
- this.openerService.open(e.element.uri);
471
+ renderChatContentDiff(partsToRender, contentForThisTurn, element, templateData) {
472
+ const renderedParts = templateData.renderedParts ?? [];
473
+ templateData.renderedParts = renderedParts;
474
+ partsToRender.forEach((partToRender, index) => {
475
+ if (!partToRender) {
476
+ return;
628
477
  }
629
- }));
630
- treeDisposables.add(tree.onDidChangeCollapseState(() => {
631
- this.updateItemHeight(templateData);
632
- }));
633
- treeDisposables.add(tree.onContextMenu((e) => {
634
- e.browserEvent.preventDefault();
635
- e.browserEvent.stopPropagation();
636
- }));
637
- tree.setInput(data).then(() => {
638
- if (!ref.isStale()) {
639
- tree.layout();
640
- this.updateItemHeight(templateData);
478
+ const alreadyRenderedPart = templateData.renderedParts?.[index];
479
+ if (alreadyRenderedPart) {
480
+ alreadyRenderedPart.dispose();
641
481
  }
642
- });
643
- if (isResponseVM(element)) {
644
- const fileTreeFocusInfo = {
645
- treeDataId: ( (data.uri.toString())),
646
- treeIndex: treeDataIndex,
647
- focus() {
648
- tree.domFocus();
649
- }
482
+ const preceedingContentParts = renderedParts.slice(0, index);
483
+ const context = {
484
+ element,
485
+ content: contentForThisTurn,
486
+ preceedingContentParts,
487
+ index
650
488
  };
651
- treeDisposables.add(tree.onDidFocus(() => {
652
- this.focusedFileTreesByResponseId.set(element.id, fileTreeFocusInfo.treeIndex);
653
- }));
654
- const fileTrees = this.fileTreesByResponseId.get(element.id) ?? [];
655
- fileTrees.push(fileTreeFocusInfo);
656
- this.fileTreesByResponseId.set(element.id, distinct(fileTrees, (v) => v.treeDataId));
657
- treeDisposables.add(toDisposable(() => this.fileTreesByResponseId.set(element.id, fileTrees.filter(v => v.treeDataId !== ( (data.uri.toString()))))));
658
- }
659
- return {
660
- element: tree.getHTMLElement().parentElement,
661
- dispose: () => {
662
- treeDisposables.dispose();
489
+ const newPart = this.renderChatContentPart(partToRender, templateData, context);
490
+ if (newPart) {
491
+ if (alreadyRenderedPart) {
492
+ try {
493
+ alreadyRenderedPart.domNode.replaceWith(newPart.domNode);
494
+ }
495
+ catch (err) {
496
+ this.logService.error('ChatListItemRenderer#renderChatContentDiff: error replacing part', err);
497
+ }
498
+ }
499
+ else {
500
+ templateData.value.appendChild(newPart.domNode);
501
+ }
502
+ renderedParts[index] = newPart;
663
503
  }
664
- };
504
+ else if (alreadyRenderedPart) {
505
+ alreadyRenderedPart.domNode.remove();
506
+ }
507
+ });
665
508
  }
666
- renderContentReferencesIfNeeded(element, templateData, disposables) {
667
- if (isResponseVM(element) && this._usedReferencesEnabled && element.contentReferences.length) {
668
- show(templateData.referencesListContainer);
669
- const contentReferencesListResult = this.renderContentReferencesListData(null, element.contentReferences, element, templateData);
670
- if (templateData.referencesListContainer.firstChild) {
671
- templateData.referencesListContainer.replaceChild(contentReferencesListResult.element, templateData.referencesListContainer.firstChild);
509
+ getNextProgressiveRenderContent(element) {
510
+ const data = this.getDataForProgressiveRender(element);
511
+ const renderableResponse = annotateSpecialMarkdownContent(element.response.value);
512
+ this.traceLayout('getNextProgressiveRenderContent', `Want to render ${data.numWordsToRender}, counting...`);
513
+ let numNeededWords = data.numWordsToRender;
514
+ const partsToRender = [];
515
+ if (element.contentReferences.length) {
516
+ partsToRender.push({ kind: 'references', references: element.contentReferences });
517
+ }
518
+ for (const part of renderableResponse) {
519
+ if (numNeededWords <= 0) {
520
+ break;
521
+ }
522
+ if (part.kind === 'markdownContent') {
523
+ const wordCountResult = getNWords(part.content.value, numNeededWords);
524
+ if (wordCountResult.isFullString) {
525
+ partsToRender.push(part);
526
+ }
527
+ else {
528
+ partsToRender.push({ kind: 'markdownContent', content: ( (new MarkdownString(wordCountResult.value, part.content))) });
529
+ }
530
+ this.traceLayout('getNextProgressiveRenderContent', ` Want to render ${numNeededWords} words and found ${wordCountResult.returnedWordCount} words. Total words in chunk: ${wordCountResult.totalWordCount}`);
531
+ numNeededWords -= wordCountResult.returnedWordCount;
672
532
  }
673
533
  else {
674
- templateData.referencesListContainer.appendChild(contentReferencesListResult.element);
534
+ partsToRender.push(part);
675
535
  }
676
- disposables.add(contentReferencesListResult);
677
536
  }
678
- else {
679
- hide(templateData.referencesListContainer);
537
+ this.traceLayout('getNextProgressiveRenderContent', `Want to render ${data.numWordsToRender} words and ${data.numWordsToRender - numNeededWords} words available`);
538
+ const newRenderedWordCount = data.numWordsToRender - numNeededWords;
539
+ if (newRenderedWordCount !== element.renderData?.renderedWordCount) {
540
+ element.renderData = { lastRenderTime: Date.now(), renderedWordCount: newRenderedWordCount, renderedParts: partsToRender };
680
541
  }
542
+ return partsToRender;
681
543
  }
682
- renderContentReferencesListData(task, data, element, templateData) {
683
- const listDisposables = ( (new DisposableStore()));
684
- const referencesLabel = task?.content.value ?? (data.length > 1 ?
685
- ( localizeWithPath(_moduleId, 2, "Used {0} references", data.length)) :
686
- ( localizeWithPath(_moduleId, 3, "Used {0} reference", 1)));
687
- const iconElement = $('.chat-used-context-icon');
688
- const icon = (element) => element.usedReferencesExpanded ? Codicon.chevronDown : Codicon.chevronRight;
689
- iconElement.classList.add(...ThemeIcon.asClassNameArray(icon(element)));
690
- const buttonElement = $('.chat-used-context-label', undefined);
691
- const collapseButton = listDisposables.add(( (new Button(buttonElement, {
692
- buttonBackground: undefined,
693
- buttonBorder: undefined,
694
- buttonForeground: undefined,
695
- buttonHoverBackground: undefined,
696
- buttonSecondaryBackground: undefined,
697
- buttonSecondaryForeground: undefined,
698
- buttonSecondaryHoverBackground: undefined,
699
- buttonSeparator: undefined
700
- }))));
701
- const container = $('.chat-used-context', undefined, buttonElement);
702
- collapseButton.label = referencesLabel;
703
- collapseButton.element.prepend(iconElement);
704
- this.updateAriaLabel(collapseButton.element, referencesLabel, element.usedReferencesExpanded);
705
- container.classList.toggle('chat-used-context-collapsed', !element.usedReferencesExpanded);
706
- listDisposables.add(collapseButton.onDidClick(() => {
707
- iconElement.classList.remove(...ThemeIcon.asClassNameArray(icon(element)));
708
- element.usedReferencesExpanded = !element.usedReferencesExpanded;
709
- iconElement.classList.add(...ThemeIcon.asClassNameArray(icon(element)));
710
- container.classList.toggle('chat-used-context-collapsed', !element.usedReferencesExpanded);
711
- this.updateItemHeight(templateData);
712
- this.updateAriaLabel(collapseButton.element, referencesLabel, element.usedReferencesExpanded);
713
- }));
714
- const ref = listDisposables.add(this._contentReferencesListPool.get());
715
- const list = ref.object;
716
- container.appendChild(list.getHTMLElement().parentElement);
717
- listDisposables.add(list.onDidOpen((e) => {
718
- if (e.element && 'reference' in e.element) {
719
- const uriOrLocation = 'variableName' in e.element.reference ? e.element.reference.value : e.element.reference;
720
- const uri = URI.isUri(uriOrLocation) ? uriOrLocation :
721
- uriOrLocation?.uri;
722
- if (uri) {
723
- this.openerService.open(uri, {
724
- fromUserGesture: true,
725
- editorOptions: {
726
- ...e.editorOptions,
727
- ...{
728
- selection: uriOrLocation && 'range' in uriOrLocation ? uriOrLocation.range : undefined
729
- }
730
- }
731
- });
732
- }
733
- }
734
- }));
735
- listDisposables.add(list.onContextMenu((e) => {
736
- e.browserEvent.preventDefault();
737
- e.browserEvent.stopPropagation();
738
- }));
739
- const maxItemsShown = 6;
740
- const itemsShown = Math.min(data.length, maxItemsShown);
741
- const height = itemsShown * 22;
742
- list.layout(height);
743
- list.getHTMLElement().style.height = `${height}px`;
744
- list.splice(0, list.length, data);
544
+ getDataForProgressiveRender(element) {
545
+ const renderData = element.renderData ?? { lastRenderTime: 0, renderedWordCount: 0 };
546
+ const rate = this.getProgressiveRenderRate(element);
547
+ const numWordsToRender = renderData.lastRenderTime === 0 ?
548
+ 1 :
549
+ renderData.renderedWordCount +
550
+ Math.floor((Date.now() - renderData.lastRenderTime) / 1000 * rate);
745
551
  return {
746
- element: container,
747
- dispose: () => {
748
- listDisposables.dispose();
749
- }
552
+ numWordsToRender,
553
+ rate
750
554
  };
751
555
  }
752
- updateAriaLabel(element, label, expanded) {
753
- element.ariaLabel = expanded ? ( localizeWithPath(_moduleId, 4, "{0}, expanded", label)) : ( localizeWithPath(_moduleId, 5, "{0}, collapsed", label));
556
+ diff(renderedParts, contentToRender, element) {
557
+ const diff = [];
558
+ for (let i = 0; i < contentToRender.length; i++) {
559
+ const content = contentToRender[i];
560
+ const renderedPart = renderedParts[i];
561
+ if (!renderedPart || !renderedPart.hasSameContent(content, contentToRender.slice(i + 1), element)) {
562
+ diff.push(content);
563
+ }
564
+ else {
565
+ diff.push(null);
566
+ }
567
+ }
568
+ return diff;
754
569
  }
755
- renderProgressTask(task, showSpinner, element, templateData) {
756
- if (!isResponseVM(element)) {
757
- return;
570
+ renderChatContentPart(content, templateData, context) {
571
+ if (content.kind === 'treeData') {
572
+ return this.renderTreeData(content, templateData, context);
758
573
  }
759
- if (task.progress.length) {
760
- const refs = this.renderContentReferencesListData(task, task.progress, element, templateData);
761
- const node = $$1('.chat-progress-task');
762
- node.appendChild(refs.element);
763
- return { element: node, dispose: refs.dispose };
574
+ else if (content.kind === 'progressMessage') {
575
+ return this.instantiationService.createInstance(ChatProgressContentPart, content, this.renderer, context);
764
576
  }
765
- return this.renderProgressMessage(task, showSpinner);
766
- }
767
- renderProgressMessage(progress, showSpinner) {
768
- if (showSpinner) {
769
- alert(progress.content.value);
577
+ else if (content.kind === 'progressTask') {
578
+ return this.renderProgressTask(content, templateData, context);
770
579
  }
771
- const codicon = showSpinner ? ThemeIcon.modify(Codicon.loading, 'spin').id : Codicon.check.id;
772
- const markdown = ( (new MarkdownString(`$(${codicon}) ${progress.content.value}`, {
773
- supportThemeIcons: true
774
- })));
775
- const result = this.renderer.render(markdown);
776
- result.element.classList.add('progress-step');
777
- return result;
778
- }
779
- renderCommandButton(element, commandButton) {
780
- const container = $('.chat-command-button');
781
- const disposables = ( (new DisposableStore()));
782
- const enabled = !isResponseVM(element) || !element.isStale;
783
- const tooltip = enabled ?
784
- commandButton.command.tooltip :
785
- ( localizeWithPath(_moduleId, 6, "Button not available in restored chat"));
786
- const button = disposables.add(( (new Button(container, { ...defaultButtonStyles, supportIcons: true, title: tooltip }))));
787
- button.label = commandButton.command.title;
788
- button.enabled = enabled;
789
- disposables.add(button.onDidClick(() => this.commandService.executeCommand(commandButton.command.id, ...(commandButton.command.arguments ?? []))));
790
- return {
791
- dispose() {
792
- disposables.dispose();
793
- },
794
- element: container
795
- };
796
- }
797
- renderNotification(kind, content) {
798
- const container = $('.chat-notification-widget');
799
- let icon;
800
- let iconClass;
801
- switch (kind) {
802
- case 'warning':
803
- icon = Codicon.warning;
804
- iconClass = '.chat-warning-codicon';
805
- break;
806
- case 'error':
807
- icon = Codicon.error;
808
- iconClass = '.chat-error-codicon';
809
- break;
810
- case 'info':
811
- icon = Codicon.info;
812
- iconClass = '.chat-info-codicon';
813
- break;
580
+ else if (content.kind === 'command') {
581
+ return this.instantiationService.createInstance(ChatCommandButtonContentPart, content, context);
814
582
  }
815
- container.appendChild($(iconClass, undefined, renderIcon(icon)));
816
- const markdownContent = this.renderer.render(content);
817
- container.appendChild(markdownContent.element);
818
- return {
819
- element: container,
820
- dispose() { markdownContent.dispose(); }
821
- };
583
+ else if (content.kind === 'textEditGroup') {
584
+ return this.renderTextEdit(context, content, templateData);
585
+ }
586
+ else if (content.kind === 'confirmation') {
587
+ return this.renderConfirmation(context, content, templateData);
588
+ }
589
+ else if (content.kind === 'warning') {
590
+ return this.instantiationService.createInstance(ChatWarningContentPart, 'warning', content.content, this.renderer);
591
+ }
592
+ else if (content.kind === 'markdownContent') {
593
+ return this.renderMarkdown(content.content, templateData, context);
594
+ }
595
+ else if (content.kind === 'references') {
596
+ return this.renderContentReferencesListData(content, undefined, context, templateData);
597
+ }
598
+ return undefined;
822
599
  }
823
- renderConfirmation(element, confirmation, templateData) {
824
- const store = ( (new DisposableStore()));
825
- const confirmationWidget = store.add(this.instantiationService.createInstance(ChatConfirmationWidget, confirmation.title, confirmation.message, [
826
- { label: ( localizeWithPath(_moduleId, 7, "Accept")), data: confirmation.data },
827
- { label: ( localizeWithPath(_moduleId, 8, "Dismiss")), data: confirmation.data, isSecondary: true },
828
- ]));
829
- confirmationWidget.setShowButtons(!confirmation.isUsed);
830
- store.add(confirmationWidget.onDidClick(async (e) => {
831
- if (isResponseVM(element)) {
832
- const prompt = `${e.label}: "${confirmation.title}"`;
833
- const data = e.isSecondary ?
834
- { rejectedConfirmationData: [e.data] } :
835
- { acceptedConfirmationData: [e.data] };
836
- data.agentId = element.agent?.id;
837
- if (await this.chatService.sendRequest(element.sessionId, prompt, data)) {
838
- confirmation.isUsed = true;
839
- confirmationWidget.setShowButtons(false);
840
- this.updateItemHeight(templateData);
841
- }
842
- }
600
+ renderTreeData(content, templateData, context) {
601
+ const data = content.treeData;
602
+ const treeDataIndex = context.preceedingContentParts.filter(part => part instanceof ChatTreeContentPart).length;
603
+ const treePart = this.instantiationService.createInstance(ChatTreeContentPart, data, context.element, this._treePool, treeDataIndex);
604
+ treePart.addDisposable(treePart.onDidChangeHeight(() => {
605
+ this.updateItemHeight(templateData);
843
606
  }));
844
- return {
845
- element: confirmationWidget.domNode,
846
- dispose() { store.dispose(); }
847
- };
848
- }
849
- renderTextEdit(element, chatTextEdit, templateData) {
850
- if (this.rendererOptions.renderTextEditsAsSummary?.(chatTextEdit.uri)) {
851
- if (isResponseVM(element) && element.response.value.every(item => item.kind === 'textEditGroup')) {
852
- return {
853
- element: $('.interactive-edits-summary', undefined, !element.isComplete ? ( localizeWithPath(_moduleId, 9, "Making changes...")) : ( localizeWithPath(_moduleId, 10, "Made changes."))),
854
- dispose() { }
855
- };
856
- }
857
- return undefined;
607
+ if (isResponseVM(context.element)) {
608
+ const fileTreeFocusInfo = {
609
+ treeDataId: ( (data.uri.toString())),
610
+ treeIndex: treeDataIndex,
611
+ focus() {
612
+ treePart.domFocus();
613
+ }
614
+ };
615
+ treePart.addDisposable(treePart.onDidFocus(() => {
616
+ this.focusedFileTreesByResponseId.set(context.element.id, fileTreeFocusInfo.treeIndex);
617
+ }));
618
+ const fileTrees = this.fileTreesByResponseId.get(context.element.id) ?? [];
619
+ fileTrees.push(fileTreeFocusInfo);
620
+ this.fileTreesByResponseId.set(context.element.id, distinct(fileTrees, (v) => v.treeDataId));
621
+ treePart.addDisposable(toDisposable(() => this.fileTreesByResponseId.set(context.element.id, fileTrees.filter(v => v.treeDataId !== ( (data.uri.toString()))))));
858
622
  }
859
- const store = ( (new DisposableStore()));
860
- const cts = ( (new CancellationTokenSource()));
861
- let isDisposed = false;
862
- store.add(toDisposable(() => {
863
- isDisposed = true;
864
- cts.dispose(true);
865
- }));
866
- const ref = this._diffEditorPool.get();
867
- store.add(ref.object.onDidChangeContentHeight(() => {
868
- ref.object.layout(this._currentLayoutWidth);
623
+ return treePart;
624
+ }
625
+ renderContentReferencesListData(references, labelOverride, context, templateData) {
626
+ const referencesPart = this.instantiationService.createInstance(ChatReferencesContentPart, references.references, labelOverride, context.element, this._contentReferencesListPool);
627
+ referencesPart.addDisposable(referencesPart.onDidChangeHeight(() => {
869
628
  this.updateItemHeight(templateData);
870
629
  }));
871
- const data = {
872
- element,
873
- edit: chatTextEdit,
874
- diffData: (async () => {
875
- const ref = await this.textModelService.createModelReference(chatTextEdit.uri);
876
- if (isDisposed) {
877
- ref.dispose();
878
- return;
879
- }
880
- store.add(ref);
881
- const original = ref.object.textEditorModel;
882
- let originalSha1 = '';
883
- if (chatTextEdit.state) {
884
- originalSha1 = chatTextEdit.state.sha1;
885
- }
886
- else {
887
- const sha1 = ( (new DefaultModelSHA1Computer()));
888
- if (sha1.canComputeSHA1(original)) {
889
- originalSha1 = sha1.computeSHA1(original);
890
- chatTextEdit.state = { sha1: originalSha1, applied: 0 };
891
- }
892
- }
893
- const modified = this.modelService.createModel(createTextBufferFactoryFromSnapshot(original.createSnapshot()), { languageId: original.getLanguageId(), onDidChange: Event.None }, ( (URI.from(
894
- { scheme: Schemas.vscodeChatCodeBlock, path: original.uri.path, query: generateUuid() }
895
- ))), false);
896
- const modRef = await this.textModelService.createModelReference(modified.uri);
897
- store.add(modRef);
898
- const editGroups = [];
899
- if (isResponseVM(element)) {
900
- const chatModel = this.chatService.getSession(element.sessionId);
901
- for (const request of chatModel.getRequests()) {
902
- if (!request.response) {
903
- continue;
904
- }
905
- for (const item of request.response.response.value) {
906
- if (item.kind !== 'textEditGroup' || item.state?.applied || !isEqual(item.uri, chatTextEdit.uri)) {
907
- continue;
908
- }
909
- for (const group of item.edits) {
910
- const edits = ( (group.map(TextEdit.asEditOperation)));
911
- editGroups.push(edits);
912
- }
913
- }
914
- if (request.response === element.model) {
915
- break;
916
- }
917
- }
918
- }
919
- for (const edits of editGroups) {
920
- modified.pushEditOperations(null, edits, () => null);
921
- }
922
- return {
923
- modified,
924
- original,
925
- originalSha1
926
- };
927
- })()
928
- };
929
- ref.object.render(data, this._currentLayoutWidth, cts.token);
930
- return {
931
- element: ref.object.element,
932
- dispose() {
933
- store.dispose();
934
- ref.dispose();
935
- },
936
- };
630
+ return referencesPart;
937
631
  }
938
- renderMarkdown(markdown, element, templateData, fillInIncompleteTokens = false, codeBlockStartIndex = 0) {
939
- const disposables = ( (new DisposableStore()));
940
- const orderedDisposablesList = [];
941
- const codeblocks = [];
942
- let codeBlockIndex = codeBlockStartIndex;
943
- const result = this.renderer.render(markdown, {
944
- fillInIncompleteTokens,
945
- codeBlockRendererSync: (languageId, text) => {
946
- const index = codeBlockIndex++;
947
- let textModel;
948
- let range;
949
- let vulns;
950
- if (equalsIgnoreCase(languageId, localFileLanguageId)) {
951
- try {
952
- const parsedBody = parseLocalFileData(text);
953
- range = parsedBody.range && Range.lift(parsedBody.range);
954
- textModel = this.textModelService.createModelReference(parsedBody.uri).then(ref => ref.object);
955
- }
956
- catch (e) {
957
- return $('div');
958
- }
959
- }
960
- else {
961
- if (!isRequestVM(element) && !isResponseVM(element)) {
962
- console.error('Trying to render code block in welcome', element.id, index);
963
- return $('div');
964
- }
965
- const sessionId = isResponseVM(element) || isRequestVM(element) ? element.sessionId : '';
966
- const modelEntry = this.codeBlockModelCollection.getOrCreate(sessionId, element, index);
967
- vulns = modelEntry.vulns;
968
- textModel = modelEntry.model;
969
- }
970
- const hideToolbar = isResponseVM(element) && element.errorDetails?.responseIsFiltered;
971
- const ref = this.renderCodeBlock({ languageId, textModel, codeBlockIndex: index, element, range, hideToolbar, parentContextKeyService: templateData.contextKeyService, vulns }, text);
972
- disposables.add(ref.object.onDidChangeContentHeight(() => {
973
- ref.object.layout(this._currentLayoutWidth);
974
- this.updateItemHeight(templateData);
975
- }));
976
- if (isResponseVM(element)) {
977
- const info = {
978
- codeBlockIndex: index,
979
- element,
980
- focus() {
981
- ref.object.focus();
982
- }
983
- };
984
- codeblocks.push(info);
985
- if (ref.object.uri) {
986
- const uri = ref.object.uri;
987
- this.codeBlocksByEditorUri.set(uri, info);
988
- disposables.add(toDisposable(() => this.codeBlocksByEditorUri.delete(uri)));
989
- }
990
- }
991
- orderedDisposablesList.push(ref);
992
- return ref.object.element;
993
- },
994
- asyncRenderCallback: () => this.updateItemHeight(templateData),
995
- });
996
- if (isResponseVM(element)) {
997
- this.codeBlocksByResponseId.set(element.id, codeblocks);
998
- disposables.add(toDisposable(() => this.codeBlocksByResponseId.delete(element.id)));
632
+ renderProgressTask(task, templateData, context) {
633
+ if (!isResponseVM(context.element)) {
634
+ return;
999
635
  }
1000
- disposables.add(this.markdownDecorationsRenderer.walkTreeAndAnnotateReferenceLinks(result.element));
1001
- orderedDisposablesList.reverse().forEach(d => disposables.add(d));
1002
- return {
1003
- codeBlockCount: codeBlockIndex - codeBlockStartIndex,
1004
- element: result.element,
1005
- dispose() {
1006
- result.dispose();
1007
- disposables.dispose();
1008
- }
1009
- };
636
+ const taskPart = this.instantiationService.createInstance(ChatTaskContentPart, task, this._contentReferencesListPool, this.renderer, context);
637
+ taskPart.addDisposable(taskPart.onDidChangeHeight(() => {
638
+ this.updateItemHeight(templateData);
639
+ }));
640
+ return taskPart;
1010
641
  }
1011
- renderCodeBlock(data, text) {
1012
- const ref = this._editorPool.get();
1013
- const editorInfo = ref.object;
1014
- if (isResponseVM(data.element)) {
1015
- this.codeBlockModelCollection.update(data.element.sessionId, data.element, data.codeBlockIndex, { text, languageId: data.languageId });
1016
- }
1017
- editorInfo.render(data, this._currentLayoutWidth, this.rendererOptions.editableCodeBlock);
1018
- return ref;
642
+ renderConfirmation(context, confirmation, templateData) {
643
+ const part = this.instantiationService.createInstance(ChatConfirmationContentPart, confirmation, context);
644
+ part.addDisposable(part.onDidChangeHeight(() => this.updateItemHeight(templateData)));
645
+ return part;
1019
646
  }
1020
- getDataForProgressiveRender(element, data, renderData) {
1021
- const rate = this.getProgressiveRenderRate(element);
1022
- const numWordsToRender = renderData.lastRenderTime === 0 ?
1023
- 1 :
1024
- renderData.renderedWordCount +
1025
- Math.floor((Date.now() - renderData.lastRenderTime) / 1000 * rate);
1026
- if (numWordsToRender === renderData.renderedWordCount) {
1027
- return undefined;
1028
- }
1029
- return {
1030
- ...getNWords(data.value, numWordsToRender),
1031
- rate
1032
- };
647
+ renderTextEdit(context, chatTextEdit, templateData) {
648
+ const textEditPart = this.instantiationService.createInstance(ChatTextEditContentPart, chatTextEdit, context, this.rendererOptions, this._diffEditorPool, this._currentLayoutWidth);
649
+ textEditPart.addDisposable(textEditPart.onDidChangeHeight(() => {
650
+ textEditPart.layout(this._currentLayoutWidth);
651
+ this.updateItemHeight(templateData);
652
+ }));
653
+ return textEditPart;
654
+ }
655
+ renderMarkdown(markdown, templateData, context) {
656
+ const element = context.element;
657
+ const fillInIncompleteTokens = isResponseVM(element) && (!element.isComplete || element.isCanceled || element.errorDetails?.responseIsFiltered || element.errorDetails?.responseIsIncomplete || !!element.renderData);
658
+ const codeBlockStartIndex = context.preceedingContentParts.reduce((acc, part) => acc + (part instanceof ChatMarkdownContentPart ? part.codeblocks.length : 0), 0);
659
+ const markdownPart = this.instantiationService.createInstance(ChatMarkdownContentPart, markdown, context, this._editorPool, fillInIncompleteTokens, codeBlockStartIndex, this.renderer, this._currentLayoutWidth, this.codeBlockModelCollection, this.rendererOptions);
660
+ markdownPart.addDisposable(markdownPart.onDidChangeHeight(() => {
661
+ markdownPart.layout(this._currentLayoutWidth);
662
+ this.updateItemHeight(templateData);
663
+ }));
664
+ const codeBlocksByResponseId = this.codeBlocksByResponseId.get(element.id) ?? [];
665
+ this.codeBlocksByResponseId.set(element.id, codeBlocksByResponseId);
666
+ markdownPart.addDisposable(toDisposable(() => {
667
+ const codeBlocksByResponseId = this.codeBlocksByResponseId.get(element.id);
668
+ if (codeBlocksByResponseId) {
669
+ markdownPart.codeblocks.forEach((info, i) => delete codeBlocksByResponseId[codeBlockStartIndex + i]);
670
+ }
671
+ }));
672
+ markdownPart.codeblocks.forEach((info, i) => {
673
+ codeBlocksByResponseId[codeBlockStartIndex + i] = info;
674
+ if (info.uri) {
675
+ const uri = info.uri;
676
+ this.codeBlocksByEditorUri.set(uri, info);
677
+ markdownPart.addDisposable(toDisposable(() => this.codeBlocksByEditorUri.delete(uri)));
678
+ }
679
+ });
680
+ return markdownPart;
1033
681
  }
1034
682
  disposeElement(node, index, templateData) {
683
+ this.traceLayout('disposeElement', `Disposing element, index=${index}`);
684
+ if (templateData.renderedParts) {
685
+ try {
686
+ dispose(coalesce(templateData.renderedParts));
687
+ templateData.renderedParts = undefined;
688
+ clearNode(templateData.value);
689
+ }
690
+ catch (err) {
691
+ throw err;
692
+ }
693
+ }
694
+ templateData.currentElement = undefined;
1035
695
  templateData.elementDisposables.clear();
1036
696
  }
1037
697
  disposeTemplate(templateData) {
@@ -1042,14 +702,10 @@ ChatListItemRenderer = ChatListItemRenderer_1 = ( (__decorate([
1042
702
  ( (__param(6, IInstantiationService))),
1043
703
  ( (__param(7, IConfigurationService))),
1044
704
  ( (__param(8, ILogService))),
1045
- ( (__param(9, IOpenerService))),
1046
- ( (__param(10, IContextKeyService))),
1047
- ( (__param(11, IThemeService))),
1048
- ( (__param(12, ICommandService))),
1049
- ( (__param(13, ITextModelService))),
1050
- ( (__param(14, IModelService))),
1051
- ( (__param(15, IHoverService))),
1052
- ( (__param(16, IChatService)))
705
+ ( (__param(9, IContextKeyService))),
706
+ ( (__param(10, IThemeService))),
707
+ ( (__param(11, ICommandService))),
708
+ ( (__param(12, IHoverService)))
1053
709
  ], ChatListItemRenderer)));
1054
710
  let ChatListDelegate = class ChatListDelegate {
1055
711
  constructor(defaultElementHeight, logService) {
@@ -1077,393 +733,10 @@ let ChatListDelegate = class ChatListDelegate {
1077
733
  ChatListDelegate = ( (__decorate([
1078
734
  ( (__param(1, ILogService)))
1079
735
  ], ChatListDelegate)));
1080
- let EditorPool = class EditorPool extends Disposable {
1081
- inUse() {
1082
- return this._pool.inUse;
1083
- }
1084
- constructor(options, delegate, overflowWidgetsDomNode, instantiationService) {
1085
- super();
1086
- this._pool = this._register(( (new ResourcePool(() => {
1087
- return instantiationService.createInstance(CodeBlockPart, options, MenuId.ChatCodeBlock, delegate, overflowWidgetsDomNode);
1088
- }))));
1089
- }
1090
- get() {
1091
- const codeBlock = this._pool.get();
1092
- let stale = false;
1093
- return {
1094
- object: codeBlock,
1095
- isStale: () => stale,
1096
- dispose: () => {
1097
- codeBlock.reset();
1098
- stale = true;
1099
- this._pool.release(codeBlock);
1100
- }
1101
- };
1102
- }
1103
- };
1104
- EditorPool = ( (__decorate([
1105
- ( (__param(3, IInstantiationService)))
1106
- ], EditorPool)));
1107
- let DiffEditorPool = class DiffEditorPool extends Disposable {
1108
- inUse() {
1109
- return this._pool.inUse;
1110
- }
1111
- constructor(options, delegate, overflowWidgetsDomNode, instantiationService) {
1112
- super();
1113
- this._pool = this._register(( (new ResourcePool(() => {
1114
- return instantiationService.createInstance(CodeCompareBlockPart, options, MenuId.ChatCompareBlock, delegate, overflowWidgetsDomNode);
1115
- }))));
1116
- }
1117
- get() {
1118
- const codeBlock = this._pool.get();
1119
- let stale = false;
1120
- return {
1121
- object: codeBlock,
1122
- isStale: () => stale,
1123
- dispose: () => {
1124
- codeBlock.reset();
1125
- stale = true;
1126
- this._pool.release(codeBlock);
1127
- }
1128
- };
1129
- }
1130
- };
1131
- DiffEditorPool = ( (__decorate([
1132
- ( (__param(3, IInstantiationService)))
1133
- ], DiffEditorPool)));
1134
- let TreePool = class TreePool extends Disposable {
1135
- get inUse() {
1136
- return this._pool.inUse;
1137
- }
1138
- constructor(_onDidChangeVisibility, instantiationService, configService, themeService) {
1139
- super();
1140
- this._onDidChangeVisibility = _onDidChangeVisibility;
1141
- this.instantiationService = instantiationService;
1142
- this.configService = configService;
1143
- this.themeService = themeService;
1144
- this._pool = this._register(( (new ResourcePool(() => this.treeFactory()))));
1145
- }
1146
- treeFactory() {
1147
- const resourceLabels = this._register(this.instantiationService.createInstance(ResourceLabels, { onDidChangeVisibility: this._onDidChangeVisibility }));
1148
- const container = $('.interactive-response-progress-tree');
1149
- this._register(createFileIconThemableTreeContainerScope(container, this.themeService));
1150
- const tree = this.instantiationService.createInstance((WorkbenchCompressibleAsyncDataTree), 'ChatListRenderer', container, ( (new ChatListTreeDelegate())), ( (new ChatListTreeCompressionDelegate())), [( (new ChatListTreeRenderer(resourceLabels, this.configService.getValue('explorer.decorations'))))], ( (new ChatListTreeDataSource())), {
1151
- collapseByDefault: () => false,
1152
- expandOnlyOnTwistieClick: () => false,
1153
- identityProvider: {
1154
- getId: (e) => ( (e.uri.toString()))
1155
- },
1156
- accessibilityProvider: {
1157
- getAriaLabel: (element) => element.label,
1158
- getWidgetAriaLabel: () => ( localizeWithPath(_moduleId, 11, "File Tree"))
1159
- },
1160
- alwaysConsumeMouseWheel: false
1161
- });
1162
- return tree;
1163
- }
1164
- get() {
1165
- const object = this._pool.get();
1166
- let stale = false;
1167
- return {
1168
- object,
1169
- isStale: () => stale,
1170
- dispose: () => {
1171
- stale = true;
1172
- this._pool.release(object);
1173
- }
1174
- };
1175
- }
1176
- };
1177
- TreePool = ( (__decorate([
1178
- ( (__param(1, IInstantiationService))),
1179
- ( (__param(2, IConfigurationService))),
1180
- ( (__param(3, IThemeService)))
1181
- ], TreePool)));
1182
- let ContentReferencesListPool = class ContentReferencesListPool extends Disposable {
1183
- get inUse() {
1184
- return this._pool.inUse;
1185
- }
1186
- constructor(_onDidChangeVisibility, instantiationService, themeService) {
1187
- super();
1188
- this._onDidChangeVisibility = _onDidChangeVisibility;
1189
- this.instantiationService = instantiationService;
1190
- this.themeService = themeService;
1191
- this._pool = this._register(( (new ResourcePool(() => this.listFactory()))));
1192
- }
1193
- listFactory() {
1194
- const resourceLabels = this._register(this.instantiationService.createInstance(ResourceLabels, { onDidChangeVisibility: this._onDidChangeVisibility }));
1195
- const container = $('.chat-used-context-list');
1196
- this._register(createFileIconThemableTreeContainerScope(container, this.themeService));
1197
- const list = this.instantiationService.createInstance((WorkbenchList), 'ChatListRenderer', container, ( (new ContentReferencesListDelegate())), [this.instantiationService.createInstance(ContentReferencesListRenderer, resourceLabels)], {
1198
- alwaysConsumeMouseWheel: false,
1199
- accessibilityProvider: {
1200
- getAriaLabel: (element) => {
1201
- if (element.kind === 'warning') {
1202
- return element.content.value;
1203
- }
1204
- const reference = element.reference;
1205
- if ('variableName' in reference) {
1206
- return reference.variableName;
1207
- }
1208
- else if (URI.isUri(reference)) {
1209
- return basename(reference.path);
1210
- }
1211
- else {
1212
- return basename(reference.uri.path);
1213
- }
1214
- },
1215
- getWidgetAriaLabel: () => ( localizeWithPath(_moduleId, 12, "Used References"))
1216
- },
1217
- dnd: {
1218
- getDragURI: (element) => {
1219
- if (element.kind === 'warning') {
1220
- return null;
1221
- }
1222
- const { reference } = element;
1223
- if ('variableName' in reference) {
1224
- return null;
1225
- }
1226
- else if (URI.isUri(reference)) {
1227
- return (
1228
- (reference.toString())
1229
- );
1230
- }
1231
- else {
1232
- return (
1233
- (reference.uri.toString())
1234
- );
1235
- }
1236
- },
1237
- dispose: () => { },
1238
- onDragOver: () => false,
1239
- drop: () => { },
1240
- },
1241
- });
1242
- return list;
1243
- }
1244
- get() {
1245
- const object = this._pool.get();
1246
- let stale = false;
1247
- return {
1248
- object,
1249
- isStale: () => stale,
1250
- dispose: () => {
1251
- stale = true;
1252
- this._pool.release(object);
1253
- }
1254
- };
1255
- }
1256
- };
1257
- ContentReferencesListPool = ( (__decorate([
1258
- ( (__param(1, IInstantiationService))),
1259
- ( (__param(2, IThemeService)))
1260
- ], ContentReferencesListPool)));
1261
- class ContentReferencesListDelegate {
1262
- getHeight(element) {
1263
- return 22;
1264
- }
1265
- getTemplateId(element) {
1266
- return ContentReferencesListRenderer.TEMPLATE_ID;
1267
- }
1268
- }
1269
- let ContentReferencesListRenderer = class ContentReferencesListRenderer {
1270
- static { ContentReferencesListRenderer_1 = this; }
1271
- static { this.TEMPLATE_ID = 'contentReferencesListRenderer'; }
1272
- constructor(labels, themeService, chatVariablesService) {
1273
- this.labels = labels;
1274
- this.themeService = themeService;
1275
- this.chatVariablesService = chatVariablesService;
1276
- this.templateId = ContentReferencesListRenderer_1.TEMPLATE_ID;
1277
- }
1278
- renderTemplate(container) {
1279
- const templateDisposables = ( (new DisposableStore()));
1280
- const label = templateDisposables.add(this.labels.create(container, { supportHighlights: true }));
1281
- return { templateDisposables, label };
1282
- }
1283
- getReferenceIcon(data) {
1284
- if (ThemeIcon.isThemeIcon(data.iconPath)) {
1285
- return data.iconPath;
1286
- }
1287
- else {
1288
- return this.themeService.getColorTheme().type === ColorScheme.DARK && data.iconPath?.dark
1289
- ? data.iconPath?.dark
1290
- : data.iconPath?.light;
1291
- }
1292
- }
1293
- renderElement(data, index, templateData, height) {
1294
- if (data.kind === 'warning') {
1295
- templateData.label.setResource({ name: data.content.value }, { icon: Codicon.warning });
1296
- return;
1297
- }
1298
- const reference = data.reference;
1299
- const icon = this.getReferenceIcon(data);
1300
- templateData.label.element.style.display = 'flex';
1301
- if ('variableName' in reference) {
1302
- if (reference.value) {
1303
- const uri = URI.isUri(reference.value) ? reference.value : reference.value.uri;
1304
- templateData.label.setResource({
1305
- resource: uri,
1306
- name: basenameOrAuthority(uri),
1307
- description: `#${reference.variableName}`,
1308
- range: 'range' in reference.value ? reference.value.range : undefined,
1309
- }, { icon });
1310
- }
1311
- else {
1312
- const variable = this.chatVariablesService.getVariable(reference.variableName);
1313
- templateData.label.setLabel(`#${reference.variableName}`, undefined, { title: variable?.description });
1314
- }
1315
- }
1316
- else {
1317
- const uri = 'uri' in reference ? reference.uri : reference;
1318
- if (matchesSomeScheme(uri, Schemas.mailto, Schemas.http, Schemas.https)) {
1319
- templateData.label.setResource({ resource: uri, name: ( (uri.toString())) }, { icon: icon ?? Codicon.globe });
1320
- }
1321
- else {
1322
- templateData.label.setFile(uri, {
1323
- fileKind: FileKind.FILE,
1324
- fileDecorations: { badges: false, colors: false },
1325
- range: 'range' in reference ? reference.range : undefined
1326
- });
1327
- }
1328
- }
1329
- }
1330
- disposeTemplate(templateData) {
1331
- templateData.templateDisposables.dispose();
1332
- }
1333
- };
1334
- ContentReferencesListRenderer = ContentReferencesListRenderer_1 = ( (__decorate([
1335
- ( (__param(1, IThemeService))),
1336
- ( (__param(2, IChatVariablesService)))
1337
- ], ContentReferencesListRenderer)));
1338
- class ResourcePool extends Disposable {
1339
- get inUse() {
1340
- return this._inUse;
1341
- }
1342
- constructor(_itemFactory) {
1343
- super();
1344
- this._itemFactory = _itemFactory;
1345
- this.pool = [];
1346
- this._inUse = ( (new Set()));
1347
- }
1348
- get() {
1349
- if (this.pool.length > 0) {
1350
- const item = this.pool.pop();
1351
- this._inUse.add(item);
1352
- return item;
1353
- }
1354
- const item = this._register(this._itemFactory());
1355
- this._inUse.add(item);
1356
- return item;
1357
- }
1358
- release(item) {
1359
- this._inUse.delete(item);
1360
- this.pool.push(item);
1361
- }
1362
- }
1363
736
  class ChatVoteButton extends MenuEntryActionViewItem {
1364
737
  render(container) {
1365
738
  super.render(container);
1366
739
  container.classList.toggle('checked', this.action.checked);
1367
740
  }
1368
741
  }
1369
- class ChatListTreeDelegate {
1370
- static { this.ITEM_HEIGHT = 22; }
1371
- getHeight(element) {
1372
- return ChatListTreeDelegate.ITEM_HEIGHT;
1373
- }
1374
- getTemplateId(element) {
1375
- return 'chatListTreeTemplate';
1376
- }
1377
- }
1378
- class ChatListTreeCompressionDelegate {
1379
- isIncompressible(element) {
1380
- return !element.children;
1381
- }
1382
- }
1383
- class ChatListTreeRenderer {
1384
- constructor(labels, decorations) {
1385
- this.labels = labels;
1386
- this.decorations = decorations;
1387
- this.templateId = 'chatListTreeTemplate';
1388
- }
1389
- renderCompressedElements(element, index, templateData, height) {
1390
- templateData.label.element.style.display = 'flex';
1391
- const label = ( (element.element.elements.map((e) => e.label)));
1392
- templateData.label.setResource({ resource: element.element.elements[0].uri, name: label }, {
1393
- title: element.element.elements[0].label,
1394
- fileKind: element.children ? FileKind.FOLDER : FileKind.FILE,
1395
- extraClasses: ['explorer-item'],
1396
- fileDecorations: this.decorations
1397
- });
1398
- }
1399
- renderTemplate(container) {
1400
- const templateDisposables = ( (new DisposableStore()));
1401
- const label = templateDisposables.add(this.labels.create(container, { supportHighlights: true }));
1402
- return { templateDisposables, label };
1403
- }
1404
- renderElement(element, index, templateData, height) {
1405
- templateData.label.element.style.display = 'flex';
1406
- if (!element.children.length && element.element.type !== FileType.Directory) {
1407
- templateData.label.setFile(element.element.uri, {
1408
- fileKind: FileKind.FILE,
1409
- hidePath: true,
1410
- fileDecorations: this.decorations,
1411
- });
1412
- }
1413
- else {
1414
- templateData.label.setResource({ resource: element.element.uri, name: element.element.label }, {
1415
- title: element.element.label,
1416
- fileKind: FileKind.FOLDER,
1417
- fileDecorations: this.decorations
1418
- });
1419
- }
1420
- }
1421
- disposeTemplate(templateData) {
1422
- templateData.templateDisposables.dispose();
1423
- }
1424
- }
1425
- class ChatListTreeDataSource {
1426
- hasChildren(element) {
1427
- return !!element.children;
1428
- }
1429
- async getChildren(element) {
1430
- return element.children ?? [];
1431
- }
1432
- }
1433
- function isInteractiveProgressTreeData(item) {
1434
- return 'label' in item;
1435
- }
1436
- function contentToMarkdown(str) {
1437
- return typeof str === 'string' ? { value: str } : str;
1438
- }
1439
- function isProgressMessage(item) {
1440
- return item && 'kind' in item && item.kind === 'progressMessage';
1441
- }
1442
- function isProgressTaskRenderData(item) {
1443
- return item && 'isSettled' in item;
1444
- }
1445
- function isWarningRenderData(item) {
1446
- return item && 'kind' in item && item.kind === 'warning';
1447
- }
1448
- function isProgressMessageRenderData(item) {
1449
- return item && 'isAtEndOfResponse' in item;
1450
- }
1451
- function isCommandButtonRenderData(item) {
1452
- return item && 'kind' in item && item.kind === 'command';
1453
- }
1454
- function isTextEditRenderData(item) {
1455
- return item && 'kind' in item && item.kind === 'textEditGroup';
1456
- }
1457
- function isConfirmationRenderData(item) {
1458
- return item && 'kind' in item && item.kind === 'confirmation';
1459
- }
1460
- function isMarkdownRenderData(item) {
1461
- return item && 'renderedWordCount' in item;
1462
- }
1463
- function onlyProgressMessagesAfterI(items, i) {
1464
- return items.slice(i).every(isProgressMessage);
1465
- }
1466
- function onlyProgressMessageRenderDatasAfterI(items, i) {
1467
- return items.slice(i).every(isProgressMessageRenderData);
1468
- }
1469
742
  export { ChatListDelegate, ChatListItemRenderer };