@codingame/monaco-vscode-api 1.85.0 → 1.85.2

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 (298) hide show
  1. package/README.md +31 -13
  2. package/contributions.js +1 -0
  3. package/missing-services.js +396 -68
  4. package/monaco-editor-treemending.patch +957 -950
  5. package/package.json +8 -7
  6. package/service-override/tools/editor.js +1 -1
  7. package/services.js +10 -6
  8. package/vscode/src/vs/base/browser/ui/tree/treeDefaults.js +14 -0
  9. package/vscode/src/vs/base/common/jsonFormatter.js +8 -1
  10. package/vscode/src/vs/platform/actions/browser/buttonbar.js +128 -0
  11. package/vscode/src/vs/platform/extensionManagement/common/extensionEnablementService.js +140 -0
  12. package/vscode/src/vs/platform/extensionManagement/common/extensionManagement.js +2 -1
  13. package/vscode/src/vs/platform/extensions/common/extensions.d.ts +1062 -93
  14. package/vscode/src/vs/platform/files/common/inMemoryFilesystemProvider.js +220 -0
  15. package/vscode/src/vs/platform/layout/browser/zIndexRegistry.js +58 -0
  16. package/vscode/src/vs/platform/quickinput/browser/quickPickPin.js +102 -0
  17. package/vscode/src/vs/platform/terminal/common/capabilities/commandDetectionCapability.js +56 -1
  18. package/vscode/src/vs/platform/userDataSync/common/content.js +9 -0
  19. package/vscode/src/vs/platform/userDataSync/common/settingsMerge.js +514 -0
  20. package/vscode/src/vs/platform/userDataSync/common/userDataSync.js +154 -2
  21. package/vscode/src/vs/platform/userDataSync/common/userDataSyncAccount.js +43 -1
  22. package/vscode/src/vs/platform/userDataSync/common/userDataSyncMachines.js +177 -0
  23. package/vscode/src/vs/workbench/api/common/extHostApiCommands.js +1 -1
  24. package/vscode/src/vs/workbench/api/common/extHostTypeConverters.js +1 -1
  25. package/vscode/src/vs/workbench/api/common/extHostWebview.js +2 -2
  26. package/vscode/src/vs/workbench/browser/actions/layoutActions.js +186 -4
  27. package/vscode/src/vs/workbench/browser/parts/views/checkbox.js +105 -0
  28. package/vscode/src/vs/workbench/browser/parts/views/media/views.css.js +4 -0
  29. package/vscode/src/vs/workbench/browser/parts/views/treeView.js +1614 -0
  30. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityHelp.js +191 -0
  31. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatActions.js +238 -2
  32. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatExecuteActions.js +75 -0
  33. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatQuickInputActions.js +205 -1
  34. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditorInput.js +168 -0
  35. package/vscode/src/vs/workbench/contrib/chat/browser/chatFollowups.js +35 -0
  36. package/vscode/src/vs/workbench/contrib/chat/browser/chatInputPart.js +340 -0
  37. package/vscode/src/vs/workbench/contrib/chat/browser/chatListRenderer.js +1195 -0
  38. package/vscode/src/vs/workbench/contrib/chat/browser/chatMarkdownDecorationsRenderer.js +115 -0
  39. package/vscode/src/vs/workbench/contrib/chat/browser/chatOptions.js +81 -0
  40. package/vscode/src/vs/workbench/contrib/chat/browser/chatSlashCommandContentWidget.css.js +4 -0
  41. package/vscode/src/vs/workbench/contrib/chat/browser/chatSlashCommandContentWidget.js +62 -0
  42. package/vscode/src/vs/workbench/contrib/chat/browser/chatWidget.js +583 -0
  43. package/vscode/src/vs/workbench/contrib/chat/browser/codeBlockPart.css.js +4 -0
  44. package/vscode/src/vs/workbench/contrib/chat/browser/codeBlockPart.js +290 -0
  45. package/vscode/src/vs/workbench/contrib/chat/browser/contrib/chatDynamicVariables.js +167 -0
  46. package/vscode/src/vs/workbench/contrib/chat/browser/media/chat.css.js +4 -0
  47. package/vscode/src/vs/workbench/contrib/chat/common/chatContextKeys.js +6 -1
  48. package/vscode/src/vs/workbench/contrib/chat/common/chatModel.js +562 -0
  49. package/vscode/src/vs/workbench/contrib/chat/common/chatParserTypes.js +31 -1
  50. package/vscode/src/vs/workbench/contrib/chat/common/chatProvider.js +24 -1
  51. package/vscode/src/vs/workbench/contrib/chat/common/chatRequestParser.js +193 -0
  52. package/vscode/src/vs/workbench/contrib/chat/common/chatService.js +22 -1
  53. package/vscode/src/vs/workbench/contrib/chat/common/chatSlashCommands.js +52 -1
  54. package/vscode/src/vs/workbench/contrib/chat/common/chatViewModel.js +258 -0
  55. package/vscode/src/vs/workbench/contrib/chat/common/chatWidgetHistoryService.js +37 -0
  56. package/vscode/src/vs/workbench/contrib/chat/common/chatWordCounter.js +25 -0
  57. package/vscode/src/vs/workbench/contrib/codeEditor/browser/find/simpleFindWidget.css.js +4 -0
  58. package/vscode/src/vs/workbench/contrib/codeEditor/browser/find/simpleFindWidget.js +388 -0
  59. package/vscode/src/vs/workbench/contrib/codeEditor/browser/languageConfigurationExtensionPoint.js +7 -7
  60. package/vscode/src/vs/workbench/contrib/comments/browser/commentColors.js +61 -0
  61. package/vscode/src/vs/workbench/contrib/comments/browser/commentFormActions.js +49 -0
  62. package/vscode/src/vs/workbench/contrib/comments/browser/commentNode.js +647 -0
  63. package/vscode/src/vs/workbench/contrib/comments/browser/commentReply.js +300 -0
  64. package/vscode/src/vs/workbench/contrib/comments/browser/commentThreadAdditionalActions.js +60 -0
  65. package/vscode/src/vs/workbench/contrib/comments/browser/commentThreadBody.js +249 -0
  66. package/vscode/src/vs/workbench/contrib/comments/browser/commentThreadHeader.js +107 -0
  67. package/vscode/src/vs/workbench/contrib/comments/browser/commentThreadWidget.js +333 -0
  68. package/vscode/src/vs/workbench/contrib/comments/browser/media/review.css.js +4 -0
  69. package/vscode/src/vs/workbench/contrib/comments/browser/reactionsAction.js +99 -0
  70. package/vscode/src/vs/workbench/contrib/comments/browser/timestamp.js +55 -0
  71. package/vscode/src/vs/workbench/contrib/comments/common/commentsConfiguration.js +2 -0
  72. package/vscode/src/vs/workbench/contrib/contextmenu/browser/contextmenu.contribution.js +20 -0
  73. package/vscode/src/vs/workbench/contrib/debug/browser/breakpointEditorContribution.js +855 -0
  74. package/vscode/src/vs/workbench/contrib/debug/browser/breakpointWidget.js +410 -0
  75. package/vscode/src/vs/workbench/contrib/debug/browser/breakpointsView.js +1591 -0
  76. package/vscode/src/vs/workbench/contrib/debug/browser/callStackEditorContribution.js +178 -0
  77. package/vscode/src/vs/workbench/contrib/debug/browser/media/breakpointWidget.css.js +4 -0
  78. package/vscode/src/vs/workbench/contrib/debug/browser/media/callStackEditorContribution.css.js +4 -0
  79. package/vscode/src/vs/workbench/contrib/debug/common/debugModel.js +1485 -0
  80. package/vscode/src/vs/workbench/contrib/debug/common/debugSource.js +125 -0
  81. package/vscode/src/vs/workbench/contrib/debug/common/disassemblyViewInput.js +29 -0
  82. package/vscode/src/vs/workbench/contrib/extensions/common/extensionsInput.js +41 -0
  83. package/vscode/src/vs/workbench/contrib/extensions/common/extensionsUtils.js +102 -0
  84. package/vscode/src/vs/workbench/contrib/files/browser/explorerViewlet.js +73 -2
  85. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChat.css.js +4 -0
  86. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatController.js +988 -0
  87. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatLivePreviewWidget.js +431 -0
  88. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSession.js +417 -0
  89. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatStrategies.js +806 -0
  90. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatWidget.js +915 -0
  91. package/vscode/src/vs/workbench/contrib/inlineChat/browser/utils.js +19 -0
  92. package/vscode/src/vs/workbench/contrib/inlineChat/common/inlineChat.js +129 -10
  93. package/vscode/src/vs/workbench/contrib/markdown/browser/markdownDocumentRenderer.js +205 -0
  94. package/vscode/src/vs/workbench/contrib/mergeEditor/browser/mergeEditorInput.js +150 -0
  95. package/vscode/src/vs/workbench/contrib/mergeEditor/browser/mergeEditorInputModel.js +480 -0
  96. package/vscode/src/vs/workbench/contrib/mergeEditor/browser/mergeMarkers/mergeMarkersController.js +5 -0
  97. package/vscode/src/vs/workbench/contrib/mergeEditor/browser/model/diffComputer.js +90 -0
  98. package/vscode/src/vs/workbench/contrib/mergeEditor/browser/model/editing.js +54 -0
  99. package/vscode/src/vs/workbench/contrib/mergeEditor/browser/model/lineRange.js +108 -0
  100. package/vscode/src/vs/workbench/contrib/mergeEditor/browser/model/mapping.js +258 -0
  101. package/vscode/src/vs/workbench/contrib/mergeEditor/browser/model/mergeEditorModel.js +614 -0
  102. package/vscode/src/vs/workbench/contrib/mergeEditor/browser/model/modifiedBaseRange.js +307 -0
  103. package/vscode/src/vs/workbench/contrib/mergeEditor/browser/model/rangeUtils.js +44 -0
  104. package/vscode/src/vs/workbench/contrib/mergeEditor/browser/model/textModelDiffs.js +165 -0
  105. package/vscode/src/vs/workbench/contrib/mergeEditor/browser/telemetry.js +78 -0
  106. package/vscode/src/vs/workbench/contrib/mergeEditor/browser/utils.js +169 -0
  107. package/vscode/src/vs/workbench/contrib/mergeEditor/common/mergeEditor.js +64 -0
  108. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/clipboard/cellOutputClipboard.js +49 -0
  109. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/find/findFilters.js +70 -0
  110. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/find/findMatchDecorationModel.js +120 -0
  111. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/find/findModel.js +416 -0
  112. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/find/notebookFindReplaceWidget.css.js +4 -0
  113. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/find/notebookFindReplaceWidget.js +663 -0
  114. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/cellOperations.js +593 -0
  115. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/cellOutputActions.js +72 -0
  116. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/coreActions.js +326 -0
  117. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/editActions.js +539 -0
  118. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/foldingController.js +265 -0
  119. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/insertCellActions.js +348 -0
  120. package/vscode/src/vs/workbench/contrib/notebook/browser/media/notebook.css.js +4 -0
  121. package/vscode/src/vs/workbench/contrib/notebook/browser/media/notebookCellChat.css.js +4 -0
  122. package/vscode/src/vs/workbench/contrib/notebook/browser/media/notebookCellEditorHint.css.js +4 -0
  123. package/vscode/src/vs/workbench/contrib/notebook/browser/media/notebookCellInsertToolbar.css.js +4 -0
  124. package/vscode/src/vs/workbench/contrib/notebook/browser/media/notebookCellOutput.css.js +4 -0
  125. package/vscode/src/vs/workbench/contrib/notebook/browser/media/notebookCellStatusBar.css.js +4 -0
  126. package/vscode/src/vs/workbench/contrib/notebook/browser/media/notebookCellTitleToolbar.css.js +4 -0
  127. package/vscode/src/vs/workbench/contrib/notebook/browser/media/notebookDnd.css.js +4 -0
  128. package/vscode/src/vs/workbench/contrib/notebook/browser/media/notebookEditorStickyScroll.css.js +4 -0
  129. package/vscode/src/vs/workbench/contrib/notebook/browser/media/notebookFocusIndicator.css.js +4 -0
  130. package/vscode/src/vs/workbench/contrib/notebook/browser/media/notebookFolding.css.js +4 -0
  131. package/vscode/src/vs/workbench/contrib/notebook/browser/media/notebookKernelActionViewItem.css.js +4 -0
  132. package/vscode/src/vs/workbench/contrib/notebook/browser/media/notebookOutline.css.js +4 -0
  133. package/vscode/src/vs/workbench/contrib/notebook/browser/media/notebookToolbar.css.js +4 -0
  134. package/vscode/src/vs/workbench/contrib/notebook/browser/notebookBrowser.js +95 -3
  135. package/vscode/src/vs/workbench/contrib/notebook/browser/notebookEditor.js +437 -0
  136. package/vscode/src/vs/workbench/contrib/notebook/browser/notebookEditorExtensions.js +29 -0
  137. package/vscode/src/vs/workbench/contrib/notebook/browser/notebookEditorWidget.js +2730 -0
  138. package/vscode/src/vs/workbench/contrib/notebook/browser/notebookIcons.js +139 -0
  139. package/vscode/src/vs/workbench/contrib/notebook/browser/notebookLogger.js +17 -0
  140. package/vscode/src/vs/workbench/contrib/notebook/browser/notebookOptions.js +564 -0
  141. package/vscode/src/vs/workbench/contrib/notebook/browser/notebookViewEvents.js +27 -0
  142. package/vscode/src/vs/workbench/contrib/notebook/browser/view/cellPart.js +119 -0
  143. package/vscode/src/vs/workbench/contrib/notebook/browser/view/cellParts/cellActionView.js +27 -0
  144. package/vscode/src/vs/workbench/contrib/notebook/browser/view/cellParts/cellComments.js +135 -0
  145. package/vscode/src/vs/workbench/contrib/notebook/browser/view/cellParts/cellContextKeys.js +178 -0
  146. package/vscode/src/vs/workbench/contrib/notebook/browser/view/cellParts/cellDecorations.js +35 -0
  147. package/vscode/src/vs/workbench/contrib/notebook/browser/view/cellParts/cellDnd.js +377 -0
  148. package/vscode/src/vs/workbench/contrib/notebook/browser/view/cellParts/cellDragRenderer.js +97 -0
  149. package/vscode/src/vs/workbench/contrib/notebook/browser/view/cellParts/cellEditorOptions.js +194 -0
  150. package/vscode/src/vs/workbench/contrib/notebook/browser/view/cellParts/cellExecution.js +71 -0
  151. package/vscode/src/vs/workbench/contrib/notebook/browser/view/cellParts/cellFocus.js +20 -0
  152. package/vscode/src/vs/workbench/contrib/notebook/browser/view/cellParts/cellFocusIndicator.js +85 -0
  153. package/vscode/src/vs/workbench/contrib/notebook/browser/view/cellParts/cellOutput.js +652 -0
  154. package/vscode/src/vs/workbench/contrib/notebook/browser/view/cellParts/cellProgressBar.js +59 -0
  155. package/vscode/src/vs/workbench/contrib/notebook/browser/view/cellParts/cellStatusPart.js +303 -0
  156. package/vscode/src/vs/workbench/contrib/notebook/browser/view/cellParts/cellToolbarStickyScroll.js +24 -0
  157. package/vscode/src/vs/workbench/contrib/notebook/browser/view/cellParts/cellToolbars.js +228 -0
  158. package/vscode/src/vs/workbench/contrib/notebook/browser/view/cellParts/chat/cellChatActions.js +302 -0
  159. package/vscode/src/vs/workbench/contrib/notebook/browser/view/cellParts/chat/cellChatController.js +438 -0
  160. package/vscode/src/vs/workbench/contrib/notebook/browser/view/cellParts/chat/cellChatPart.js +45 -0
  161. package/vscode/src/vs/workbench/contrib/notebook/browser/view/cellParts/codeCell.js +435 -0
  162. package/vscode/src/vs/workbench/contrib/notebook/browser/view/cellParts/codeCellExecutionIcon.js +95 -0
  163. package/vscode/src/vs/workbench/contrib/notebook/browser/view/cellParts/codeCellRunToolbar.js +107 -0
  164. package/vscode/src/vs/workbench/contrib/notebook/browser/view/cellParts/collapsedCellInput.js +29 -0
  165. package/vscode/src/vs/workbench/contrib/notebook/browser/view/cellParts/collapsedCellOutput.js +59 -0
  166. package/vscode/src/vs/workbench/contrib/notebook/browser/view/cellParts/foldedCellHint.js +67 -0
  167. package/vscode/src/vs/workbench/contrib/notebook/browser/view/cellParts/markupCell.js +430 -0
  168. package/vscode/src/vs/workbench/contrib/notebook/browser/view/notebookCellAnchor.js +54 -0
  169. package/vscode/src/vs/workbench/contrib/notebook/browser/view/notebookCellList.js +1131 -0
  170. package/vscode/src/vs/workbench/contrib/notebook/browser/view/notebookCellListView.js +21 -0
  171. package/vscode/src/vs/workbench/contrib/notebook/browser/view/renderers/backLayerWebView.js +1591 -0
  172. package/vscode/src/vs/workbench/contrib/notebook/browser/view/renderers/cellRenderer.js +341 -0
  173. package/vscode/src/vs/workbench/contrib/notebook/browser/view/renderers/webviewPreloads.js +2155 -0
  174. package/vscode/src/vs/workbench/contrib/notebook/browser/view/renderers/webviewThemeMapping.js +65 -0
  175. package/vscode/src/vs/workbench/contrib/notebook/browser/viewModel/OutlineEntry.js +95 -0
  176. package/vscode/src/vs/workbench/contrib/notebook/browser/viewModel/baseCellViewModel.js +507 -0
  177. package/vscode/src/vs/workbench/contrib/notebook/browser/viewModel/cellEditorOptions.js +85 -0
  178. package/vscode/src/vs/workbench/contrib/notebook/browser/viewModel/cellOutputViewModel.js +47 -0
  179. package/vscode/src/vs/workbench/contrib/notebook/browser/viewModel/cellSelectionCollection.js +40 -0
  180. package/vscode/src/vs/workbench/contrib/notebook/browser/viewModel/codeCellViewModel.js +435 -0
  181. package/vscode/src/vs/workbench/contrib/notebook/browser/viewModel/eventDispatcher.js +31 -0
  182. package/vscode/src/vs/workbench/contrib/notebook/browser/viewModel/foldingModel.js +257 -0
  183. package/vscode/src/vs/workbench/contrib/notebook/browser/viewModel/markupCellViewModel.js +239 -0
  184. package/vscode/src/vs/workbench/contrib/notebook/browser/viewModel/notebookOutlineEntryFactory.js +103 -0
  185. package/vscode/src/vs/workbench/contrib/notebook/browser/viewModel/notebookOutlineProvider.js +211 -0
  186. package/vscode/src/vs/workbench/contrib/notebook/browser/viewModel/notebookViewModelImpl.js +808 -0
  187. package/vscode/src/vs/workbench/contrib/notebook/browser/viewModel/viewContext.js +8 -0
  188. package/vscode/src/vs/workbench/contrib/notebook/browser/viewParts/notebookEditorStickyScroll.js +381 -0
  189. package/vscode/src/vs/workbench/contrib/notebook/browser/viewParts/notebookEditorToolbar.js +527 -0
  190. package/vscode/src/vs/workbench/contrib/notebook/browser/viewParts/notebookEditorWidgetContextKeys.js +163 -0
  191. package/vscode/src/vs/workbench/contrib/notebook/browser/viewParts/notebookKernelQuickPickStrategy.js +651 -0
  192. package/vscode/src/vs/workbench/contrib/notebook/browser/viewParts/notebookKernelView.js +173 -0
  193. package/vscode/src/vs/workbench/contrib/notebook/browser/viewParts/notebookOverviewRuler.js +98 -0
  194. package/vscode/src/vs/workbench/contrib/notebook/browser/viewParts/notebookTopCellToolbar.js +62 -0
  195. package/vscode/src/vs/workbench/contrib/notebook/common/model/notebookCellOutputTextModel.js +101 -0
  196. package/vscode/src/vs/workbench/contrib/notebook/common/model/notebookCellTextModel.js +346 -0
  197. package/vscode/src/vs/workbench/contrib/notebook/common/notebookCommon.js +152 -1
  198. package/vscode/src/vs/workbench/contrib/notebook/common/notebookContextKeys.js +39 -0
  199. package/vscode/src/vs/workbench/contrib/notebook/common/notebookEditorInput.js +296 -0
  200. package/vscode/src/vs/workbench/contrib/notebook/common/notebookEditorModel.js +261 -0
  201. package/vscode/src/vs/workbench/contrib/notebook/common/notebookExecutionService.js +3 -1
  202. package/vscode/src/vs/workbench/contrib/notebook/common/notebookKernelService.js +2 -1
  203. package/vscode/src/vs/workbench/contrib/notebook/common/notebookKeymapService.js +3 -0
  204. package/vscode/src/vs/workbench/contrib/notebook/common/notebookLoggingService.js +3 -0
  205. package/vscode/src/vs/workbench/contrib/notebook/common/notebookPerformance.js +16 -0
  206. package/vscode/src/vs/workbench/contrib/notebook/common/notebookRange.js +66 -0
  207. package/vscode/src/vs/workbench/contrib/notebook/common/services/notebookWorkerService.js +4 -0
  208. package/vscode/src/vs/workbench/contrib/preferences/common/settingsEditorColorRegistry.js +130 -0
  209. package/vscode/src/vs/workbench/contrib/remote/browser/media/tunnelView.css.js +4 -0
  210. package/vscode/src/vs/workbench/contrib/remote/browser/remoteExplorer.js +847 -0
  211. package/vscode/src/vs/workbench/contrib/remote/browser/remoteIcons.js +89 -0
  212. package/vscode/src/vs/workbench/contrib/remote/browser/tunnelView.js +1942 -0
  213. package/vscode/src/vs/workbench/contrib/remote/browser/urlFinder.js +107 -0
  214. package/vscode/src/vs/workbench/contrib/search/browser/searchActionsBase.js +49 -0
  215. package/vscode/src/vs/workbench/contrib/search/browser/searchActionsFind.js +387 -0
  216. package/vscode/src/vs/workbench/contrib/search/browser/searchModel.js +2 -2
  217. package/vscode/src/vs/workbench/contrib/search/common/constants.js +66 -0
  218. package/vscode/src/vs/workbench/contrib/searchEditor/browser/constants.js +11 -0
  219. package/vscode/src/vs/workbench/contrib/snippets/browser/commands/abstractSnippetsActions.js +24 -0
  220. package/vscode/src/vs/workbench/contrib/snippets/browser/commands/fileTemplateSnippets.js +95 -0
  221. package/vscode/src/vs/workbench/contrib/tasks/common/taskDefinitionRegistry.js +6 -6
  222. package/vscode/src/vs/workbench/contrib/tasks/common/taskService.js +12 -2
  223. package/vscode/src/vs/workbench/contrib/tasks/common/tasks.js +712 -0
  224. package/vscode/src/vs/workbench/contrib/terminal/browser/terminal.js +4 -1
  225. package/vscode/src/vs/workbench/contrib/terminal/browser/terminalProcessExtHostProxy.js +130 -0
  226. package/vscode/src/vs/workbench/contrib/terminal/common/terminal.js +2 -1
  227. package/vscode/src/vs/workbench/contrib/welcomeGettingStarted/browser/featuredExtensionService.js +159 -0
  228. package/vscode/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedExtensionPoint.js +375 -0
  229. package/vscode/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedService.js +563 -0
  230. package/vscode/src/vs/workbench/contrib/welcomeGettingStarted/common/gettingStartedContent.js +932 -0
  231. package/vscode/src/vs/workbench/services/authentication/browser/authenticationService.js +20 -1
  232. package/vscode/src/vs/workbench/services/configurationResolver/common/configurationResolverSchema.js +205 -0
  233. package/vscode/src/vs/workbench/services/configurationResolver/common/configurationResolverUtils.js +11 -0
  234. package/vscode/src/vs/workbench/services/configurationResolver/common/variableResolver.js +9 -9
  235. package/vscode/src/vs/workbench/services/extensionManagement/browser/extensionBisect.js +1 -1
  236. package/vscode/src/vs/workbench/services/keybinding/common/keybindingEditing.js +2 -2
  237. package/vscode/src/vs/workbench/services/languageStatus/common/languageStatusService.js +24 -1
  238. package/vscode/src/vs/workbench/services/layout/browser/layoutService.js +15 -1
  239. package/vscode/src/vs/workbench/services/preferences/browser/keybindingsEditorInput.js +41 -0
  240. package/vscode/src/vs/workbench/services/preferences/browser/keybindingsEditorModel.js +588 -0
  241. package/vscode/src/vs/workbench/services/preferences/common/preferencesEditorInput.js +43 -0
  242. package/vscode/src/vs/workbench/services/remote/common/remoteExplorerService.d.ts +2 -2
  243. package/vscode/src/vs/workbench/services/remote/common/remoteExplorerService.js +190 -2
  244. package/vscode/src/vs/workbench/services/search/common/search.js +3 -3
  245. package/vscode/src/vs/workbench/services/terminal/common/embedderTerminalService.js +75 -1
  246. package/vscode/src/vs/workbench/services/timer/browser/timerService.js +240 -1
  247. package/vscode/src/vs/workbench/services/userData/browser/userDataInit.js +31 -1
  248. package/vscode/src/vs/workbench/services/userDataProfile/common/userDataProfile.js +25 -1
  249. package/vscode/src/vs/workbench/services/userDataProfile/common/userDataProfileIcons.js +75 -1
  250. package/vscode/src/vs/workbench/services/userDataSync/common/userDataSync.js +74 -4
  251. package/vscode/src/vs/workbench/services/workingCopy/common/resourceWorkingCopy.js +77 -0
  252. package/assets/break.mp3 +0 -0
  253. package/assets/chatRequestSent.mp3 +0 -0
  254. package/assets/chatResponsePending.mp3 +0 -0
  255. package/assets/chatResponseReceived1.mp3 +0 -0
  256. package/assets/chatResponseReceived2.mp3 +0 -0
  257. package/assets/chatResponseReceived3.mp3 +0 -0
  258. package/assets/chatResponseReceived4.mp3 +0 -0
  259. package/assets/clear.mp3 +0 -0
  260. package/assets/defaultIcon.png +0 -0
  261. package/assets/diffLineDeleted.mp3 +0 -0
  262. package/assets/diffLineInserted.mp3 +0 -0
  263. package/assets/diffLineModified.mp3 +0 -0
  264. package/assets/error.mp3 +0 -0
  265. package/assets/fake.html +0 -10
  266. package/assets/foldedAreas.mp3 +0 -0
  267. package/assets/format.mp3 +0 -0
  268. package/assets/index-no-csp.html +0 -1226
  269. package/assets/index.html +0 -1227
  270. package/assets/quickFixes.mp3 +0 -0
  271. package/assets/save.mp3 +0 -0
  272. package/assets/service-worker.js +0 -457
  273. package/assets/taskCompleted.mp3 +0 -0
  274. package/assets/taskFailed.mp3 +0 -0
  275. package/assets/terminalBell.mp3 +0 -0
  276. package/assets/warning.mp3 +0 -0
  277. package/assets/webWorkerExtensionHostIframe.html +0 -123
  278. package/override/vs/workbench/contrib/notebook/browser/contrib/find/findMatchDecorationModel.js +0 -2
  279. package/override/vs/workbench/contrib/notebook/browser/notebookEditorWidget.js +0 -2
  280. package/override/vs/workbench/contrib/notebook/common/notebookEditorInput.js +0 -5
  281. package/vscode/src/vs/base/parts/request/browser/request.js +0 -60
  282. package/vscode/src/vs/platform/request/browser/requestService.js +0 -28
  283. package/vscode/src/vs/platform/request/common/requestIpc.js +0 -17
  284. package/vscode/src/vs/platform/url/common/urlService.js +0 -17
  285. package/vscode/src/vs/workbench/services/configuration/common/jsonEditingService.js +0 -120
  286. package/vscode/src/vs/workbench/services/decorations/browser/decorationsService.js +0 -319
  287. package/vscode/src/vs/workbench/services/files/browser/elevatedFileService.js +0 -9
  288. package/vscode/src/vs/workbench/services/host/browser/browserHostService.js +0 -408
  289. package/vscode/src/vs/workbench/services/request/browser/requestService.js +0 -48
  290. package/vscode/src/vs/workbench/services/textfile/browser/browserTextFileService.js +0 -56
  291. package/vscode/src/vs/workbench/services/textfile/browser/textFileService.js +0 -639
  292. package/vscode/src/vs/workbench/services/textfile/common/textFileEditorModelManager.js +0 -402
  293. package/vscode/src/vs/workbench/services/textfile/common/textFileSaveParticipant.js +0 -62
  294. package/vscode/src/vs/workbench/services/themes/browser/browserHostColorSchemeService.js +0 -38
  295. package/vscode/src/vs/workbench/services/themes/common/tokenClassificationExtensionPoint.js +0 -295
  296. package/vscode/src/vs/workbench/services/url/browser/urlService.js +0 -47
  297. package/vscode/src/vs/workbench/services/views/common/treeViewsService.js +0 -20
  298. package/vscode/src/vs/workbench/services/workspaces/common/canonicalUriService.js +0 -19
@@ -0,0 +1,1195 @@
1
+ import { __decorate, __param } from '../../../../../../../external/tslib/tslib.es6.js';
2
+ import * as dom from 'monaco-editor/esm/vs/base/browser/dom.js';
3
+ import { Button } from 'monaco-editor/esm/vs/base/browser/ui/button/button.js';
4
+ import { renderIcon } from 'monaco-editor/esm/vs/base/browser/ui/iconLabel/iconLabels.js';
5
+ import { distinct } from 'monaco-editor/esm/vs/base/common/arrays.js';
6
+ import { disposableTimeout } from 'monaco-editor/esm/vs/base/common/async.js';
7
+ import { Codicon } from 'monaco-editor/esm/vs/base/common/codicons.js';
8
+ import { Emitter } from 'monaco-editor/esm/vs/base/common/event.js';
9
+ import { MarkdownString } from 'monaco-editor/esm/vs/base/common/htmlContent.js';
10
+ import { Disposable, DisposableStore, toDisposable } from 'monaco-editor/esm/vs/base/common/lifecycle.js';
11
+ import { ResourceMap } from 'monaco-editor/esm/vs/base/common/map.js';
12
+ import { marked } from 'monaco-editor/esm/vs/base/common/marked/marked.js';
13
+ import { FileAccess } from 'monaco-editor/esm/vs/base/common/network.js';
14
+ import { clamp } from 'monaco-editor/esm/vs/base/common/numbers.js';
15
+ import { ThemeIcon } from 'monaco-editor/esm/vs/base/common/themables.js';
16
+ import { URI } from 'monaco-editor/esm/vs/base/common/uri.js';
17
+ import { MarkdownRenderer } from 'monaco-editor/esm/vs/editor/contrib/markdownRenderer/browser/markdownRenderer.js';
18
+ import { localizeWithPath } from 'monaco-editor/esm/vs/nls.js';
19
+ import { MenuEntryActionViewItem } from 'monaco-editor/esm/vs/platform/actions/browser/menuEntryActionViewItem.js';
20
+ import { MenuWorkbenchToolBar } from 'monaco-editor/esm/vs/platform/actions/browser/toolbar.js';
21
+ import { MenuId, MenuItemAction } from 'monaco-editor/esm/vs/platform/actions/common/actions.js';
22
+ import { ICommandService } from 'monaco-editor/esm/vs/platform/commands/common/commands.js';
23
+ import { IConfigurationService } from 'monaco-editor/esm/vs/platform/configuration/common/configuration.js';
24
+ import { IContextKeyService } from 'monaco-editor/esm/vs/platform/contextkey/common/contextkey.js';
25
+ import { FileKind } from 'monaco-editor/esm/vs/platform/files/common/files.js';
26
+ import { IInstantiationService } from 'monaco-editor/esm/vs/platform/instantiation/common/instantiation.js';
27
+ import { ServiceCollection } from 'monaco-editor/esm/vs/platform/instantiation/common/serviceCollection.js';
28
+ import { WorkbenchCompressibleAsyncDataTree, WorkbenchList } from 'monaco-editor/esm/vs/platform/list/browser/listService.js';
29
+ import { ILogService } from 'monaco-editor/esm/vs/platform/log/common/log.js';
30
+ import { IOpenerService } from 'monaco-editor/esm/vs/platform/opener/common/opener.js';
31
+ import { IProductService } from 'monaco-editor/esm/vs/platform/product/common/productService.js';
32
+ import { defaultButtonStyles } from 'monaco-editor/esm/vs/platform/theme/browser/defaultStyles.js';
33
+ import { ColorScheme } from 'monaco-editor/esm/vs/platform/theme/common/theme.js';
34
+ import { IThemeService } from 'monaco-editor/esm/vs/platform/theme/common/themeService.js';
35
+ import { ResourceLabels } from '../../../browser/labels.js';
36
+ import { IAccessibleViewService } from '../../accessibility/browser/accessibleView.js';
37
+ import { ChatFollowups } from './chatFollowups.js';
38
+ import { annotateSpecialMarkdownContent, convertParsedRequestToMarkdown, extractVulnerabilitiesFromText, walkTreeAndAnnotateReferenceLinks } from './chatMarkdownDecorationsRenderer.js';
39
+ import { CodeBlockPart } from './codeBlockPart.js';
40
+ import { CONTEXT_RESPONSE, CONTEXT_REQUEST, CONTEXT_CHAT_RESPONSE_SUPPORT_ISSUE_REPORTING, CONTEXT_RESPONSE_VOTE, CONTEXT_RESPONSE_FILTERED } from '../common/chatContextKeys.js';
41
+ import { chatAgentLeader, chatSubcommandLeader } from '../common/chatParserTypes.js';
42
+ import { InteractiveSessionVoteDirection, IChatService } from '../common/chatService.js';
43
+ import { isResponseVM, isRequestVM, isWelcomeVM } from '../common/chatViewModel.js';
44
+ import { getNWords } from '../common/chatWordCounter.js';
45
+ import { createFileIconThemableTreeContainerScope } from '../../files/browser/views/explorerView.js';
46
+ import { IEditorService } from '../../../services/editor/common/editorService.js';
47
+ var ChatListItemRenderer_1;
48
+ const $ = dom.$;
49
+ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
50
+ static { ChatListItemRenderer_1 = this; }
51
+ static { this.ID = 'item'; }
52
+ constructor(editorOptions, rendererOptions, delegate, instantiationService, configService, logService, commandService, openerService, contextKeyService, chatService, editorService, productService, themeService) {
53
+ super();
54
+ this.editorOptions = editorOptions;
55
+ this.rendererOptions = rendererOptions;
56
+ this.delegate = delegate;
57
+ this.instantiationService = instantiationService;
58
+ this.logService = logService;
59
+ this.commandService = commandService;
60
+ this.openerService = openerService;
61
+ this.contextKeyService = contextKeyService;
62
+ this.chatService = chatService;
63
+ this.editorService = editorService;
64
+ this.themeService = themeService;
65
+ this.codeBlocksByResponseId = ( new Map());
66
+ this.codeBlocksByEditorUri = ( new ResourceMap());
67
+ this.fileTreesByResponseId = ( new Map());
68
+ this.focusedFileTreesByResponseId = ( new Map());
69
+ this._onDidClickFollowup = this._register(( new Emitter()));
70
+ this.onDidClickFollowup = this._onDidClickFollowup.event;
71
+ this._onDidChangeItemHeight = this._register(( new Emitter()));
72
+ this.onDidChangeItemHeight = this._onDidChangeItemHeight.event;
73
+ this._currentLayoutWidth = 0;
74
+ this._isVisible = true;
75
+ this._onDidChangeVisibility = this._register(( new Emitter()));
76
+ this._usedReferencesEnabled = false;
77
+ this.renderer = this.instantiationService.createInstance(MarkdownRenderer, {});
78
+ this._editorPool = this._register(this.instantiationService.createInstance(EditorPool, this.editorOptions));
79
+ this._treePool = this._register(this.instantiationService.createInstance(TreePool, this._onDidChangeVisibility.event));
80
+ this._contentReferencesListPool = this._register(this.instantiationService.createInstance(ContentReferencesListPool, this._onDidChangeVisibility.event));
81
+ this._usedReferencesEnabled = configService.getValue('chat.experimental.usedReferences') ?? true;
82
+ this._register(configService.onDidChangeConfiguration(e => {
83
+ if (e.affectsConfiguration('chat.experimental.usedReferences')) {
84
+ this._usedReferencesEnabled = configService.getValue('chat.experimental.usedReferences') ?? true;
85
+ }
86
+ }));
87
+ }
88
+ get templateId() {
89
+ return ChatListItemRenderer_1.ID;
90
+ }
91
+ traceLayout(method, message) {
92
+ {
93
+ this.logService.trace(`ChatListItemRenderer#${method}: ${message}`);
94
+ }
95
+ }
96
+ getProgressiveRenderRate(element) {
97
+ if (element.isComplete) {
98
+ return 80;
99
+ }
100
+ if (element.contentUpdateTimings && element.contentUpdateTimings.impliedWordLoadRate) {
101
+ const minRate = 12;
102
+ const maxRate = 80;
103
+ const rateBoost = 1.5;
104
+ const rate = element.contentUpdateTimings.impliedWordLoadRate * rateBoost;
105
+ return clamp(rate, minRate, maxRate);
106
+ }
107
+ return 8;
108
+ }
109
+ getCodeBlockInfosForResponse(response) {
110
+ const codeBlocks = this.codeBlocksByResponseId.get(response.id);
111
+ return codeBlocks ?? [];
112
+ }
113
+ getCodeBlockInfoForEditor(uri) {
114
+ return this.codeBlocksByEditorUri.get(uri);
115
+ }
116
+ getFileTreeInfosForResponse(response) {
117
+ const fileTrees = this.fileTreesByResponseId.get(response.id);
118
+ return fileTrees ?? [];
119
+ }
120
+ getLastFocusedFileTreeForResponse(response) {
121
+ const fileTrees = this.fileTreesByResponseId.get(response.id);
122
+ const lastFocusedFileTreeIndex = this.focusedFileTreesByResponseId.get(response.id);
123
+ if (fileTrees?.length && lastFocusedFileTreeIndex !== undefined && lastFocusedFileTreeIndex < fileTrees.length) {
124
+ return fileTrees[lastFocusedFileTreeIndex];
125
+ }
126
+ return undefined;
127
+ }
128
+ setVisible(visible) {
129
+ this._isVisible = visible;
130
+ this._onDidChangeVisibility.fire(visible);
131
+ }
132
+ layout(width) {
133
+ this._currentLayoutWidth = width - (this.rendererOptions.noPadding ? 0 : 40);
134
+ this._editorPool.inUse.forEach(editor => {
135
+ editor.layout(this._currentLayoutWidth);
136
+ });
137
+ }
138
+ renderTemplate(container) {
139
+ const templateDisposables = ( new DisposableStore());
140
+ const rowContainer = dom.append(container, $('.interactive-item-container'));
141
+ if (this.rendererOptions.renderStyle === 'compact') {
142
+ rowContainer.classList.add('interactive-item-compact');
143
+ }
144
+ if (this.rendererOptions.noPadding) {
145
+ rowContainer.classList.add('no-padding');
146
+ }
147
+ const header = dom.append(rowContainer, $('.header'));
148
+ const user = dom.append(header, $('.user'));
149
+ const avatarContainer = dom.append(user, $('.avatar-container'));
150
+ const agentAvatarContainer = dom.append(user, $('.agent-avatar-container'));
151
+ const username = dom.append(user, $('h3.username'));
152
+ const detailContainer = dom.append(user, $('span.detail-container'));
153
+ const detail = dom.append(detailContainer, $('span.detail'));
154
+ dom.append(detailContainer, $('span.chat-animated-ellipsis'));
155
+ const progressSteps = dom.append(rowContainer, $('.progress-steps'));
156
+ const referencesListContainer = dom.append(rowContainer, $('.referencesListContainer'));
157
+ const value = dom.append(rowContainer, $('.value'));
158
+ const elementDisposables = ( new DisposableStore());
159
+ const contextKeyService = templateDisposables.add(this.contextKeyService.createScoped(rowContainer));
160
+ const scopedInstantiationService = this.instantiationService.createChild(( new ServiceCollection([IContextKeyService, contextKeyService])));
161
+ let titleToolbar;
162
+ if (this.rendererOptions.noHeader) {
163
+ header.classList.add('hidden');
164
+ }
165
+ else {
166
+ titleToolbar = templateDisposables.add(scopedInstantiationService.createInstance(MenuWorkbenchToolBar, header, MenuId.ChatMessageTitle, {
167
+ menuOptions: {
168
+ shouldForwardArgs: true
169
+ },
170
+ actionViewItemProvider: (action, options) => {
171
+ if (action instanceof MenuItemAction && (action.item.id === 'workbench.action.chat.voteDown' || action.item.id === 'workbench.action.chat.voteUp')) {
172
+ return scopedInstantiationService.createInstance(ChatVoteButton, action, options);
173
+ }
174
+ return undefined;
175
+ }
176
+ }));
177
+ }
178
+ const template = { avatarContainer, agentAvatarContainer, username, detail, progressSteps, referencesListContainer, value, rowContainer, elementDisposables, titleToolbar, templateDisposables, contextKeyService };
179
+ return template;
180
+ }
181
+ renderElement(node, index, templateData) {
182
+ this.renderChatTreeItem(node.element, index, templateData);
183
+ }
184
+ renderChatTreeItem(element, index, templateData) {
185
+ const kind = isRequestVM(element) ? 'request' :
186
+ isResponseVM(element) ? 'response' :
187
+ 'welcome';
188
+ this.traceLayout('renderElement', `${kind}, index=${index}`);
189
+ CONTEXT_RESPONSE.bindTo(templateData.contextKeyService).set(isResponseVM(element));
190
+ CONTEXT_REQUEST.bindTo(templateData.contextKeyService).set(isRequestVM(element));
191
+ if (isResponseVM(element)) {
192
+ CONTEXT_CHAT_RESPONSE_SUPPORT_ISSUE_REPORTING.bindTo(templateData.contextKeyService).set(!!element.agent?.metadata.supportIssueReporting);
193
+ CONTEXT_RESPONSE_VOTE.bindTo(templateData.contextKeyService).set(element.vote === InteractiveSessionVoteDirection.Up ? 'up' : element.vote === InteractiveSessionVoteDirection.Down ? 'down' : '');
194
+ }
195
+ else {
196
+ CONTEXT_RESPONSE_VOTE.bindTo(templateData.contextKeyService).set('');
197
+ }
198
+ if (templateData.titleToolbar) {
199
+ templateData.titleToolbar.context = element;
200
+ }
201
+ const isFiltered = !!(isResponseVM(element) && element.errorDetails?.responseIsFiltered);
202
+ CONTEXT_RESPONSE_FILTERED.bindTo(templateData.contextKeyService).set(isFiltered);
203
+ templateData.rowContainer.classList.toggle('interactive-request', isRequestVM(element));
204
+ templateData.rowContainer.classList.toggle('interactive-response', isResponseVM(element));
205
+ templateData.rowContainer.classList.toggle('interactive-welcome', isWelcomeVM(element));
206
+ templateData.rowContainer.classList.toggle('filtered-response', isFiltered);
207
+ templateData.rowContainer.classList.toggle('show-detail-progress', isResponseVM(element) && !element.isComplete && !element.progressMessages.length);
208
+ templateData.username.textContent = element.username;
209
+ if (!this.rendererOptions.noHeader) {
210
+ this.renderAvatar(element, templateData);
211
+ }
212
+ dom.clearNode(templateData.detail);
213
+ dom.clearNode(templateData.progressSteps);
214
+ if (isResponseVM(element)) {
215
+ this.renderDetail(element, templateData);
216
+ this.renderProgressSteps(element, templateData);
217
+ }
218
+ if (isResponseVM(element) && index === this.delegate.getListLength() - 1 && (!element.isComplete || element.renderData) && element.response.value.length) {
219
+ this.traceLayout('renderElement', `start progressive render ${kind}, index=${index}`);
220
+ const progressiveRenderingDisposables = templateData.elementDisposables.add(( new DisposableStore()));
221
+ const timer = templateData.elementDisposables.add(new dom.WindowIntervalTimer());
222
+ const runProgressiveRender = (initial) => {
223
+ try {
224
+ if (this.doNextProgressiveRender(element, index, templateData, !!initial, progressiveRenderingDisposables)) {
225
+ timer.cancel();
226
+ }
227
+ }
228
+ catch (err) {
229
+ timer.cancel();
230
+ throw err;
231
+ }
232
+ };
233
+ timer.cancelAndSet(runProgressiveRender, 50, dom.getWindow(templateData.rowContainer));
234
+ runProgressiveRender(true);
235
+ }
236
+ else if (isResponseVM(element)) {
237
+ const renderableResponse = annotateSpecialMarkdownContent(element.response.value);
238
+ this.basicRenderElement(renderableResponse, element, index, templateData);
239
+ }
240
+ else if (isRequestVM(element)) {
241
+ const markdown = 'kind' in element.message ?
242
+ element.message.message :
243
+ convertParsedRequestToMarkdown(element.message);
244
+ this.basicRenderElement([{ content: ( new MarkdownString(markdown)), kind: 'markdownContent' }], element, index, templateData);
245
+ }
246
+ else {
247
+ this.renderWelcomeMessage(element, templateData);
248
+ }
249
+ }
250
+ renderDetail(element, templateData) {
251
+ let progressMsg = '';
252
+ if (element.agent && !element.agent.metadata.isDefault) {
253
+ let usingMsg = chatAgentLeader + element.agent.id;
254
+ if (element.slashCommand) {
255
+ usingMsg += ` ${chatSubcommandLeader}${element.slashCommand.name}`;
256
+ }
257
+ if (element.isComplete) {
258
+ progressMsg = ( localizeWithPath(
259
+ 'vs/workbench/contrib/chat/browser/chatListRenderer',
260
+ 'usedAgent',
261
+ "used {0}",
262
+ usingMsg
263
+ ));
264
+ }
265
+ else {
266
+ progressMsg = ( localizeWithPath(
267
+ 'vs/workbench/contrib/chat/browser/chatListRenderer',
268
+ 'usingAgent',
269
+ "using {0}",
270
+ usingMsg
271
+ ));
272
+ }
273
+ }
274
+ else if (!element.isComplete) {
275
+ progressMsg = ( localizeWithPath(
276
+ 'vs/workbench/contrib/chat/browser/chatListRenderer',
277
+ 'thinking',
278
+ "Thinking"
279
+ ));
280
+ }
281
+ templateData.detail.textContent = progressMsg;
282
+ if (element.agent) {
283
+ templateData.detail.title = progressMsg + (element.slashCommand?.description ? `\n${element.slashCommand.description}` : '');
284
+ }
285
+ else {
286
+ templateData.detail.title = '';
287
+ }
288
+ }
289
+ renderProgressSteps(element, templateData) {
290
+ if (element.response.value.length || element.isComplete) {
291
+ return;
292
+ }
293
+ element.progressMessages.forEach((msg, index) => {
294
+ const last = index === element.progressMessages.length - 1;
295
+ const icon = last ? ThemeIcon.modify(Codicon.sync, 'spin') : Codicon.check;
296
+ const step = dom.$('.progress-step', undefined, renderIcon(icon), dom.$('span.progress-step-message', undefined, msg.content));
297
+ templateData.progressSteps.appendChild(step);
298
+ });
299
+ }
300
+ renderAvatar(element, templateData) {
301
+ if (element.avatarIconUri) {
302
+ const avatarImgIcon = dom.$('img.icon');
303
+ avatarImgIcon.src = ( FileAccess.uriToBrowserUri(element.avatarIconUri).toString(true));
304
+ templateData.avatarContainer.replaceChildren(dom.$('.avatar', undefined, avatarImgIcon));
305
+ }
306
+ else {
307
+ const defaultIcon = isRequestVM(element) ? Codicon.account : Codicon.copilot;
308
+ const avatarIcon = dom.$(ThemeIcon.asCSSSelector(defaultIcon));
309
+ templateData.avatarContainer.replaceChildren(dom.$('.avatar.codicon-avatar', undefined, avatarIcon));
310
+ }
311
+ if (isResponseVM(element) && element.agent && !element.agent.metadata.isDefault) {
312
+ dom.show(templateData.agentAvatarContainer);
313
+ const icon = this.getAgentIcon(element.agent.metadata);
314
+ if (icon instanceof URI) {
315
+ const avatarIcon = dom.$('img.icon');
316
+ avatarIcon.src = ( FileAccess.uriToBrowserUri(icon).toString(true));
317
+ templateData.agentAvatarContainer.replaceChildren(dom.$('.avatar', undefined, avatarIcon));
318
+ }
319
+ else if (icon) {
320
+ const avatarIcon = dom.$(ThemeIcon.asCSSSelector(icon));
321
+ templateData.agentAvatarContainer.replaceChildren(dom.$('.avatar.codicon-avatar', undefined, avatarIcon));
322
+ }
323
+ else {
324
+ dom.hide(templateData.agentAvatarContainer);
325
+ return;
326
+ }
327
+ templateData.agentAvatarContainer.classList.toggle('complete', element.isComplete);
328
+ if (!element.agentAvatarHasBeenRendered && !element.isComplete) {
329
+ element.agentAvatarHasBeenRendered = true;
330
+ templateData.agentAvatarContainer.classList.remove('loading');
331
+ templateData.elementDisposables.add(disposableTimeout(() => {
332
+ templateData.agentAvatarContainer.classList.toggle('loading', !element.isComplete);
333
+ }, 100));
334
+ }
335
+ else {
336
+ templateData.agentAvatarContainer.classList.toggle('loading', !element.isComplete);
337
+ }
338
+ }
339
+ else {
340
+ dom.hide(templateData.agentAvatarContainer);
341
+ }
342
+ }
343
+ getAgentIcon(agent) {
344
+ if (agent.themeIcon) {
345
+ return agent.themeIcon;
346
+ }
347
+ else {
348
+ return this.themeService.getColorTheme().type === ColorScheme.DARK && agent.iconDark ? agent.iconDark :
349
+ agent.icon;
350
+ }
351
+ }
352
+ basicRenderElement(value, element, index, templateData) {
353
+ const fillInIncompleteTokens = isResponseVM(element) && (!element.isComplete || element.isCanceled || element.errorDetails?.responseIsFiltered || element.errorDetails?.responseIsIncomplete);
354
+ dom.clearNode(templateData.value);
355
+ dom.clearNode(templateData.referencesListContainer);
356
+ if (isResponseVM(element)) {
357
+ this.renderDetail(element, templateData);
358
+ }
359
+ this.renderContentReferencesIfNeeded(element, templateData, templateData.elementDisposables);
360
+ let fileTreeIndex = 0;
361
+ for (const data of value) {
362
+ const result = data.kind === 'treeData'
363
+ ? this.renderTreeData(data.treeData, element, templateData, fileTreeIndex++)
364
+ : data.kind === 'markdownContent'
365
+ ? this.renderMarkdown(data.content, element, templateData, fillInIncompleteTokens)
366
+ : this.renderPlaceholder(( new MarkdownString(data.content)), templateData);
367
+ templateData.value.appendChild(result.element);
368
+ templateData.elementDisposables.add(result);
369
+ }
370
+ if (isResponseVM(element) && element.errorDetails?.message) {
371
+ const icon = element.errorDetails.responseIsFiltered ? Codicon.info : Codicon.error;
372
+ const errorDetails = dom.append(templateData.value, $('.interactive-response-error-details', undefined, renderIcon(icon)));
373
+ const renderedError = templateData.elementDisposables.add(this.renderer.render(( new MarkdownString(element.errorDetails.message))));
374
+ errorDetails.appendChild($('span', undefined, renderedError.element));
375
+ }
376
+ if (isResponseVM(element) && element.commandFollowups?.length) {
377
+ const followupsContainer = dom.append(templateData.value, $('.interactive-response-followups'));
378
+ templateData.elementDisposables.add(( new ChatFollowups(
379
+ followupsContainer,
380
+ element.commandFollowups,
381
+ defaultButtonStyles,
382
+ followup => {
383
+ this.chatService.notifyUserAction({
384
+ providerId: element.providerId,
385
+ agentId: element.agent?.id,
386
+ sessionId: element.sessionId,
387
+ requestId: element.requestId,
388
+ action: {
389
+ kind: 'command',
390
+ command: followup,
391
+ }
392
+ });
393
+ return this.commandService.executeCommand(followup.commandId, ...(followup.args ?? []));
394
+ },
395
+ templateData.contextKeyService
396
+ )));
397
+ }
398
+ const newHeight = templateData.rowContainer.offsetHeight;
399
+ const fireEvent = !element.currentRenderedHeight || element.currentRenderedHeight !== newHeight;
400
+ element.currentRenderedHeight = newHeight;
401
+ if (fireEvent) {
402
+ const disposable = templateData.elementDisposables.add(dom.scheduleAtNextAnimationFrame(dom.getWindow(templateData.value), () => {
403
+ disposable.dispose();
404
+ this._onDidChangeItemHeight.fire({ element, height: newHeight });
405
+ }));
406
+ }
407
+ }
408
+ renderWelcomeMessage(element, templateData) {
409
+ dom.clearNode(templateData.value);
410
+ dom.clearNode(templateData.referencesListContainer);
411
+ for (const item of element.content) {
412
+ if (Array.isArray(item)) {
413
+ templateData.elementDisposables.add(( new ChatFollowups(
414
+ templateData.value,
415
+ item,
416
+ undefined,
417
+ followup => this._onDidClickFollowup.fire(followup),
418
+ templateData.contextKeyService
419
+ )));
420
+ }
421
+ else {
422
+ const result = this.renderMarkdown(item, element, templateData);
423
+ templateData.value.appendChild(result.element);
424
+ templateData.elementDisposables.add(result);
425
+ }
426
+ }
427
+ const newHeight = templateData.rowContainer.offsetHeight;
428
+ const fireEvent = !element.currentRenderedHeight || element.currentRenderedHeight !== newHeight;
429
+ element.currentRenderedHeight = newHeight;
430
+ if (fireEvent) {
431
+ const disposable = templateData.elementDisposables.add(dom.scheduleAtNextAnimationFrame(dom.getWindow(templateData.value), () => {
432
+ disposable.dispose();
433
+ this._onDidChangeItemHeight.fire({ element, height: newHeight });
434
+ }));
435
+ }
436
+ }
437
+ doNextProgressiveRender(element, index, templateData, isInRenderElement, disposables) {
438
+ if (!this._isVisible) {
439
+ return true;
440
+ }
441
+ disposables.clear();
442
+ const annotatedResult = annotateSpecialMarkdownContent(element.response.value);
443
+ const renderableResponse = annotatedResult;
444
+ let isFullyRendered = false;
445
+ if (element.isCanceled) {
446
+ this.traceLayout('runProgressiveRender', `canceled, index=${index}`);
447
+ element.renderData = undefined;
448
+ this.basicRenderElement(renderableResponse, element, index, templateData);
449
+ isFullyRendered = true;
450
+ }
451
+ else {
452
+ element.renderData ??= { renderedParts: [] };
453
+ const renderedParts = element.renderData.renderedParts;
454
+ const wordCountResults = [];
455
+ const partsToRender = [];
456
+ let somePartIsNotFullyRendered = false;
457
+ renderableResponse.forEach((part, index) => {
458
+ const renderedPart = renderedParts[index];
459
+ if (!renderedPart) {
460
+ if (part.kind === 'treeData') {
461
+ partsToRender[index] = part.treeData;
462
+ }
463
+ else {
464
+ const wordCountResult = this.getDataForProgressiveRender(element, contentToMarkdown(part.content), { renderedWordCount: 0, lastRenderTime: 0 });
465
+ if (wordCountResult !== undefined) {
466
+ this.traceLayout('doNextProgressiveRender', `Rendering new part ${index}, wordCountResult=${wordCountResult.actualWordCount}, rate=${wordCountResult.rate}`);
467
+ partsToRender[index] = {
468
+ renderedWordCount: wordCountResult.actualWordCount,
469
+ lastRenderTime: Date.now(),
470
+ isFullyRendered: wordCountResult.isFullString,
471
+ };
472
+ wordCountResults[index] = wordCountResult;
473
+ }
474
+ }
475
+ }
476
+ else if (part.kind === 'treeData' && !isInteractiveProgressTreeData(renderedPart)) {
477
+ partsToRender[index] = part.treeData;
478
+ }
479
+ else if (part.kind !== 'treeData' && !isInteractiveProgressTreeData(renderedPart)) {
480
+ const wordCountResult = this.getDataForProgressiveRender(element, contentToMarkdown(part.content), renderedPart);
481
+ if (wordCountResult !== undefined && renderedPart.renderedWordCount !== wordCountResult?.actualWordCount) {
482
+ this.traceLayout('doNextProgressiveRender', `Rendering changed part ${index}, wordCountResult=${wordCountResult.actualWordCount}, rate=${wordCountResult.rate}`);
483
+ partsToRender[index] = {
484
+ renderedWordCount: wordCountResult.actualWordCount,
485
+ lastRenderTime: Date.now(),
486
+ isFullyRendered: wordCountResult.isFullString,
487
+ };
488
+ wordCountResults[index] = wordCountResult;
489
+ }
490
+ else if (!renderedPart.isFullyRendered && !wordCountResult) {
491
+ somePartIsNotFullyRendered = true;
492
+ }
493
+ }
494
+ });
495
+ isFullyRendered = partsToRender.length === 0 && !somePartIsNotFullyRendered;
496
+ if (isFullyRendered && element.isComplete) {
497
+ this.traceLayout('runProgressiveRender', `end progressive render, index=${index} and clearing renderData, response is complete, index=${index}`);
498
+ element.renderData = undefined;
499
+ disposables.clear();
500
+ this.basicRenderElement(renderableResponse, element, index, templateData);
501
+ }
502
+ else if (!isFullyRendered) {
503
+ this.renderContentReferencesIfNeeded(element, templateData, disposables);
504
+ let hasRenderedOneMarkdownBlock = false;
505
+ partsToRender.forEach((partToRender, index) => {
506
+ if (!partToRender) {
507
+ return;
508
+ }
509
+ let result;
510
+ if (isInteractiveProgressTreeData(partToRender)) {
511
+ result = this.renderTreeData(partToRender, element, templateData, index);
512
+ }
513
+ else if (!hasRenderedOneMarkdownBlock) {
514
+ const { value } = wordCountResults[index];
515
+ result = renderableResponse[index].kind === 'asyncContent'
516
+ ? this.renderPlaceholder(( new MarkdownString(value)), templateData)
517
+ : this.renderMarkdown(( new MarkdownString(value)), element, templateData, true);
518
+ hasRenderedOneMarkdownBlock = true;
519
+ }
520
+ if (!result) {
521
+ return;
522
+ }
523
+ renderedParts[index] = partToRender;
524
+ const existingElement = templateData.value.children[index];
525
+ if (existingElement) {
526
+ templateData.value.replaceChild(result.element, existingElement);
527
+ }
528
+ else {
529
+ templateData.value.appendChild(result.element);
530
+ }
531
+ disposables.add(result);
532
+ });
533
+ }
534
+ else {
535
+ return false;
536
+ }
537
+ }
538
+ const height = templateData.rowContainer.offsetHeight;
539
+ element.currentRenderedHeight = height;
540
+ if (!isInRenderElement) {
541
+ this._onDidChangeItemHeight.fire({ element, height: templateData.rowContainer.offsetHeight });
542
+ }
543
+ return isFullyRendered;
544
+ }
545
+ renderTreeData(data, element, templateData, treeDataIndex) {
546
+ const treeDisposables = ( new DisposableStore());
547
+ const ref = treeDisposables.add(this._treePool.get());
548
+ const tree = ref.object;
549
+ treeDisposables.add(tree.onDidOpen((e) => {
550
+ if (e.element && !('children' in e.element)) {
551
+ this.openerService.open(e.element.uri);
552
+ }
553
+ }));
554
+ treeDisposables.add(tree.onDidChangeCollapseState(() => {
555
+ this._onDidChangeItemHeight.fire({ element, height: templateData.rowContainer.offsetHeight });
556
+ }));
557
+ treeDisposables.add(tree.onContextMenu((e) => {
558
+ e.browserEvent.preventDefault();
559
+ e.browserEvent.stopPropagation();
560
+ }));
561
+ tree.setInput(data).then(() => {
562
+ if (!ref.isStale()) {
563
+ tree.layout();
564
+ this._onDidChangeItemHeight.fire({ element, height: templateData.rowContainer.offsetHeight });
565
+ }
566
+ });
567
+ if (isResponseVM(element)) {
568
+ const fileTreeFocusInfo = {
569
+ treeDataId: ( data.uri.toString()),
570
+ treeIndex: treeDataIndex,
571
+ focus() {
572
+ tree.domFocus();
573
+ }
574
+ };
575
+ treeDisposables.add(tree.onDidFocus(() => {
576
+ this.focusedFileTreesByResponseId.set(element.id, fileTreeFocusInfo.treeIndex);
577
+ }));
578
+ const fileTrees = this.fileTreesByResponseId.get(element.id) ?? [];
579
+ fileTrees.push(fileTreeFocusInfo);
580
+ this.fileTreesByResponseId.set(element.id, distinct(fileTrees, (v) => v.treeDataId));
581
+ treeDisposables.add(toDisposable(() => this.fileTreesByResponseId.set(element.id, fileTrees.filter(v => v.treeDataId !== ( data.uri.toString())))));
582
+ }
583
+ return {
584
+ element: tree.getHTMLElement().parentElement,
585
+ dispose: () => {
586
+ treeDisposables.dispose();
587
+ }
588
+ };
589
+ }
590
+ renderContentReferencesIfNeeded(element, templateData, disposables) {
591
+ dom.clearNode(templateData.referencesListContainer);
592
+ if (isResponseVM(element) && this._usedReferencesEnabled && element.contentReferences.length) {
593
+ dom.show(templateData.referencesListContainer);
594
+ const contentReferencesListResult = this.renderContentReferencesListData(element.contentReferences, element, templateData);
595
+ templateData.referencesListContainer.appendChild(contentReferencesListResult.element);
596
+ disposables.add(contentReferencesListResult);
597
+ }
598
+ else {
599
+ dom.hide(templateData.referencesListContainer);
600
+ }
601
+ }
602
+ renderContentReferencesListData(data, element, templateData) {
603
+ const listDisposables = ( new DisposableStore());
604
+ const referencesLabel = data.length > 1 ?
605
+ ( localizeWithPath(
606
+ 'vs/workbench/contrib/chat/browser/chatListRenderer',
607
+ 'usedReferencesPlural',
608
+ "Used {0} references",
609
+ data.length
610
+ )) :
611
+ ( localizeWithPath(
612
+ 'vs/workbench/contrib/chat/browser/chatListRenderer',
613
+ 'usedReferencesSingular',
614
+ "Used {0} reference",
615
+ 1
616
+ ));
617
+ const iconElement = $('.chat-used-context-icon');
618
+ const icon = (element) => element.usedReferencesExpanded ? Codicon.chevronDown : Codicon.chevronRight;
619
+ iconElement.classList.add(...ThemeIcon.asClassNameArray(icon(element)));
620
+ const buttonElement = $('.chat-used-context-label', undefined);
621
+ const collapseButton = ( new Button(buttonElement, {
622
+ buttonBackground: undefined,
623
+ buttonBorder: undefined,
624
+ buttonForeground: undefined,
625
+ buttonHoverBackground: undefined,
626
+ buttonSecondaryBackground: undefined,
627
+ buttonSecondaryForeground: undefined,
628
+ buttonSecondaryHoverBackground: undefined,
629
+ buttonSeparator: undefined
630
+ }));
631
+ const container = $('.chat-used-context', undefined, buttonElement);
632
+ collapseButton.label = referencesLabel;
633
+ collapseButton.element.append(iconElement);
634
+ this.updateAriaLabel(collapseButton.element, referencesLabel, element.usedReferencesExpanded);
635
+ container.classList.toggle('chat-used-context-collapsed', !element.usedReferencesExpanded);
636
+ listDisposables.add(collapseButton.onDidClick(() => {
637
+ iconElement.classList.remove(...ThemeIcon.asClassNameArray(icon(element)));
638
+ element.usedReferencesExpanded = !element.usedReferencesExpanded;
639
+ iconElement.classList.add(...ThemeIcon.asClassNameArray(icon(element)));
640
+ container.classList.toggle('chat-used-context-collapsed', !element.usedReferencesExpanded);
641
+ this._onDidChangeItemHeight.fire({ element, height: templateData.rowContainer.offsetHeight });
642
+ this.updateAriaLabel(collapseButton.element, referencesLabel, element.usedReferencesExpanded);
643
+ }));
644
+ const ref = listDisposables.add(this._contentReferencesListPool.get());
645
+ const list = ref.object;
646
+ container.appendChild(list.getHTMLElement().parentElement);
647
+ listDisposables.add(list.onDidOpen((e) => {
648
+ if (e.element) {
649
+ this.editorService.openEditor({
650
+ resource: 'uri' in e.element.reference ? e.element.reference.uri : e.element.reference,
651
+ options: {
652
+ ...e.editorOptions,
653
+ ...{
654
+ selection: 'range' in e.element.reference ? e.element.reference.range : undefined
655
+ }
656
+ }
657
+ });
658
+ }
659
+ }));
660
+ listDisposables.add(list.onContextMenu((e) => {
661
+ e.browserEvent.preventDefault();
662
+ e.browserEvent.stopPropagation();
663
+ }));
664
+ const maxItemsShown = 6;
665
+ const itemsShown = Math.min(data.length, maxItemsShown);
666
+ const height = itemsShown * 22;
667
+ list.layout(height);
668
+ list.getHTMLElement().style.height = `${height}px`;
669
+ list.splice(0, list.length, data);
670
+ return {
671
+ element: container,
672
+ dispose: () => {
673
+ listDisposables.dispose();
674
+ }
675
+ };
676
+ }
677
+ updateAriaLabel(element, label, expanded) {
678
+ element.ariaLabel = expanded ? ( localizeWithPath(
679
+ 'vs/workbench/contrib/chat/browser/chatListRenderer',
680
+ 'usedReferencesExpanded',
681
+ "{0}, expanded",
682
+ label
683
+ )) : ( localizeWithPath(
684
+ 'vs/workbench/contrib/chat/browser/chatListRenderer',
685
+ 'usedReferencesCollapsed',
686
+ "{0}, collapsed",
687
+ label
688
+ ));
689
+ }
690
+ renderPlaceholder(markdown, templateData) {
691
+ const codicon = $('.interactive-response-codicon-details', undefined, renderIcon({ id: 'sync~spin' }));
692
+ codicon.classList.add('interactive-response-placeholder-codicon');
693
+ const result = dom.append(templateData.value, codicon);
694
+ const content = this.renderer.render(markdown);
695
+ content.element.className = 'interactive-response-placeholder-content';
696
+ result.appendChild(content.element);
697
+ return { element: result, dispose: () => content.dispose() };
698
+ }
699
+ renderMarkdown(markdown, element, templateData, fillInIncompleteTokens = false) {
700
+ const disposables = ( new DisposableStore());
701
+ let codeBlockIndex = 0;
702
+ markdown = ( new MarkdownString(markdown.value, {
703
+ isTrusted: {
704
+ enabledCommands: typeof markdown.isTrusted === 'object' ? markdown.isTrusted?.enabledCommands : [] ?? []
705
+ }
706
+ }));
707
+ const orderedDisposablesList = [];
708
+ const codeblocks = [];
709
+ const result = this.renderer.render(markdown, {
710
+ fillInIncompleteTokens,
711
+ codeBlockRendererSync: (languageId, text) => {
712
+ const vulns = extractVulnerabilitiesFromText(text);
713
+ const hideToolbar = isResponseVM(element) && element.errorDetails?.responseIsFiltered;
714
+ const data = { languageId, text: vulns.newText, codeBlockIndex: codeBlockIndex++, element, hideToolbar, parentContextKeyService: templateData.contextKeyService, vulns: vulns.vulnerabilities };
715
+ const ref = this.renderCodeBlock(data, disposables);
716
+ disposables.add(ref.object.onDidChangeContentHeight(() => {
717
+ ref.object.layout(this._currentLayoutWidth);
718
+ this._onDidChangeItemHeight.fire({ element, height: templateData.rowContainer.offsetHeight });
719
+ }));
720
+ if (isResponseVM(element)) {
721
+ const info = {
722
+ codeBlockIndex: data.codeBlockIndex,
723
+ element,
724
+ focus() {
725
+ ref.object.focus();
726
+ }
727
+ };
728
+ codeblocks.push(info);
729
+ this.codeBlocksByEditorUri.set(ref.object.textModel.uri, info);
730
+ disposables.add(toDisposable(() => this.codeBlocksByEditorUri.delete(ref.object.textModel.uri)));
731
+ }
732
+ orderedDisposablesList.push(ref);
733
+ return ref.object.element;
734
+ },
735
+ asyncRenderCallback: () => this._onDidChangeItemHeight.fire({ element, height: templateData.rowContainer.offsetHeight }),
736
+ });
737
+ if (isResponseVM(element)) {
738
+ this.codeBlocksByResponseId.set(element.id, codeblocks);
739
+ disposables.add(toDisposable(() => this.codeBlocksByResponseId.delete(element.id)));
740
+ }
741
+ walkTreeAndAnnotateReferenceLinks(result.element);
742
+ orderedDisposablesList.reverse().forEach(d => disposables.add(d));
743
+ return {
744
+ element: result.element,
745
+ dispose() {
746
+ result.dispose();
747
+ disposables.dispose();
748
+ }
749
+ };
750
+ }
751
+ renderCodeBlock(data, disposables) {
752
+ const ref = this._editorPool.get();
753
+ const editorInfo = ref.object;
754
+ editorInfo.render(data, this._currentLayoutWidth);
755
+ return ref;
756
+ }
757
+ getDataForProgressiveRender(element, data, renderData) {
758
+ const rate = this.getProgressiveRenderRate(element);
759
+ const numWordsToRender = renderData.lastRenderTime === 0 ?
760
+ 1 :
761
+ renderData.renderedWordCount +
762
+ Math.floor((Date.now() - renderData.lastRenderTime) / 1000 * rate);
763
+ if (numWordsToRender === renderData.renderedWordCount) {
764
+ return undefined;
765
+ }
766
+ return {
767
+ ...getNWords(data.value, numWordsToRender),
768
+ rate
769
+ };
770
+ }
771
+ disposeElement(node, index, templateData) {
772
+ templateData.elementDisposables.clear();
773
+ }
774
+ disposeTemplate(templateData) {
775
+ templateData.templateDisposables.dispose();
776
+ }
777
+ };
778
+ ChatListItemRenderer = ChatListItemRenderer_1 = ( __decorate([
779
+ ( __param(3, IInstantiationService)),
780
+ ( __param(4, IConfigurationService)),
781
+ ( __param(5, ILogService)),
782
+ ( __param(6, ICommandService)),
783
+ ( __param(7, IOpenerService)),
784
+ ( __param(8, IContextKeyService)),
785
+ ( __param(9, IChatService)),
786
+ ( __param(10, IEditorService)),
787
+ ( __param(11, IProductService)),
788
+ ( __param(12, IThemeService))
789
+ ], ChatListItemRenderer));
790
+ let ChatListDelegate = class ChatListDelegate {
791
+ constructor(logService) {
792
+ this.logService = logService;
793
+ }
794
+ _traceLayout(method, message) {
795
+ {
796
+ this.logService.trace(`ChatListDelegate#${method}: ${message}`);
797
+ }
798
+ }
799
+ getHeight(element) {
800
+ const kind = isRequestVM(element) ? 'request' : 'response';
801
+ const height = ('currentRenderedHeight' in element ? element.currentRenderedHeight : undefined) ?? 200;
802
+ this._traceLayout('getHeight', `${kind}, height=${height}`);
803
+ return height;
804
+ }
805
+ getTemplateId(element) {
806
+ return ChatListItemRenderer.ID;
807
+ }
808
+ hasDynamicHeight(element) {
809
+ return true;
810
+ }
811
+ };
812
+ ChatListDelegate = ( __decorate([
813
+ ( __param(0, ILogService))
814
+ ], ChatListDelegate));
815
+ let ChatAccessibilityProvider = class ChatAccessibilityProvider {
816
+ constructor(_accessibleViewService) {
817
+ this._accessibleViewService = _accessibleViewService;
818
+ }
819
+ getWidgetRole() {
820
+ return 'list';
821
+ }
822
+ getRole(element) {
823
+ return 'listitem';
824
+ }
825
+ getWidgetAriaLabel() {
826
+ return ( localizeWithPath('vs/workbench/contrib/chat/browser/chatListRenderer', 'chat', "Chat"));
827
+ }
828
+ getAriaLabel(element) {
829
+ if (isRequestVM(element)) {
830
+ return element.messageText;
831
+ }
832
+ if (isResponseVM(element)) {
833
+ return this._getLabelWithCodeBlockCount(element);
834
+ }
835
+ if (isWelcomeVM(element)) {
836
+ return ( element.content.map(c => 'value' in c ? c.value : ( c.map(followup => followup.message)).join('\n'))).join('\n');
837
+ }
838
+ return '';
839
+ }
840
+ _getLabelWithCodeBlockCount(element) {
841
+ const accessibleViewHint = this._accessibleViewService.getOpenAriaHint("accessibility.verbosity.panelChat" );
842
+ let label = '';
843
+ let commandFollowUpInfo;
844
+ const commandFollowupLength = element.commandFollowups?.length ?? 0;
845
+ switch (commandFollowupLength) {
846
+ case 0:
847
+ break;
848
+ case 1:
849
+ commandFollowUpInfo = ( localizeWithPath(
850
+ 'vs/workbench/contrib/chat/browser/chatListRenderer',
851
+ 'commandFollowUpInfo',
852
+ "Command: {0}",
853
+ element.commandFollowups[0].title
854
+ ));
855
+ break;
856
+ default:
857
+ commandFollowUpInfo = ( localizeWithPath(
858
+ 'vs/workbench/contrib/chat/browser/chatListRenderer',
859
+ 'commandFollowUpInfoMany',
860
+ "Commands: {0}",
861
+ ( element.commandFollowups.map(followup => followup.title)).join(', ')
862
+ ));
863
+ }
864
+ const fileTreeCount = element.response.value.filter((v) => !('value' in v))?.length ?? 0;
865
+ let fileTreeCountHint = '';
866
+ switch (fileTreeCount) {
867
+ case 0:
868
+ break;
869
+ case 1:
870
+ fileTreeCountHint = ( localizeWithPath(
871
+ 'vs/workbench/contrib/chat/browser/chatListRenderer',
872
+ 'singleFileTreeHint',
873
+ "1 file tree"
874
+ ));
875
+ break;
876
+ default:
877
+ fileTreeCountHint = ( localizeWithPath(
878
+ 'vs/workbench/contrib/chat/browser/chatListRenderer',
879
+ 'multiFileTreeHint',
880
+ "{0} file trees",
881
+ fileTreeCount
882
+ ));
883
+ break;
884
+ }
885
+ const codeBlockCount = marked.lexer(element.response.asString()).filter(token => token.type === 'code')?.length ?? 0;
886
+ switch (codeBlockCount) {
887
+ case 0:
888
+ label = accessibleViewHint ? ( localizeWithPath(
889
+ 'vs/workbench/contrib/chat/browser/chatListRenderer',
890
+ 'noCodeBlocksHint',
891
+ "{0} {1} {2}",
892
+ fileTreeCountHint,
893
+ element.response.asString(),
894
+ accessibleViewHint
895
+ )) : ( localizeWithPath(
896
+ 'vs/workbench/contrib/chat/browser/chatListRenderer',
897
+ 'noCodeBlocks',
898
+ "{0} {1}",
899
+ fileTreeCountHint,
900
+ element.response.asString()
901
+ ));
902
+ break;
903
+ case 1:
904
+ label = accessibleViewHint ? ( localizeWithPath(
905
+ 'vs/workbench/contrib/chat/browser/chatListRenderer',
906
+ 'singleCodeBlockHint',
907
+ "{0} 1 code block: {1} {2}",
908
+ fileTreeCountHint,
909
+ element.response.asString(),
910
+ accessibleViewHint
911
+ )) : ( localizeWithPath(
912
+ 'vs/workbench/contrib/chat/browser/chatListRenderer',
913
+ 'singleCodeBlock',
914
+ "{0} 1 code block: {1}",
915
+ fileTreeCountHint,
916
+ element.response.asString()
917
+ ));
918
+ break;
919
+ default:
920
+ label = accessibleViewHint ? ( localizeWithPath(
921
+ 'vs/workbench/contrib/chat/browser/chatListRenderer',
922
+ 'multiCodeBlockHint',
923
+ "{0} {1} code blocks: {2}",
924
+ fileTreeCountHint,
925
+ codeBlockCount,
926
+ element.response.asString(),
927
+ accessibleViewHint
928
+ )) : ( localizeWithPath(
929
+ 'vs/workbench/contrib/chat/browser/chatListRenderer',
930
+ 'multiCodeBlock',
931
+ "{0} {1} code blocks",
932
+ fileTreeCountHint,
933
+ codeBlockCount,
934
+ element.response.asString()
935
+ ));
936
+ break;
937
+ }
938
+ return commandFollowUpInfo ? commandFollowUpInfo + ', ' + label : label;
939
+ }
940
+ };
941
+ ChatAccessibilityProvider = ( __decorate([
942
+ ( __param(0, IAccessibleViewService))
943
+ ], ChatAccessibilityProvider));
944
+ let EditorPool = class EditorPool extends Disposable {
945
+ get inUse() {
946
+ return this._pool.inUse;
947
+ }
948
+ constructor(options, instantiationService) {
949
+ super();
950
+ this.options = options;
951
+ this.instantiationService = instantiationService;
952
+ this._pool = this._register(( new ResourcePool(() => this.editorFactory())));
953
+ }
954
+ editorFactory() {
955
+ return this.instantiationService.createInstance(CodeBlockPart, this.options, MenuId.ChatCodeBlock);
956
+ }
957
+ get() {
958
+ const object = this._pool.get();
959
+ let stale = false;
960
+ return {
961
+ object,
962
+ isStale: () => stale,
963
+ dispose: () => {
964
+ stale = true;
965
+ this._pool.release(object);
966
+ }
967
+ };
968
+ }
969
+ };
970
+ EditorPool = ( __decorate([
971
+ ( __param(1, IInstantiationService))
972
+ ], EditorPool));
973
+ let TreePool = class TreePool extends Disposable {
974
+ get inUse() {
975
+ return this._pool.inUse;
976
+ }
977
+ constructor(_onDidChangeVisibility, instantiationService, configService, themeService) {
978
+ super();
979
+ this._onDidChangeVisibility = _onDidChangeVisibility;
980
+ this.instantiationService = instantiationService;
981
+ this.configService = configService;
982
+ this.themeService = themeService;
983
+ this._pool = this._register(( new ResourcePool(() => this.treeFactory())));
984
+ }
985
+ treeFactory() {
986
+ const resourceLabels = this.instantiationService.createInstance(ResourceLabels, { onDidChangeVisibility: this._onDidChangeVisibility });
987
+ const container = $('.interactive-response-progress-tree');
988
+ createFileIconThemableTreeContainerScope(container, this.themeService);
989
+ const tree = this.instantiationService.createInstance(WorkbenchCompressibleAsyncDataTree, 'ChatListRenderer', container, ( new ChatListTreeDelegate()), ( new ChatListTreeCompressionDelegate()), [( new ChatListTreeRenderer(resourceLabels, this.configService.getValue('explorer.decorations')))], ( new ChatListTreeDataSource()), {
990
+ collapseByDefault: () => false,
991
+ expandOnlyOnTwistieClick: () => false,
992
+ identityProvider: {
993
+ getId: (e) => ( e.uri.toString())
994
+ },
995
+ accessibilityProvider: {
996
+ getAriaLabel: (element) => element.label,
997
+ getWidgetAriaLabel: () => ( localizeWithPath(
998
+ 'vs/workbench/contrib/chat/browser/chatListRenderer',
999
+ 'treeAriaLabel',
1000
+ "File Tree"
1001
+ ))
1002
+ },
1003
+ alwaysConsumeMouseWheel: false
1004
+ });
1005
+ return tree;
1006
+ }
1007
+ get() {
1008
+ const object = this._pool.get();
1009
+ let stale = false;
1010
+ return {
1011
+ object,
1012
+ isStale: () => stale,
1013
+ dispose: () => {
1014
+ stale = true;
1015
+ this._pool.release(object);
1016
+ }
1017
+ };
1018
+ }
1019
+ };
1020
+ TreePool = ( __decorate([
1021
+ ( __param(1, IInstantiationService)),
1022
+ ( __param(2, IConfigurationService)),
1023
+ ( __param(3, IThemeService))
1024
+ ], TreePool));
1025
+ let ContentReferencesListPool = class ContentReferencesListPool extends Disposable {
1026
+ get inUse() {
1027
+ return this._pool.inUse;
1028
+ }
1029
+ constructor(_onDidChangeVisibility, instantiationService, themeService) {
1030
+ super();
1031
+ this._onDidChangeVisibility = _onDidChangeVisibility;
1032
+ this.instantiationService = instantiationService;
1033
+ this.themeService = themeService;
1034
+ this._pool = this._register(( new ResourcePool(() => this.listFactory())));
1035
+ }
1036
+ listFactory() {
1037
+ const resourceLabels = this.instantiationService.createInstance(ResourceLabels, { onDidChangeVisibility: this._onDidChangeVisibility });
1038
+ const container = $('.chat-used-context-list');
1039
+ createFileIconThemableTreeContainerScope(container, this.themeService);
1040
+ const list = this.instantiationService.createInstance(WorkbenchList, 'ChatListRenderer', container, ( new ContentReferencesListDelegate()), [( new ContentReferencesListRenderer(resourceLabels))], {
1041
+ alwaysConsumeMouseWheel: false,
1042
+ });
1043
+ return list;
1044
+ }
1045
+ get() {
1046
+ const object = this._pool.get();
1047
+ let stale = false;
1048
+ return {
1049
+ object,
1050
+ isStale: () => stale,
1051
+ dispose: () => {
1052
+ stale = true;
1053
+ this._pool.release(object);
1054
+ }
1055
+ };
1056
+ }
1057
+ };
1058
+ ContentReferencesListPool = ( __decorate([
1059
+ ( __param(1, IInstantiationService)),
1060
+ ( __param(2, IThemeService))
1061
+ ], ContentReferencesListPool));
1062
+ class ContentReferencesListDelegate {
1063
+ getHeight(element) {
1064
+ return 22;
1065
+ }
1066
+ getTemplateId(element) {
1067
+ return ContentReferencesListRenderer.TEMPLATE_ID;
1068
+ }
1069
+ }
1070
+ class ContentReferencesListRenderer {
1071
+ static { this.TEMPLATE_ID = 'contentReferencesListRenderer'; }
1072
+ constructor(labels) {
1073
+ this.labels = labels;
1074
+ this.templateId = ContentReferencesListRenderer.TEMPLATE_ID;
1075
+ }
1076
+ renderTemplate(container) {
1077
+ const templateDisposables = ( new DisposableStore());
1078
+ const label = templateDisposables.add(this.labels.create(container, { supportHighlights: true }));
1079
+ return { templateDisposables, label };
1080
+ }
1081
+ renderElement(element, index, templateData, height) {
1082
+ templateData.label.element.style.display = 'flex';
1083
+ templateData.label.setFile('uri' in element.reference ? element.reference.uri : element.reference, {
1084
+ fileKind: FileKind.FILE,
1085
+ fileDecorations: { badges: false, colors: false },
1086
+ range: 'range' in element.reference ? element.reference.range : undefined
1087
+ });
1088
+ }
1089
+ disposeTemplate(templateData) {
1090
+ templateData.templateDisposables.dispose();
1091
+ }
1092
+ }
1093
+ class ResourcePool extends Disposable {
1094
+ get inUse() {
1095
+ return this._inUse;
1096
+ }
1097
+ constructor(_itemFactory) {
1098
+ super();
1099
+ this._itemFactory = _itemFactory;
1100
+ this.pool = [];
1101
+ this._inUse = ( new Set());
1102
+ }
1103
+ get() {
1104
+ if (this.pool.length > 0) {
1105
+ const item = this.pool.pop();
1106
+ this._inUse.add(item);
1107
+ return item;
1108
+ }
1109
+ const item = this._register(this._itemFactory());
1110
+ this._inUse.add(item);
1111
+ return item;
1112
+ }
1113
+ release(item) {
1114
+ this._inUse.delete(item);
1115
+ this.pool.push(item);
1116
+ }
1117
+ }
1118
+ class ChatVoteButton extends MenuEntryActionViewItem {
1119
+ render(container) {
1120
+ super.render(container);
1121
+ container.classList.toggle('checked', this.action.checked);
1122
+ }
1123
+ }
1124
+ class ChatListTreeDelegate {
1125
+ static { this.ITEM_HEIGHT = 22; }
1126
+ getHeight(element) {
1127
+ return ChatListTreeDelegate.ITEM_HEIGHT;
1128
+ }
1129
+ getTemplateId(element) {
1130
+ return 'chatListTreeTemplate';
1131
+ }
1132
+ }
1133
+ class ChatListTreeCompressionDelegate {
1134
+ isIncompressible(element) {
1135
+ return !element.children;
1136
+ }
1137
+ }
1138
+ class ChatListTreeRenderer {
1139
+ constructor(labels, decorations) {
1140
+ this.labels = labels;
1141
+ this.decorations = decorations;
1142
+ this.templateId = 'chatListTreeTemplate';
1143
+ }
1144
+ renderCompressedElements(element, index, templateData, height) {
1145
+ templateData.label.element.style.display = 'flex';
1146
+ const label = ( element.element.elements.map((e) => e.label));
1147
+ templateData.label.setResource({ resource: element.element.elements[0].uri, name: label }, {
1148
+ title: element.element.elements[0].label,
1149
+ fileKind: element.children ? FileKind.FOLDER : FileKind.FILE,
1150
+ extraClasses: ['explorer-item'],
1151
+ fileDecorations: this.decorations
1152
+ });
1153
+ }
1154
+ renderTemplate(container) {
1155
+ const templateDisposables = ( new DisposableStore());
1156
+ const label = templateDisposables.add(this.labels.create(container, { supportHighlights: true }));
1157
+ return { templateDisposables, label };
1158
+ }
1159
+ renderElement(element, index, templateData, height) {
1160
+ templateData.label.element.style.display = 'flex';
1161
+ const hasExtension = /\.[^/.]+$/.test(element.element.label);
1162
+ if (!element.children.length && hasExtension) {
1163
+ templateData.label.setFile(element.element.uri, {
1164
+ fileKind: FileKind.FILE,
1165
+ hidePath: true,
1166
+ fileDecorations: this.decorations,
1167
+ });
1168
+ }
1169
+ else {
1170
+ templateData.label.setResource({ resource: element.element.uri, name: element.element.label }, {
1171
+ title: element.element.label,
1172
+ fileKind: FileKind.FOLDER,
1173
+ fileDecorations: this.decorations
1174
+ });
1175
+ }
1176
+ }
1177
+ disposeTemplate(templateData) {
1178
+ templateData.templateDisposables.dispose();
1179
+ }
1180
+ }
1181
+ class ChatListTreeDataSource {
1182
+ hasChildren(element) {
1183
+ return !!element.children;
1184
+ }
1185
+ async getChildren(element) {
1186
+ return element.children ?? [];
1187
+ }
1188
+ }
1189
+ function isInteractiveProgressTreeData(item) {
1190
+ return 'label' in item;
1191
+ }
1192
+ function contentToMarkdown(str) {
1193
+ return typeof str === 'string' ? { value: str } : str;
1194
+ }
1195
+ export { ChatAccessibilityProvider, ChatListDelegate, ChatListItemRenderer };