@codingame/monaco-vscode-api 37.6.1 → 38.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2562) hide show
  1. package/css.d.ts +1 -1
  2. package/css.js +7 -1
  3. package/lifecycle.d.ts +1 -0
  4. package/lifecycle.js +36 -20
  5. package/missing-services.js +687 -99
  6. package/package.json +8 -8
  7. package/services.d.ts +34 -4
  8. package/services.js +40 -8
  9. package/vscode/product.json.js +1 -1
  10. package/vscode/src/vs/base/browser/browser.js +2 -1
  11. package/vscode/src/vs/base/browser/dom.d.ts +10 -0
  12. package/vscode/src/vs/base/browser/dom.js +32 -6
  13. package/vscode/src/vs/base/browser/dompurify/dompurify.d.ts +3 -3
  14. package/vscode/src/vs/base/browser/markdownRenderer.js +78 -4
  15. package/vscode/src/vs/base/browser/pixelRatio.js +3 -2
  16. package/vscode/src/vs/base/browser/ui/animations/animations.d.ts +31 -9
  17. package/vscode/src/vs/base/browser/ui/animations/animations.js +49 -32
  18. package/vscode/src/vs/base/browser/ui/button/button.js +1 -1
  19. package/vscode/src/vs/base/browser/ui/codicons/codicon/codicon.ttf +0 -0
  20. package/vscode/src/vs/base/browser/ui/contextview/contextview.d.ts +12 -3
  21. package/vscode/src/vs/base/browser/ui/contextview/contextview.js +32 -21
  22. package/vscode/src/vs/base/browser/ui/grid/gridview.d.ts +1 -0
  23. package/vscode/src/vs/base/browser/ui/grid/gridview.js +27 -8
  24. package/vscode/src/vs/base/browser/ui/hover/hover.d.ts +3 -1
  25. package/vscode/src/vs/base/browser/ui/hover/hoverWidget.css +13 -8
  26. package/vscode/src/vs/base/browser/ui/iconLabel/iconlabel.css +3 -0
  27. package/vscode/src/vs/base/browser/ui/inputbox/inputBox.js +6 -5
  28. package/vscode/src/vs/base/browser/ui/list/listView.js +16 -5
  29. package/vscode/src/vs/base/browser/ui/list/listWidget.js +9 -8
  30. package/vscode/src/vs/base/browser/ui/menu/menu.js +94 -2
  31. package/vscode/src/vs/base/browser/ui/pixelSpinner/pixelSpinner.css +2 -1
  32. package/vscode/src/vs/base/browser/ui/radio/radio.css +11 -0
  33. package/vscode/src/vs/base/browser/ui/radio/radio.d.ts +2 -0
  34. package/vscode/src/vs/base/browser/ui/radio/radio.js +9 -1
  35. package/vscode/src/vs/base/browser/ui/selectBox/selectBox.d.ts +7 -1
  36. package/vscode/src/vs/base/browser/ui/selectBox/selectBoxCustom.js +17 -5
  37. package/vscode/src/vs/base/browser/ui/toggle/switch.css +16 -7
  38. package/vscode/src/vs/base/browser/ui/toggle/toggle.css +9 -1
  39. package/vscode/src/vs/base/browser/ui/toggle/toggle.js +5 -1
  40. package/vscode/src/vs/base/browser/ui/toolbar/toolbar.d.ts +5 -0
  41. package/vscode/src/vs/base/browser/ui/toolbar/toolbar.js +18 -8
  42. package/vscode/src/vs/base/browser/ui/tree/abstractTree.d.ts +3 -0
  43. package/vscode/src/vs/base/browser/ui/tree/abstractTree.js +20 -6
  44. package/vscode/src/vs/base/browser/ui/tree/asyncDataTree.d.ts +8 -0
  45. package/vscode/src/vs/base/browser/ui/tree/asyncDataTree.js +8 -1
  46. package/vscode/src/vs/base/browser/ui/tree/objectTree.d.ts +1 -0
  47. package/vscode/src/vs/base/browser/ui/tree/objectTree.js +3 -0
  48. package/vscode/src/vs/base/common/async.js +89 -10
  49. package/vscode/src/vs/base/common/codicons.d.ts +3 -0
  50. package/vscode/src/vs/base/common/codiconsLibrary.d.ts +3 -0
  51. package/vscode/src/vs/base/common/codiconsLibrary.js +3 -0
  52. package/vscode/src/vs/base/common/date.js +5 -1
  53. package/vscode/src/vs/base/common/event.js +1 -1
  54. package/vscode/src/vs/base/common/fuzzyScorer.js +26 -13
  55. package/vscode/src/vs/base/common/hash.d.ts +12 -0
  56. package/vscode/src/vs/base/common/hash.js +18 -3
  57. package/vscode/src/vs/base/common/json.d.ts +6 -0
  58. package/vscode/src/vs/base/common/json.js +14 -2
  59. package/vscode/src/vs/base/common/jsonEdit.js +7 -1
  60. package/vscode/src/vs/base/common/lifecycle.d.ts +3 -2
  61. package/vscode/src/vs/base/common/lifecycle.js +3 -3
  62. package/vscode/src/vs/base/common/network.d.ts +5 -0
  63. package/vscode/src/vs/base/common/network.js +3 -0
  64. package/vscode/src/vs/base/common/objects.js +11 -8
  65. package/vscode/src/vs/base/common/product.d.ts +4 -0
  66. package/vscode/src/vs/base/common/resources.d.ts +5 -3
  67. package/vscode/src/vs/base/common/resources.js +14 -3
  68. package/vscode/src/vs/base/common/strings.js +4 -1
  69. package/vscode/src/vs/base/common/uri.js +21 -11
  70. package/vscode/src/vs/base/common/validation.js +29 -1
  71. package/vscode/src/vs/base/parts/request/common/request.d.ts +12 -0
  72. package/vscode/src/vs/editor/browser/config/fontMeasurements.d.ts +1 -0
  73. package/vscode/src/vs/editor/browser/config/fontMeasurements.js +13 -3
  74. package/vscode/src/vs/editor/browser/controller/editContext/clipboardUtils.d.ts +2 -0
  75. package/vscode/src/vs/editor/browser/controller/editContext/clipboardUtils.js +3 -0
  76. package/vscode/src/vs/editor/browser/controller/editContext/native/nativeEditContext.js +3 -1
  77. package/vscode/src/vs/editor/browser/controller/editContext/native/nativeEditContextUtils.js +2 -2
  78. package/vscode/src/vs/editor/browser/controller/editContext/textArea/textAreaEditContext.js +3 -1
  79. package/vscode/src/vs/editor/browser/editorBrowser.d.ts +1 -0
  80. package/vscode/src/vs/editor/browser/services/openerService.js +3 -2
  81. package/vscode/src/vs/editor/browser/view/viewController.d.ts +2 -2
  82. package/vscode/src/vs/editor/browser/view/viewController.js +2 -2
  83. package/vscode/src/vs/editor/browser/view.js +2 -0
  84. package/vscode/src/vs/editor/browser/viewParts/contentWidgets/contentWidgets.js +7 -0
  85. package/vscode/src/vs/editor/browser/viewParts/glyphMargin/glyphMargin.js +6 -0
  86. package/vscode/src/vs/editor/browser/viewParts/overlayWidgets/overlayWidgets.js +6 -0
  87. package/vscode/src/vs/editor/browser/viewParts/whitespace/whitespace.d.ts +1 -0
  88. package/vscode/src/vs/editor/browser/viewParts/whitespace/whitespace.js +10 -3
  89. package/vscode/src/vs/editor/browser/viewParts/wordWrapIndicator/wordWrapIndicator.css +10 -0
  90. package/vscode/src/vs/editor/browser/viewParts/wordWrapIndicator/wordWrapIndicator.d.ts +33 -0
  91. package/vscode/src/vs/editor/browser/viewParts/wordWrapIndicator/wordWrapIndicator.js +102 -0
  92. package/vscode/src/vs/editor/browser/widget/codeEditor/codeEditorWidget.js +21 -11
  93. package/vscode/src/vs/editor/browser/widget/diffEditor/commands.js +12 -12
  94. package/vscode/src/vs/editor/browser/widget/diffEditor/components/accessibleDiffViewer.js +12 -12
  95. package/vscode/src/vs/editor/browser/widget/diffEditor/components/diffEditorEditors.js +1 -1
  96. package/vscode/src/vs/editor/browser/widget/diffEditor/components/diffEditorViewZones/inlineDiffDeletedCodeMargin.js +4 -4
  97. package/vscode/src/vs/editor/browser/widget/diffEditor/diffEditor.contribution.js +4 -4
  98. package/vscode/src/vs/editor/browser/widget/diffEditor/diffEditorOptions.d.ts +1 -0
  99. package/vscode/src/vs/editor/browser/widget/diffEditor/diffEditorWidget.d.ts +3 -0
  100. package/vscode/src/vs/editor/browser/widget/diffEditor/diffEditorWidget.js +2 -1
  101. package/vscode/src/vs/editor/browser/widget/diffEditor/features/hideUnchangedRegionsFeature.d.ts +3 -2
  102. package/vscode/src/vs/editor/browser/widget/diffEditor/features/hideUnchangedRegionsFeature.js +153 -46
  103. package/vscode/src/vs/editor/browser/widget/diffEditor/features/movedBlocksLinesFeature.js +4 -4
  104. package/vscode/src/vs/editor/browser/widget/diffEditor/features/revertButtonsFeature.js +1 -1
  105. package/vscode/src/vs/editor/browser/widget/diffEditor/registrations.contribution.js +5 -5
  106. package/vscode/src/vs/editor/browser/widget/diffEditor/style.css +123 -0
  107. package/vscode/src/vs/editor/browser/widget/multiDiffEditor/colors.js +3 -3
  108. package/vscode/src/vs/editor/browser/widget/multiDiffEditor/diffEditorItemTemplate.js +6 -2
  109. package/vscode/src/vs/editor/browser/widget/multiDiffEditor/multiDiffEditorOptions.d.ts +8 -5
  110. package/vscode/src/vs/editor/browser/widget/multiDiffEditor/multiDiffEditorOptions.js +16 -10
  111. package/vscode/src/vs/editor/browser/widget/multiDiffEditor/multiDiffEditorViewModel.d.ts +8 -6
  112. package/vscode/src/vs/editor/browser/widget/multiDiffEditor/multiDiffEditorViewModel.js +55 -24
  113. package/vscode/src/vs/editor/browser/widget/multiDiffEditor/multiDiffEditorWidget.d.ts +7 -2
  114. package/vscode/src/vs/editor/browser/widget/multiDiffEditor/multiDiffEditorWidget.js +60 -17
  115. package/vscode/src/vs/editor/browser/widget/multiDiffEditor/multiDiffEditorWidgetImpl.d.ts +4 -4
  116. package/vscode/src/vs/editor/browser/widget/multiDiffEditor/multiDiffEditorWidgetImpl.js +31 -2
  117. package/vscode/src/vs/editor/browser/widget/multiDiffEditor/style.css +95 -0
  118. package/vscode/src/vs/editor/browser/widget/multiDiffEditor/virtualizedItemManager.js +1 -0
  119. package/vscode/src/vs/editor/common/commands/columnSelectionPasteCommand.d.ts +13 -0
  120. package/vscode/src/vs/editor/common/commands/columnSelectionPasteCommand.js +68 -0
  121. package/vscode/src/vs/editor/common/config/editorConfigurationSchema.js +60 -52
  122. package/vscode/src/vs/editor/common/config/editorOptions.d.ts +90 -84
  123. package/vscode/src/vs/editor/common/config/editorOptions.js +503 -460
  124. package/vscode/src/vs/editor/common/core/editorColorRegistry.d.ts +1 -0
  125. package/vscode/src/vs/editor/common/core/editorColorRegistry.js +78 -74
  126. package/vscode/src/vs/editor/common/cursor/cursor.d.ts +1 -1
  127. package/vscode/src/vs/editor/common/cursor/cursor.js +26 -10
  128. package/vscode/src/vs/editor/common/cursor/cursorTypeEditOperations.d.ts +14 -2
  129. package/vscode/src/vs/editor/common/cursor/cursorTypeEditOperations.js +78 -14
  130. package/vscode/src/vs/editor/common/cursor/cursorTypeOperations.d.ts +1 -1
  131. package/vscode/src/vs/editor/common/cursor/cursorTypeOperations.js +10 -2
  132. package/vscode/src/vs/editor/common/cursorCommon.d.ts +7 -0
  133. package/vscode/src/vs/editor/common/cursorCommon.js +1 -0
  134. package/vscode/src/vs/editor/common/editorContextKeys.js +53 -53
  135. package/vscode/src/vs/editor/common/languages/modesRegistry.js +1 -1
  136. package/vscode/src/vs/editor/common/languages.js +56 -56
  137. package/vscode/src/vs/editor/common/model/editStack.js +1 -1
  138. package/vscode/src/vs/editor/common/multiDiffEditor.d.ts +6 -0
  139. package/vscode/src/vs/editor/common/services/inMemoryTextModelService.d.ts +17 -0
  140. package/vscode/src/vs/editor/common/services/inMemoryTextModelService.js +101 -0
  141. package/vscode/src/vs/editor/common/services/languageService.d.ts +1 -0
  142. package/vscode/src/vs/editor/common/services/languageService.js +6 -5
  143. package/vscode/src/vs/editor/common/services/resolverService.service.d.ts +8 -0
  144. package/vscode/src/vs/editor/common/standalone/standaloneEnums.d.ts +87 -84
  145. package/vscode/src/vs/editor/common/standalone/standaloneEnums.js +87 -84
  146. package/vscode/src/vs/editor/common/standaloneStrings.js +51 -51
  147. package/vscode/src/vs/editor/common/textModelEditSource.d.ts +18 -0
  148. package/vscode/src/vs/editor/common/textModelEditSource.js +13 -0
  149. package/vscode/src/vs/editor/common/viewLayout/viewLineRenderer.js +2 -2
  150. package/vscode/src/vs/editor/common/viewLayout/viewLinesViewportData.d.ts +1 -0
  151. package/vscode/src/vs/editor/common/viewLayout/viewLinesViewportData.js +3 -0
  152. package/vscode/src/vs/editor/common/viewModel/modelLineProjection.d.ts +1 -0
  153. package/vscode/src/vs/editor/common/viewModel/modelLineProjection.js +10 -1
  154. package/vscode/src/vs/editor/common/viewModel/viewModelImpl.d.ts +2 -1
  155. package/vscode/src/vs/editor/common/viewModel/viewModelImpl.js +5 -2
  156. package/vscode/src/vs/editor/common/viewModel/viewModelLines.d.ts +3 -0
  157. package/vscode/src/vs/editor/common/viewModel/viewModelLines.js +7 -0
  158. package/vscode/src/vs/editor/common/viewModel.d.ts +1 -0
  159. package/vscode/src/vs/editor/contrib/anchorSelect/browser/anchorSelect.js +6 -6
  160. package/vscode/src/vs/editor/contrib/bracketMatching/browser/bracketMatching.js +6 -6
  161. package/vscode/src/vs/editor/contrib/caretOperations/browser/caretOperations.js +2 -2
  162. package/vscode/src/vs/editor/contrib/caretOperations/browser/transpose.js +1 -1
  163. package/vscode/src/vs/editor/contrib/clipboard/browser/clipboard.js +20 -17
  164. package/vscode/src/vs/editor/contrib/codeAction/browser/codeAction.js +1 -1
  165. package/vscode/src/vs/editor/contrib/codeAction/browser/codeActionCommands.js +18 -18
  166. package/vscode/src/vs/editor/contrib/codeAction/browser/codeActionContributions.js +3 -3
  167. package/vscode/src/vs/editor/contrib/codeAction/browser/codeActionController.js +3 -3
  168. package/vscode/src/vs/editor/contrib/codeAction/browser/codeActionMenu.js +8 -8
  169. package/vscode/src/vs/editor/contrib/codeAction/browser/lightBulbWidget.js +9 -9
  170. package/vscode/src/vs/editor/contrib/codelens/browser/codelensController.js +2 -2
  171. package/vscode/src/vs/editor/contrib/colorPicker/browser/colorPickerParts/colorPickerCloseButton.js +1 -1
  172. package/vscode/src/vs/editor/contrib/colorPicker/browser/colorPickerParts/colorPickerHeader.js +1 -1
  173. package/vscode/src/vs/editor/contrib/colorPicker/browser/hoverColorPicker/hoverColorPickerParticipant.js +1 -1
  174. package/vscode/src/vs/editor/contrib/colorPicker/browser/standaloneColorPicker/standaloneColorPickerActions.js +7 -7
  175. package/vscode/src/vs/editor/contrib/comment/browser/comment.js +6 -6
  176. package/vscode/src/vs/editor/contrib/contextmenu/browser/contextmenu.js +13 -13
  177. package/vscode/src/vs/editor/contrib/cursorUndo/browser/cursorUndo.js +2 -2
  178. package/vscode/src/vs/editor/contrib/dropOrPasteInto/browser/copyPasteContribution.js +4 -4
  179. package/vscode/src/vs/editor/contrib/dropOrPasteInto/browser/copyPasteController.js +36 -35
  180. package/vscode/src/vs/editor/contrib/dropOrPasteInto/browser/defaultProviders.js +5 -5
  181. package/vscode/src/vs/editor/contrib/dropOrPasteInto/browser/dropIntoEditorController.js +3 -3
  182. package/vscode/src/vs/editor/contrib/dropOrPasteInto/browser/pasteEditSession.d.ts +10 -0
  183. package/vscode/src/vs/editor/contrib/dropOrPasteInto/browser/pasteEditSession.js +16 -0
  184. package/vscode/src/vs/editor/contrib/dropOrPasteInto/browser/postEditWidget.d.ts +3 -2
  185. package/vscode/src/vs/editor/contrib/dropOrPasteInto/browser/postEditWidget.js +26 -18
  186. package/vscode/src/vs/editor/contrib/editorState/browser/keybindingCancellation.js +1 -1
  187. package/vscode/src/vs/editor/contrib/find/browser/findController.js +17 -17
  188. package/vscode/src/vs/editor/contrib/find/browser/findWidget.js +28 -28
  189. package/vscode/src/vs/editor/contrib/folding/browser/folding.js +20 -20
  190. package/vscode/src/vs/editor/contrib/folding/browser/foldingDecorations.js +9 -9
  191. package/vscode/src/vs/editor/contrib/fontZoom/browser/fontZoom.js +3 -3
  192. package/vscode/src/vs/editor/contrib/format/browser/formatActions.js +2 -2
  193. package/vscode/src/vs/editor/contrib/gotoError/browser/gotoError.js +8 -8
  194. package/vscode/src/vs/editor/contrib/gotoError/browser/gotoErrorWidget.js +13 -13
  195. package/vscode/src/vs/editor/contrib/gotoSymbol/browser/goToCommands.js +33 -33
  196. package/vscode/src/vs/editor/contrib/gotoSymbol/browser/link/goToDefinitionAtPosition.js +1 -1
  197. package/vscode/src/vs/editor/contrib/gotoSymbol/browser/peek/referencesController.js +3 -3
  198. package/vscode/src/vs/editor/contrib/gotoSymbol/browser/peek/referencesTree.js +3 -3
  199. package/vscode/src/vs/editor/contrib/gotoSymbol/browser/peek/referencesWidget.js +3 -3
  200. package/vscode/src/vs/editor/contrib/gotoSymbol/browser/referencesModel.js +8 -8
  201. package/vscode/src/vs/editor/contrib/gotoSymbol/browser/symbolNavigation.js +3 -3
  202. package/vscode/src/vs/editor/contrib/gpu/browser/gpuActions.js +4 -4
  203. package/vscode/src/vs/editor/contrib/hover/browser/contentHoverRendered.js +3 -3
  204. package/vscode/src/vs/editor/contrib/hover/browser/hoverAccessibleViews.js +2 -2
  205. package/vscode/src/vs/editor/contrib/hover/browser/hoverActionIds.js +2 -2
  206. package/vscode/src/vs/editor/contrib/hover/browser/hoverActions.js +22 -22
  207. package/vscode/src/vs/editor/contrib/hover/browser/hoverCopyButton.js +2 -2
  208. package/vscode/src/vs/editor/contrib/hover/browser/markdownHoverParticipant.js +7 -7
  209. package/vscode/src/vs/editor/contrib/hover/browser/markerHoverParticipant.js +5 -5
  210. package/vscode/src/vs/editor/contrib/inPlaceReplace/browser/inPlaceReplace.js +2 -2
  211. package/vscode/src/vs/editor/contrib/indentation/browser/indentation.js +18 -18
  212. package/vscode/src/vs/editor/contrib/inlayHints/browser/inlayHintsHover.js +5 -5
  213. package/vscode/src/vs/editor/contrib/inlineCompletions/browser/controller/commands.js +21 -21
  214. package/vscode/src/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionContextKeys.js +13 -13
  215. package/vscode/src/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionsController.js +6 -6
  216. package/vscode/src/vs/editor/contrib/inlineCompletions/browser/hintsWidget/hoverParticipant.js +2 -2
  217. package/vscode/src/vs/editor/contrib/inlineCompletions/browser/hintsWidget/inlineCompletionsHintsWidget.js +4 -4
  218. package/vscode/src/vs/editor/contrib/inlineCompletions/browser/model/renameSymbolProcessor.js +2 -2
  219. package/vscode/src/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorMenu.js +6 -6
  220. package/vscode/src/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorView.js +1 -1
  221. package/vscode/src/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsWordReplacementView.js +2 -2
  222. package/vscode/src/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/theme.js +20 -20
  223. package/vscode/src/vs/editor/contrib/insertFinalNewLine/browser/insertFinalNewLine.js +1 -1
  224. package/vscode/src/vs/editor/contrib/lineSelection/browser/lineSelection.js +1 -1
  225. package/vscode/src/vs/editor/contrib/linesOperations/browser/linesOperations.js +31 -31
  226. package/vscode/src/vs/editor/contrib/linkedEditing/browser/linkedEditing.js +2 -2
  227. package/vscode/src/vs/editor/contrib/links/browser/links.js +6 -6
  228. package/vscode/src/vs/editor/contrib/message/browser/messageController.js +13 -14
  229. package/vscode/src/vs/editor/contrib/multicursor/browser/multicursor.d.ts +3 -1
  230. package/vscode/src/vs/editor/contrib/multicursor/browser/multicursor.js +78 -32
  231. package/vscode/src/vs/editor/contrib/parameterHints/browser/parameterHints.js +1 -1
  232. package/vscode/src/vs/editor/contrib/parameterHints/browser/parameterHintsWidget.js +4 -4
  233. package/vscode/src/vs/editor/contrib/peekView/browser/peekView.js +18 -18
  234. package/vscode/src/vs/editor/contrib/placeholderText/browser/placeholderText.contribution.js +1 -1
  235. package/vscode/src/vs/editor/contrib/quickAccess/browser/editorNavigationQuickAccess.js +1 -1
  236. package/vscode/src/vs/editor/contrib/quickAccess/browser/gotoLineQuickAccess.js +11 -11
  237. package/vscode/src/vs/editor/contrib/quickAccess/browser/gotoSymbolQuickAccess.js +32 -32
  238. package/vscode/src/vs/editor/contrib/readOnlyMessage/browser/contribution.js +2 -2
  239. package/vscode/src/vs/editor/contrib/rename/browser/rename.js +11 -11
  240. package/vscode/src/vs/editor/contrib/rename/browser/renameWidget.js +7 -7
  241. package/vscode/src/vs/editor/contrib/semanticTokens/browser/documentSemanticTokens.js +18 -11
  242. package/vscode/src/vs/editor/contrib/smartSelect/browser/smartSelect.js +4 -4
  243. package/vscode/src/vs/editor/contrib/snippet/browser/snippetController2.js +5 -5
  244. package/vscode/src/vs/editor/contrib/snippet/browser/snippetVariables.js +4 -4
  245. package/vscode/src/vs/editor/contrib/stickyScroll/browser/stickyScrollActions.js +11 -11
  246. package/vscode/src/vs/editor/contrib/stickyScroll/browser/stickyScrollController.js +2 -1
  247. package/vscode/src/vs/editor/contrib/suggest/browser/suggest.js +9 -9
  248. package/vscode/src/vs/editor/contrib/suggest/browser/suggestController.js +11 -11
  249. package/vscode/src/vs/editor/contrib/suggest/browser/suggestModel.js +5 -3
  250. package/vscode/src/vs/editor/contrib/suggest/browser/suggestWidget.js +18 -18
  251. package/vscode/src/vs/editor/contrib/suggest/browser/suggestWidgetDetails.js +3 -3
  252. package/vscode/src/vs/editor/contrib/suggest/browser/suggestWidgetRenderer.js +2 -2
  253. package/vscode/src/vs/editor/contrib/suggest/browser/wordContextKey.js +1 -1
  254. package/vscode/src/vs/editor/contrib/symbolIcons/browser/symbolIcons.js +33 -33
  255. package/vscode/src/vs/editor/contrib/toggleTabFocusMode/browser/toggleTabFocusMode.js +4 -4
  256. package/vscode/src/vs/editor/contrib/tokenization/browser/tokenization.js +1 -1
  257. package/vscode/src/vs/editor/contrib/unicodeHighlighter/browser/bannerController.js +1 -1
  258. package/vscode/src/vs/editor/contrib/unicodeHighlighter/browser/unicodeHighlighter.js +24 -24
  259. package/vscode/src/vs/editor/contrib/unusualLineTerminators/browser/unusualLineTerminators.js +5 -5
  260. package/vscode/src/vs/editor/contrib/wordHighlighter/browser/highlightDecorations.js +9 -9
  261. package/vscode/src/vs/editor/contrib/wordHighlighter/browser/textualHighlightProvider.d.ts +11 -0
  262. package/vscode/src/vs/editor/contrib/wordHighlighter/browser/textualHighlightProvider.js +1 -1
  263. package/vscode/src/vs/editor/contrib/wordHighlighter/browser/wordHighlighter.d.ts +2 -1
  264. package/vscode/src/vs/editor/contrib/wordHighlighter/browser/wordHighlighter.js +64 -11
  265. package/vscode/src/vs/editor/contrib/wordOperations/browser/wordOperations.js +3 -3
  266. package/vscode/src/vs/editor/standalone/browser/quickInput/standaloneQuickInputService.d.ts +3 -2
  267. package/vscode/src/vs/editor/standalone/browser/quickInput/standaloneQuickInputService.js +3 -0
  268. package/vscode/src/vs/editor/standalone/browser/standaloneServices.js +7 -59
  269. package/vscode/src/vs/platform/accessibility/browser/accessibleView.d.ts +14 -3
  270. package/vscode/src/vs/platform/accessibility/browser/accessibleView.js +10 -1
  271. package/vscode/src/vs/platform/accessibilitySignal/browser/accessibilitySignalService.d.ts +2 -0
  272. package/vscode/src/vs/platform/accessibilitySignal/browser/accessibilitySignalService.js +83 -68
  273. package/vscode/src/vs/platform/action/common/actionCommonCategories.js +6 -6
  274. package/vscode/src/vs/platform/actionWidget/browser/actionList.d.ts +122 -8
  275. package/vscode/src/vs/platform/actionWidget/browser/actionList.js +871 -196
  276. package/vscode/src/vs/platform/actionWidget/browser/actionWidget.css +70 -12
  277. package/vscode/src/vs/platform/actionWidget/browser/actionWidget.d.ts +5 -4
  278. package/vscode/src/vs/platform/actionWidget/browser/actionWidget.js +57 -34
  279. package/vscode/src/vs/platform/actionWidget/browser/actionWidget.service.d.ts +8 -3
  280. package/vscode/src/vs/platform/actionWidget/browser/actionWidgetDropdown.d.ts +3 -2
  281. package/vscode/src/vs/platform/actionWidget/browser/actionWidgetDropdown.js +2 -2
  282. package/vscode/src/vs/platform/actionWidget/browser/actionWidgetMotion.d.ts +5 -0
  283. package/vscode/src/vs/platform/actionWidget/browser/actionWidgetMotion.js +15 -0
  284. package/vscode/src/vs/platform/actionWidget/browser/tabbedActionListWidget.css +57 -4
  285. package/vscode/src/vs/platform/actionWidget/browser/tabbedActionListWidget.d.ts +44 -1
  286. package/vscode/src/vs/platform/actionWidget/browser/tabbedActionListWidget.js +358 -33
  287. package/vscode/src/vs/platform/actions/browser/buttonbar.js +3 -3
  288. package/vscode/src/vs/platform/actions/browser/menuEntryActionViewItem.d.ts +1 -0
  289. package/vscode/src/vs/platform/actions/browser/menuEntryActionViewItem.js +24 -13
  290. package/vscode/src/vs/platform/actions/browser/toolbar.js +3 -3
  291. package/vscode/src/vs/platform/actions/common/actions.service.d.ts +1 -1
  292. package/vscode/src/vs/platform/actions/common/menuResetAction.js +1 -1
  293. package/vscode/src/vs/platform/actions/common/menuService.js +106 -67
  294. package/vscode/src/vs/platform/agentHost/browser/agentHostProtocolClient.d.ts +72 -37
  295. package/vscode/src/vs/platform/agentHost/browser/agentHostProtocolClient.js +680 -100
  296. package/vscode/src/vs/platform/agentHost/browser/agentHostSandboxToggle.d.ts +4 -1
  297. package/vscode/src/vs/platform/agentHost/browser/agentHostSandboxToggle.js +28 -11
  298. package/vscode/src/vs/platform/agentHost/browser/nullAgentHostService.d.ts +4 -0
  299. package/vscode/src/vs/platform/agentHost/browser/nullAgentHostService.js +9 -0
  300. package/vscode/src/vs/platform/agentHost/common/agent.d.ts +370 -38
  301. package/vscode/src/vs/platform/agentHost/common/agent.js +3 -2
  302. package/vscode/src/vs/platform/agentHost/common/agentHostByokLm.d.ts +27 -0
  303. package/vscode/src/vs/platform/agentHost/common/agentHostChangesetOperationService.d.ts +5 -1
  304. package/vscode/src/vs/platform/agentHost/common/agentHostChatIdentity.d.ts +3 -0
  305. package/vscode/src/vs/platform/agentHost/common/agentHostChatIdentity.js +8 -0
  306. package/vscode/src/vs/platform/agentHost/common/agentHostConfigurationSync.d.ts +5 -0
  307. package/vscode/src/vs/platform/agentHost/common/agentHostConfigurationSync.js +15 -4
  308. package/vscode/src/vs/platform/agentHost/common/agentHostConnectionsService.d.ts +5 -0
  309. package/vscode/src/vs/platform/agentHost/common/agentHostConnectionsService.service.d.ts +9 -0
  310. package/vscode/src/vs/platform/agentHost/common/agentHostEnablementService.js +40 -9
  311. package/vscode/src/vs/platform/agentHost/common/agentHostEnablementService.service.d.ts +3 -6
  312. package/vscode/src/vs/platform/agentHost/common/agentHostExtensionProtocol.d.ts +150 -1
  313. package/vscode/src/vs/platform/agentHost/common/agentHostExtensionProtocol.js +37 -2
  314. package/vscode/src/vs/platform/agentHost/common/agentHostFileSystemProvider.d.ts +5 -0
  315. package/vscode/src/vs/platform/agentHost/common/agentHostFileSystemProvider.js +106 -41
  316. package/vscode/src/vs/platform/agentHost/common/agentHostFileSystemService.d.ts +8 -0
  317. package/vscode/src/vs/platform/agentHost/common/agentHostFileSystemService.js +19 -0
  318. package/vscode/src/vs/platform/agentHost/common/agentHostFileSystemService.service.d.ts +17 -0
  319. package/vscode/src/vs/platform/agentHost/common/agentHostManagedSettings.d.ts +5 -6
  320. package/vscode/src/vs/platform/agentHost/common/agentHostManagedSettings.js +10 -26
  321. package/vscode/src/vs/platform/agentHost/common/agentHostMcpServer.d.ts +37 -0
  322. package/vscode/src/vs/platform/agentHost/common/agentHostPolicyReadiness.d.ts +11 -0
  323. package/vscode/src/vs/platform/agentHost/common/agentHostPolicyReadiness.js +161 -0
  324. package/vscode/src/vs/platform/agentHost/common/agentHostPolicySupport.d.ts +36 -0
  325. package/vscode/src/vs/platform/agentHost/common/agentHostPolicySupport.js +64 -0
  326. package/vscode/src/vs/platform/agentHost/common/agentHostProtocolCompatibility.d.ts +2 -0
  327. package/vscode/src/vs/platform/agentHost/common/agentHostProtocolCompatibility.js +15 -0
  328. package/vscode/src/vs/platform/agentHost/common/agentHostProviderTiming.d.ts +110 -0
  329. package/vscode/src/vs/platform/agentHost/common/agentHostSchema.d.ts +74 -2
  330. package/vscode/src/vs/platform/agentHost/common/agentHostSchema.js +269 -107
  331. package/vscode/src/vs/platform/agentHost/common/agentHostSessionIdentity.d.ts +5 -0
  332. package/vscode/src/vs/platform/agentHost/common/agentHostSessionIdentity.js +10 -0
  333. package/vscode/src/vs/platform/agentHost/common/agentHostSessionType.d.ts +8 -0
  334. package/vscode/src/vs/platform/agentHost/common/agentHostSessionType.js +16 -1
  335. package/vscode/src/vs/platform/agentHost/common/agentHostTelemetry.d.ts +94 -0
  336. package/vscode/src/vs/platform/agentHost/common/agentHostTelemetry.js +4 -1
  337. package/vscode/src/vs/platform/agentHost/common/agentHostUri.d.ts +7 -11
  338. package/vscode/src/vs/platform/agentHost/common/agentHostUri.js +12 -5
  339. package/vscode/src/vs/platform/agentHost/common/agentHostWorkingDirectories.d.ts +4 -0
  340. package/vscode/src/vs/platform/agentHost/common/agentHostWorkingDirectories.js +14 -1
  341. package/vscode/src/vs/platform/agentHost/common/agentHostWorkspaceTrust.d.ts +5 -0
  342. package/vscode/src/vs/platform/agentHost/common/agentHostWorkspaceTrust.js +38 -0
  343. package/vscode/src/vs/platform/agentHost/common/agentMerge.d.ts +61 -2
  344. package/vscode/src/vs/platform/agentHost/common/agentMerge.js +111 -10
  345. package/vscode/src/vs/platform/agentHost/common/agentMergePrompt.d.ts +1 -0
  346. package/vscode/src/vs/platform/agentHost/common/agentModelByokMeta.d.ts +24 -0
  347. package/vscode/src/vs/platform/agentHost/common/agentModelByokMeta.js +13 -0
  348. package/vscode/src/vs/platform/agentHost/common/agentSdkSetup.d.ts +53 -0
  349. package/vscode/src/vs/platform/agentHost/common/agentSdkSetup.js +45 -0
  350. package/vscode/src/vs/platform/agentHost/common/agentServerTools.d.ts +7 -3
  351. package/vscode/src/vs/platform/agentHost/common/agentService.d.ts +121 -33
  352. package/vscode/src/vs/platform/agentHost/common/agentService.js +13 -15
  353. package/vscode/src/vs/platform/agentHost/common/agentService.service.d.ts +51 -5
  354. package/vscode/src/vs/platform/agentHost/common/agentTelemetryCorrelation.d.ts +7 -0
  355. package/vscode/src/vs/platform/agentHost/common/agentTelemetryCorrelation.js +28 -0
  356. package/vscode/src/vs/platform/agentHost/common/ahpJsonlLogger.d.ts +19 -0
  357. package/vscode/src/vs/platform/agentHost/common/ahpJsonlLogger.js +61 -8
  358. package/vscode/src/vs/platform/agentHost/common/autoModeTiers.d.ts +34 -0
  359. package/vscode/src/vs/platform/agentHost/common/autoModeTiers.js +56 -0
  360. package/vscode/src/vs/platform/agentHost/common/{automationMigration.d.ts → automationConfig.d.ts} +5 -10
  361. package/vscode/src/vs/platform/agentHost/common/{automationMigration.js → automationConfig.js} +18 -18
  362. package/vscode/src/vs/platform/agentHost/common/canvasUri.d.ts +6 -0
  363. package/vscode/src/vs/platform/agentHost/common/canvasUri.js +13 -0
  364. package/vscode/src/vs/platform/agentHost/common/changesetUri.d.ts +41 -12
  365. package/vscode/src/vs/platform/agentHost/common/changesetUri.js +51 -12
  366. package/vscode/src/vs/platform/agentHost/common/cloudSandboxAgentHost.service.d.ts +37 -13
  367. package/vscode/src/vs/platform/agentHost/common/codexModelSelection.d.ts +9 -0
  368. package/vscode/src/vs/platform/agentHost/common/codexModelSelection.js +27 -0
  369. package/vscode/src/vs/platform/agentHost/common/connectionDiagnostics.d.ts +48 -0
  370. package/vscode/src/vs/platform/agentHost/common/connectionDiagnostics.js +141 -0
  371. package/vscode/src/vs/platform/agentHost/common/copilotCliConfig.d.ts +65 -18
  372. package/vscode/src/vs/platform/agentHost/common/copilotCliConfig.js +184 -65
  373. package/vscode/src/vs/platform/agentHost/common/devContainerAgentHost.d.ts +37 -0
  374. package/vscode/src/vs/platform/agentHost/common/devContainerAgentHost.service.d.ts +19 -0
  375. package/vscode/src/vs/platform/agentHost/common/devContainerAgentHostProtocolClient.d.ts +35 -0
  376. package/vscode/src/vs/platform/agentHost/common/devContainerAgentHostProtocolClient.js +150 -0
  377. package/vscode/src/vs/platform/agentHost/common/devContainerSamples.d.ts +42 -0
  378. package/vscode/src/vs/platform/agentHost/common/devContainerSamples.js +40 -0
  379. package/vscode/src/vs/platform/agentHost/common/meta/agentAuthenticationAccount.d.ts +2 -0
  380. package/vscode/src/vs/platform/agentHost/common/meta/agentChangesetFileMeta.d.ts +1 -6
  381. package/vscode/src/vs/platform/agentHost/common/meta/agentCheckoutOperationMeta.d.ts +1 -0
  382. package/vscode/src/vs/platform/agentHost/common/meta/agentCompletionAttachmentMeta.d.ts +2 -110
  383. package/vscode/src/vs/platform/agentHost/common/meta/agentDevContainerWorktreeMeta.d.ts +2 -9
  384. package/vscode/src/vs/platform/agentHost/common/meta/agentElementAttachments.d.ts +2 -9
  385. package/vscode/src/vs/platform/agentHost/common/meta/agentFeedbackAnnotations.d.ts +2 -128
  386. package/vscode/src/vs/platform/agentHost/common/meta/agentFeedbackAttachments.d.ts +2 -30
  387. package/vscode/src/vs/platform/agentHost/common/meta/agentHostArtifactRemovalMeta.d.ts +1 -4
  388. package/vscode/src/vs/platform/agentHost/common/meta/agentHostAutomationsMeta.d.ts +1 -0
  389. package/vscode/src/vs/platform/agentHost/common/meta/agentHostBackgroundWorkStopMeta.d.ts +1 -0
  390. package/vscode/src/vs/platform/agentHost/common/meta/agentHostDebugLogsMeta.d.ts +1 -0
  391. package/vscode/src/vs/platform/agentHost/common/meta/agentHostDevContainersMeta.d.ts +1 -0
  392. package/vscode/src/vs/platform/agentHost/common/meta/agentHostResources.d.ts +2 -0
  393. package/vscode/src/vs/platform/agentHost/common/meta/agentHostSessionImportMeta.d.ts +1 -0
  394. package/vscode/src/vs/platform/agentHost/common/meta/agentHostSessionUrisMeta.d.ts +1 -0
  395. package/vscode/src/vs/platform/agentHost/common/meta/agentHostTimingMeta.d.ts +1 -0
  396. package/vscode/src/vs/platform/agentHost/common/meta/agentImageGenerationMeta.d.ts +1 -0
  397. package/vscode/src/vs/platform/agentHost/common/meta/agentMergeMessageMeta.d.ts +1 -15
  398. package/vscode/src/vs/platform/agentHost/common/meta/agentMessageDelegationMeta.d.ts +2 -19
  399. package/vscode/src/vs/platform/agentHost/common/meta/agentMessageMeta.d.ts +14 -0
  400. package/vscode/src/vs/platform/agentHost/common/meta/agentMessageMeta.js +26 -0
  401. package/vscode/src/vs/platform/agentHost/common/meta/agentModelCallMeta.d.ts +12 -0
  402. package/vscode/src/vs/platform/agentHost/common/meta/agentModelCallMeta.js +21 -0
  403. package/vscode/src/vs/platform/agentHost/common/meta/agentModelConfigurationMeta.d.ts +2 -0
  404. package/vscode/src/vs/platform/agentHost/common/meta/agentPermissionRequestMeta.d.ts +6 -41
  405. package/vscode/src/vs/platform/agentHost/common/meta/agentPermissionRequestMeta.js +5 -29
  406. package/vscode/src/vs/platform/agentHost/common/meta/agentPermissionResponseMeta.d.ts +2 -0
  407. package/vscode/src/vs/platform/agentHost/common/meta/agentPullRequestOperationMeta.d.ts +2 -45
  408. package/vscode/src/vs/platform/agentHost/common/meta/agentRemoteSessionMeta.d.ts +2 -0
  409. package/vscode/src/vs/platform/agentHost/common/meta/agentSandboxPolicyMeta.d.ts +2 -0
  410. package/vscode/src/vs/platform/agentHost/common/meta/agentSandboxStateMeta.d.ts +2 -0
  411. package/vscode/src/vs/platform/agentHost/common/meta/agentSessionInitiatorMeta.d.ts +9 -0
  412. package/vscode/src/vs/platform/agentHost/common/meta/agentSessionInitiatorMeta.js +40 -0
  413. package/vscode/src/vs/platform/agentHost/common/meta/agentSlashCommandOutputMeta.d.ts +2 -0
  414. package/vscode/src/vs/platform/agentHost/common/meta/agentSystemNotificationMeta.d.ts +2 -49
  415. package/vscode/src/vs/platform/agentHost/common/meta/agentToolCallMeta.d.ts +22 -78
  416. package/vscode/src/vs/platform/agentHost/common/meta/agentToolCallMeta.js +37 -84
  417. package/vscode/src/vs/platform/agentHost/common/meta/agentUsageMeta.d.ts +36 -0
  418. package/vscode/src/vs/platform/agentHost/common/meta/agentUsageMeta.js +18 -0
  419. package/vscode/src/vs/platform/agentHost/common/meta/agentWorkspaceContinuationMeta.d.ts +1 -8
  420. package/vscode/src/vs/platform/agentHost/common/meta/attachmentMeta.d.ts +9 -0
  421. package/vscode/src/vs/platform/agentHost/common/meta/attachmentMeta.js +11 -0
  422. package/vscode/src/vs/platform/agentHost/common/meta/browserViewAttachments.d.ts +2 -9
  423. package/vscode/src/vs/platform/agentHost/common/meta/codexAccount.d.ts +2 -28
  424. package/vscode/src/vs/platform/agentHost/common/meta/codexSessionModel.d.ts +16 -0
  425. package/vscode/src/vs/platform/agentHost/common/meta/codexSessionModel.js +22 -0
  426. package/vscode/src/vs/platform/agentHost/common/meta/copilotBackgroundWorkMeta.d.ts +1 -0
  427. package/vscode/src/vs/platform/agentHost/common/meta/copilotd/agentPermissionRequestMeta.d.ts +46 -0
  428. package/vscode/src/vs/platform/agentHost/common/meta/copilotd/agentPermissionRequestMeta.js +44 -0
  429. package/vscode/src/vs/platform/agentHost/common/meta/copilotd/copilotdMetadataReader.d.ts +55 -0
  430. package/vscode/src/vs/platform/agentHost/common/meta/copilotd/copilotdMetadataReader.js +191 -0
  431. package/vscode/src/vs/platform/agentHost/common/meta/copilotd/generated/copilotdMetadata.d.ts +293 -0
  432. package/vscode/src/vs/platform/agentHost/common/meta/copilotd/toolPresentation.d.ts +12 -0
  433. package/vscode/src/vs/platform/agentHost/common/meta/copilotd/toolPresentation.js +539 -0
  434. package/vscode/src/vs/platform/agentHost/common/meta/errorMeta.d.ts +19 -0
  435. package/vscode/src/vs/platform/agentHost/common/meta/errorMeta.js +14 -0
  436. package/vscode/src/vs/platform/agentHost/common/meta/mcpCustomizationMeta.d.ts +2 -0
  437. package/vscode/src/vs/platform/agentHost/common/meta/metadata.d.ts +5 -0
  438. package/vscode/src/vs/platform/agentHost/common/meta/metadata.js +8 -0
  439. package/vscode/src/vs/platform/agentHost/common/meta/relayConnectionMeta.d.ts +8 -0
  440. package/vscode/src/vs/platform/agentHost/common/meta/relayConnectionMeta.js +11 -0
  441. package/vscode/src/vs/platform/agentHost/common/meta/vscode/agentAuthenticationAccount.d.ts +11 -0
  442. package/vscode/src/vs/platform/agentHost/common/meta/vscode/agentAuthenticationAccount.js +12 -0
  443. package/vscode/src/vs/platform/agentHost/common/meta/vscode/agentChangesetFileMeta.d.ts +6 -0
  444. package/vscode/src/vs/platform/agentHost/common/meta/{agentChangesetFileMeta.js → vscode/agentChangesetFileMeta.js} +2 -2
  445. package/vscode/src/vs/platform/agentHost/common/meta/vscode/agentCheckoutOperationMeta.d.ts +18 -0
  446. package/vscode/src/vs/platform/agentHost/common/meta/vscode/agentCheckoutOperationMeta.js +27 -0
  447. package/vscode/src/vs/platform/agentHost/common/meta/vscode/agentCompletionAttachmentMeta.d.ts +114 -0
  448. package/vscode/src/vs/platform/agentHost/common/meta/{agentCompletionAttachmentMeta.js → vscode/agentCompletionAttachmentMeta.js} +25 -19
  449. package/vscode/src/vs/platform/agentHost/common/meta/vscode/agentDevContainerWorktreeMeta.d.ts +9 -0
  450. package/vscode/src/vs/platform/agentHost/common/meta/vscode/agentElementAttachments.d.ts +9 -0
  451. package/vscode/src/vs/platform/agentHost/common/meta/vscode/agentErrorMeta.d.ts +7 -0
  452. package/vscode/src/vs/platform/agentHost/common/meta/vscode/agentErrorMeta.js +16 -0
  453. package/vscode/src/vs/platform/agentHost/common/meta/vscode/agentFeedbackAnnotations.d.ts +128 -0
  454. package/vscode/src/vs/platform/agentHost/common/meta/{agentFeedbackAnnotations.js → vscode/agentFeedbackAnnotations.js} +15 -15
  455. package/vscode/src/vs/platform/agentHost/common/meta/vscode/agentFeedbackAttachments.d.ts +30 -0
  456. package/vscode/src/vs/platform/agentHost/common/meta/{agentFeedbackAttachments.js → vscode/agentFeedbackAttachments.js} +9 -9
  457. package/vscode/src/vs/platform/agentHost/common/meta/vscode/agentHostArtifactRemovalMeta.d.ts +4 -0
  458. package/vscode/src/vs/platform/agentHost/common/meta/vscode/agentHostAutomationsMeta.d.ts +5 -0
  459. package/vscode/src/vs/platform/agentHost/common/meta/vscode/agentHostAutomationsMeta.js +8 -0
  460. package/vscode/src/vs/platform/agentHost/common/meta/vscode/agentHostBackgroundWorkStopMeta.d.ts +6 -0
  461. package/vscode/src/vs/platform/agentHost/common/meta/vscode/agentHostBackgroundWorkStopMeta.js +8 -0
  462. package/vscode/src/vs/platform/agentHost/common/meta/vscode/agentHostDebugLogsMeta.d.ts +16 -0
  463. package/vscode/src/vs/platform/agentHost/common/meta/vscode/agentHostDebugLogsMeta.js +13 -0
  464. package/vscode/src/vs/platform/agentHost/common/meta/vscode/agentHostDevContainersMeta.d.ts +4 -0
  465. package/vscode/src/vs/platform/agentHost/common/meta/vscode/agentHostDevContainersMeta.js +8 -0
  466. package/vscode/src/vs/platform/agentHost/common/meta/vscode/agentHostResources.d.ts +13 -0
  467. package/vscode/src/vs/platform/agentHost/common/meta/vscode/agentHostResources.js +47 -0
  468. package/vscode/src/vs/platform/agentHost/common/meta/vscode/agentHostSessionImportMeta.d.ts +4 -0
  469. package/vscode/src/vs/platform/agentHost/common/meta/vscode/agentHostSessionImportMeta.js +8 -0
  470. package/vscode/src/vs/platform/agentHost/common/meta/vscode/agentHostSessionUrisMeta.d.ts +8 -0
  471. package/vscode/src/vs/platform/agentHost/common/meta/vscode/agentHostSessionUrisMeta.js +26 -0
  472. package/vscode/src/vs/platform/agentHost/common/meta/vscode/agentHostTimingMeta.d.ts +6 -0
  473. package/vscode/src/vs/platform/agentHost/common/meta/vscode/agentHostTimingMeta.js +12 -0
  474. package/vscode/src/vs/platform/agentHost/common/meta/vscode/agentImageGenerationMeta.d.ts +11 -0
  475. package/vscode/src/vs/platform/agentHost/common/meta/vscode/agentImageGenerationMeta.js +25 -0
  476. package/vscode/src/vs/platform/agentHost/common/meta/vscode/agentMergeMessageMeta.d.ts +15 -0
  477. package/vscode/src/vs/platform/agentHost/common/meta/vscode/agentMessageDelegationMeta.d.ts +23 -0
  478. package/vscode/src/vs/platform/agentHost/common/meta/vscode/agentMessageDelegationMeta.js +54 -0
  479. package/vscode/src/vs/platform/agentHost/common/meta/vscode/agentMessageMeta.d.ts +10 -0
  480. package/vscode/src/vs/platform/agentHost/common/meta/vscode/agentMessageMeta.js +30 -0
  481. package/vscode/src/vs/platform/agentHost/common/meta/vscode/agentModelCallMeta.d.ts +21 -0
  482. package/vscode/src/vs/platform/agentHost/common/meta/vscode/agentModelCallMeta.js +36 -0
  483. package/vscode/src/vs/platform/agentHost/common/meta/vscode/agentPullRequestOperationMeta.d.ts +58 -0
  484. package/vscode/src/vs/platform/agentHost/common/meta/{agentPullRequestOperationMeta.js → vscode/agentPullRequestOperationMeta.js} +49 -20
  485. package/vscode/src/vs/platform/agentHost/common/meta/vscode/agentRemoteSessionMeta.d.ts +24 -0
  486. package/vscode/src/vs/platform/agentHost/common/meta/vscode/agentRemoteSessionMeta.js +73 -0
  487. package/vscode/src/vs/platform/agentHost/common/meta/vscode/agentSandboxPolicyMeta.d.ts +24 -0
  488. package/vscode/src/vs/platform/agentHost/common/meta/vscode/agentSandboxPolicyMeta.js +31 -0
  489. package/vscode/src/vs/platform/agentHost/common/meta/vscode/agentSandboxStateMeta.d.ts +13 -0
  490. package/vscode/src/vs/platform/agentHost/common/meta/vscode/agentSandboxStateMeta.js +27 -0
  491. package/vscode/src/vs/platform/agentHost/common/meta/vscode/agentSlashCommandOutputMeta.d.ts +10 -0
  492. package/vscode/src/vs/platform/agentHost/common/meta/vscode/agentSlashCommandOutputMeta.js +28 -0
  493. package/vscode/src/vs/platform/agentHost/common/meta/vscode/agentSystemNotificationMeta.d.ts +62 -0
  494. package/vscode/src/vs/platform/agentHost/common/meta/{agentSystemNotificationMeta.js → vscode/agentSystemNotificationMeta.js} +26 -5
  495. package/vscode/src/vs/platform/agentHost/common/meta/vscode/agentToolCallMeta.d.ts +114 -0
  496. package/vscode/src/vs/platform/agentHost/common/meta/vscode/agentToolCallMeta.js +149 -0
  497. package/vscode/src/vs/platform/agentHost/common/meta/vscode/agentUsageMeta.d.ts +76 -0
  498. package/vscode/src/vs/platform/agentHost/common/meta/vscode/agentUsageMeta.js +203 -0
  499. package/vscode/src/vs/platform/agentHost/common/meta/vscode/agentWorkspaceContinuationMeta.d.ts +8 -0
  500. package/vscode/src/vs/platform/agentHost/common/meta/vscode/browserViewAttachments.d.ts +9 -0
  501. package/vscode/src/vs/platform/agentHost/common/meta/{browserViewAttachments.js → vscode/browserViewAttachments.js} +9 -9
  502. package/vscode/src/vs/platform/agentHost/common/meta/vscode/codexAccount.d.ts +33 -0
  503. package/vscode/src/vs/platform/agentHost/common/meta/{codexAccount.js → vscode/codexAccount.js} +20 -9
  504. package/vscode/src/vs/platform/agentHost/common/meta/vscode/copilotBackgroundWorkMeta.d.ts +10 -0
  505. package/vscode/src/vs/platform/agentHost/common/meta/vscode/copilotBackgroundWorkMeta.js +14 -0
  506. package/vscode/src/vs/platform/agentHost/common/meta/vscode/mcpCustomizationMeta.d.ts +34 -0
  507. package/vscode/src/vs/platform/agentHost/common/meta/vscode/mcpCustomizationMeta.js +42 -0
  508. package/vscode/src/vs/platform/agentHost/common/missionControlEnvironment.d.ts +9 -0
  509. package/vscode/src/vs/platform/agentHost/common/missionControlEnvironment.js +9 -0
  510. package/vscode/src/vs/platform/agentHost/common/missionControlEnvironment.service.d.ts +26 -0
  511. package/vscode/src/vs/platform/agentHost/common/missionControlEnvironment.service.js +7 -0
  512. package/vscode/src/vs/platform/agentHost/common/openSessionLink.d.ts +3 -2
  513. package/vscode/src/vs/platform/agentHost/common/openSessionLink.js +38 -14
  514. package/vscode/src/vs/platform/agentHost/common/otel/agentHostTiming.d.ts +59 -0
  515. package/vscode/src/vs/platform/agentHost/common/partialToolInput.d.ts +3 -0
  516. package/vscode/src/vs/platform/agentHost/common/partialToolInput.js +4 -1
  517. package/vscode/src/vs/platform/agentHost/common/reasoningEffort.d.ts +1 -0
  518. package/vscode/src/vs/platform/agentHost/common/reasoningEffort.js +21 -17
  519. package/vscode/src/vs/platform/agentHost/common/reconnectPolicy.d.ts +5 -1
  520. package/vscode/src/vs/platform/agentHost/common/reconnectPolicy.js +3 -2
  521. package/vscode/src/vs/platform/agentHost/common/reconnectingTransport.d.ts +5 -1
  522. package/vscode/src/vs/platform/agentHost/common/reconnectingTransport.js +14 -0
  523. package/vscode/src/vs/platform/agentHost/common/relayActivity.d.ts +13 -0
  524. package/vscode/src/vs/platform/agentHost/common/relayActivity.js +20 -0
  525. package/vscode/src/vs/platform/agentHost/common/relayTransport.d.ts +6 -2
  526. package/vscode/src/vs/platform/agentHost/common/remoteAgentHostLocationPreferenceDialog.js +8 -8
  527. package/vscode/src/vs/platform/agentHost/common/remoteAgentHostService.d.ts +41 -3
  528. package/vscode/src/vs/platform/agentHost/common/remoteAgentHostService.js +16 -0
  529. package/vscode/src/vs/platform/agentHost/common/remoteAgentHostService.service.d.ts +19 -2
  530. package/vscode/src/vs/platform/agentHost/common/serverToolNames.d.ts +9 -2
  531. package/vscode/src/vs/platform/agentHost/common/serverToolNames.js +2 -1
  532. package/vscode/src/vs/platform/agentHost/common/sessionArtifacts.d.ts +11 -10
  533. package/vscode/src/vs/platform/agentHost/common/sessionArtifacts.js +3 -0
  534. package/vscode/src/vs/platform/agentHost/common/sessionConfigKeys.d.ts +23 -8
  535. package/vscode/src/vs/platform/agentHost/common/sessionConfigKeys.js +14 -6
  536. package/vscode/src/vs/platform/agentHost/common/sessionConfigProperties.d.ts +30 -0
  537. package/vscode/src/vs/platform/agentHost/common/sessionConfigProperties.js +100 -0
  538. package/vscode/src/vs/platform/agentHost/common/sshRemoteAgentHost.d.ts +10 -5
  539. package/vscode/src/vs/platform/agentHost/common/sshRemoteAgentHost.js +6 -1
  540. package/vscode/src/vs/platform/agentHost/common/sshRemoteAgentHost.service.d.ts +10 -2
  541. package/vscode/src/vs/platform/agentHost/common/state/agentSubscription.d.ts +14 -0
  542. package/vscode/src/vs/platform/agentHost/common/state/agentSubscription.js +118 -9
  543. package/vscode/src/vs/platform/agentHost/common/state/protocol/action-origin.generated.d.ts +13 -7
  544. package/vscode/src/vs/platform/agentHost/common/state/protocol/actions.d.ts +1 -0
  545. package/vscode/src/vs/platform/agentHost/common/state/protocol/channels-automation/actions.d.ts +16 -3
  546. package/vscode/src/vs/platform/agentHost/common/state/protocol/channels-automation/state.d.ts +118 -1
  547. package/vscode/src/vs/platform/agentHost/common/state/protocol/channels-automation/state.js +6 -1
  548. package/vscode/src/vs/platform/agentHost/common/state/protocol/channels-canvas/actions.d.ts +17 -0
  549. package/vscode/src/vs/platform/agentHost/common/state/protocol/channels-canvas/reducer.d.ts +10 -0
  550. package/vscode/src/vs/platform/agentHost/common/state/protocol/channels-canvas/reducer.js +12 -0
  551. package/vscode/src/vs/platform/agentHost/common/state/protocol/channels-canvas/state.d.ts +45 -0
  552. package/vscode/src/vs/platform/agentHost/common/state/protocol/channels-changeset/actions.d.ts +3 -2
  553. package/vscode/src/vs/platform/agentHost/common/state/protocol/channels-changeset/state.d.ts +15 -9
  554. package/vscode/src/vs/platform/agentHost/common/state/protocol/channels-changeset/state.js +1 -0
  555. package/vscode/src/vs/platform/agentHost/common/state/protocol/channels-chat/actions.d.ts +115 -6
  556. package/vscode/src/vs/platform/agentHost/common/state/protocol/channels-chat/commands.d.ts +86 -0
  557. package/vscode/src/vs/platform/agentHost/common/state/protocol/channels-chat/commands.js +6 -1
  558. package/vscode/src/vs/platform/agentHost/common/state/protocol/channels-chat/reducer.js +66 -0
  559. package/vscode/src/vs/platform/agentHost/common/state/protocol/channels-chat/state.d.ts +149 -9
  560. package/vscode/src/vs/platform/agentHost/common/state/protocol/channels-chat/state.js +6 -1
  561. package/vscode/src/vs/platform/agentHost/common/state/protocol/channels-root/notifications.d.ts +1 -0
  562. package/vscode/src/vs/platform/agentHost/common/state/protocol/channels-root/state.d.ts +2 -1
  563. package/vscode/src/vs/platform/agentHost/common/state/protocol/channels-session/actions.d.ts +49 -0
  564. package/vscode/src/vs/platform/agentHost/common/state/protocol/channels-session/reducer.js +37 -0
  565. package/vscode/src/vs/platform/agentHost/common/state/protocol/channels-session/state.d.ts +75 -12
  566. package/vscode/src/vs/platform/agentHost/common/state/protocol/common/actions.d.ts +14 -3
  567. package/vscode/src/vs/platform/agentHost/common/state/protocol/common/actions.js +10 -0
  568. package/vscode/src/vs/platform/agentHost/common/state/protocol/common/commands.d.ts +19 -1
  569. package/vscode/src/vs/platform/agentHost/common/state/protocol/common/errors.js +14 -2
  570. package/vscode/src/vs/platform/agentHost/common/state/protocol/common/messages.d.ts +5 -1
  571. package/vscode/src/vs/platform/agentHost/common/state/protocol/common/state.d.ts +35 -20
  572. package/vscode/src/vs/platform/agentHost/common/state/protocol/reducers.d.ts +1 -0
  573. package/vscode/src/vs/platform/agentHost/common/state/protocol/state.d.ts +1 -0
  574. package/vscode/src/vs/platform/agentHost/common/state/protocol/version/registry.d.ts +10 -5
  575. package/vscode/src/vs/platform/agentHost/common/state/protocol/version/registry.js +20 -6
  576. package/vscode/src/vs/platform/agentHost/common/state/sessionActions.d.ts +1 -1
  577. package/vscode/src/vs/platform/agentHost/common/state/sessionProtocol.js +2 -1
  578. package/vscode/src/vs/platform/agentHost/common/state/sessionReducers.js +2 -1
  579. package/vscode/src/vs/platform/agentHost/common/state/sessionState.d.ts +162 -129
  580. package/vscode/src/vs/platform/agentHost/common/state/sessionState.js +231 -283
  581. package/vscode/src/vs/platform/agentHost/common/state/sessionTransport.d.ts +28 -0
  582. package/vscode/src/vs/platform/agentHost/common/terminalConstants.d.ts +5 -0
  583. package/vscode/src/vs/platform/agentHost/common/terminalConstants.js +5 -0
  584. package/vscode/src/vs/platform/agentHost/common/tunnelAgentHost.d.ts +11 -0
  585. package/vscode/src/vs/platform/agentHost/common/tunnelAgentHost.service.d.ts +13 -7
  586. package/vscode/src/vs/platform/agentHost/common/tunnelAgentHostConnector.d.ts +8 -3
  587. package/vscode/src/vs/platform/agentHost/common/tunnelAgentHostConnector.js +87 -33
  588. package/vscode/src/vs/platform/agentHost/common/tunnelMessageSocket.d.ts +2 -0
  589. package/vscode/src/vs/platform/agentHost/common/webSocketOverDuplex.js +9 -4
  590. package/vscode/src/vs/platform/agentHost/common/worktreePaths.d.ts +8 -0
  591. package/vscode/src/vs/platform/agentHost/common/worktreePaths.js +12 -2
  592. package/vscode/src/vs/platform/agentHost/common/wslRemoteAgentHost.service.d.ts +4 -1
  593. package/vscode/src/vs/platform/agentPlugins/common/pluginParsers.d.ts +14 -4
  594. package/vscode/src/vs/platform/agentPlugins/common/pluginParsers.js +412 -60
  595. package/vscode/src/vs/platform/browserView/common/browserPermissions.d.ts +3 -9
  596. package/vscode/src/vs/platform/browserView/common/browserPermissions.js +20 -17
  597. package/vscode/src/vs/platform/browserView/common/browserView.d.ts +81 -28
  598. package/vscode/src/vs/platform/browserView/common/browserView.js +6 -1
  599. package/vscode/src/vs/platform/browserView/common/browserViewTelemetry.d.ts +3 -1
  600. package/vscode/src/vs/platform/chat/common/agentsWindowInvitation.d.ts +83 -0
  601. package/vscode/src/vs/platform/chat/common/agentsWindowInvitation.js +24 -0
  602. package/vscode/src/vs/platform/chat/common/chatSessionHistory.d.ts +9 -0
  603. package/vscode/src/vs/platform/chat/common/chatSettings.d.ts +27 -4
  604. package/vscode/src/vs/platform/chat/common/chatSettings.js +96 -27
  605. package/vscode/src/vs/platform/chat/common/sessionArchiveActions.d.ts +1 -1
  606. package/vscode/src/vs/platform/chat/common/sessionArchiveActions.js +11 -11
  607. package/vscode/src/vs/platform/clipboard/browser/clipboardService.js +5 -1
  608. package/vscode/src/vs/platform/configuration/common/configuration.js +3 -1
  609. package/vscode/src/vs/platform/configuration/common/configurationModels.js +17 -13
  610. package/vscode/src/vs/platform/configuration/common/configurationRegistry.d.ts +26 -2
  611. package/vscode/src/vs/platform/configuration/common/configurationRegistry.js +42 -29
  612. package/vscode/src/vs/platform/configuration/common/configurationVariables.d.ts +17 -0
  613. package/vscode/src/vs/platform/configuration/common/configurationVariables.js +50 -0
  614. package/vscode/src/vs/platform/configuration/common/configurations.d.ts +1 -0
  615. package/vscode/src/vs/platform/configuration/common/configurations.js +17 -5
  616. package/vscode/src/vs/platform/contextkey/browser/contextKeyService.js +2 -2
  617. package/vscode/src/vs/platform/contextkey/common/contextkey.js +10 -10
  618. package/vscode/src/vs/platform/contextkey/common/contextkeys.js +10 -10
  619. package/vscode/src/vs/platform/contextkey/common/scanner.js +5 -5
  620. package/vscode/src/vs/platform/copilotConnectors/common/copilotConnectorsRequestService.d.ts +25 -0
  621. package/vscode/src/vs/platform/copilotConnectors/common/copilotConnectorsRequestService.js +141 -0
  622. package/vscode/src/vs/platform/copilotConnectors/common/copilotConnectorsRequestService.service.d.ts +7 -0
  623. package/vscode/src/vs/platform/copilotConnectors/common/copilotConnectorsRequestService.service.js +6 -0
  624. package/vscode/src/vs/platform/customizationMarketplace/common/customizationMarketplaceService.d.ts +172 -0
  625. package/vscode/src/vs/platform/customizationMarketplace/common/customizationMarketplaceService.js +247 -0
  626. package/vscode/src/vs/platform/customizationMarketplace/common/customizationMarketplaceService.service.d.ts +15 -0
  627. package/vscode/src/vs/platform/customizationMarketplace/common/customizationMarketplaceService.service.js +6 -0
  628. package/vscode/src/vs/platform/customizationMarketplace/common/customizationMarketplaceSources.d.ts +39 -0
  629. package/vscode/src/vs/platform/customizationMarketplace/common/customizationMarketplaceSources.js +83 -0
  630. package/vscode/src/vs/platform/customizationMarketplace/common/platformCustomizationMarketplaceService.service.d.ts +2 -0
  631. package/vscode/src/vs/platform/customizationMarketplace/common/platformCustomizationMarketplaceService.service.js +6 -0
  632. package/vscode/src/vs/platform/defaultAccount/common/defaultAccount.d.ts +3 -6
  633. package/vscode/src/vs/platform/defaultAccount/common/defaultAccount.service.d.ts +3 -6
  634. package/vscode/src/vs/platform/dialogs/common/dialogs.js +9 -9
  635. package/vscode/src/vs/platform/dnd/browser/dnd.js +1 -1
  636. package/vscode/src/vs/platform/editor/common/editor.d.ts +21 -0
  637. package/vscode/src/vs/platform/editor/common/editor.js +18 -1
  638. package/vscode/src/vs/platform/{agentHost → environment}/common/copilotHome.d.ts +1 -0
  639. package/vscode/src/vs/platform/{agentHost → environment}/common/copilotHome.js +1 -1
  640. package/vscode/src/vs/platform/extensionManagement/common/extensionManagement.js +14 -14
  641. package/vscode/src/vs/platform/extensionManagement/common/extensionNls.js +1 -1
  642. package/vscode/src/vs/platform/extensionManagement/common/extensionsScannerService.js +21 -21
  643. package/vscode/src/vs/platform/extensions/common/extensionValidator.js +19 -19
  644. package/vscode/src/vs/platform/extensions/common/extensions.d.ts +14 -2
  645. package/vscode/src/vs/platform/extensions/common/extensions.js +15 -3
  646. package/vscode/src/vs/platform/extensions/common/extensionsApiProposals.d.ts +3 -0
  647. package/vscode/src/vs/platform/extensions/common/extensionsApiProposals.js +3 -0
  648. package/vscode/src/vs/platform/files/browser/htmlFileSystemProvider.d.ts +1 -1
  649. package/vscode/src/vs/platform/files/browser/htmlFileSystemProvider.js +3 -3
  650. package/vscode/src/vs/platform/files/common/files.js +6 -6
  651. package/vscode/src/vs/platform/github/common/backoff.d.ts +59 -0
  652. package/vscode/src/vs/platform/github/common/backoff.js +89 -0
  653. package/vscode/src/vs/platform/github/common/cancellation.d.ts +5 -0
  654. package/vscode/src/vs/platform/github/common/cancellation.js +18 -0
  655. package/vscode/src/vs/platform/github/common/client/schema.d.ts +59 -0
  656. package/vscode/src/vs/platform/github/common/client/schema.js +209 -0
  657. package/vscode/src/vs/platform/github/common/githubCredentialService.d.ts +60 -0
  658. package/vscode/src/vs/platform/github/common/githubCredentialService.js +347 -0
  659. package/vscode/src/vs/platform/github/common/githubEndpoints.d.ts +33 -0
  660. package/vscode/src/vs/platform/{agentHost → github}/common/githubEndpoints.js +18 -1
  661. package/vscode/src/vs/platform/github/common/githubPullRequestMutationService.d.ts +16 -11
  662. package/vscode/src/vs/platform/github/common/githubPullRequestService.d.ts +7 -4
  663. package/vscode/src/vs/platform/github/common/githubQueryService.d.ts +70 -5
  664. package/vscode/src/vs/platform/github/common/githubResponse.d.ts +18 -0
  665. package/vscode/src/vs/platform/github/common/githubResponse.js +110 -0
  666. package/vscode/src/vs/platform/github/common/githubService.service.d.ts +8 -14
  667. package/vscode/src/vs/platform/github/common/githubTypes.d.ts +91 -9
  668. package/vscode/src/vs/platform/github/common/githubTypes.js +25 -0
  669. package/vscode/src/vs/platform/github/common/githubUrls.d.ts +53 -0
  670. package/vscode/src/vs/platform/github/common/githubUrls.js +91 -0
  671. package/vscode/src/vs/platform/github/common/missionControl/automations.d.ts +337 -0
  672. package/vscode/src/vs/platform/github/common/missionControl/environments.d.ts +187 -0
  673. package/vscode/src/vs/platform/github/common/missionControl/missionControl.d.ts +73 -0
  674. package/vscode/src/vs/platform/github/common/missionControl/missionControlClient.d.ts +112 -0
  675. package/vscode/src/vs/platform/github/common/missionControl/missionControlClient.js +246 -0
  676. package/vscode/src/vs/platform/github/common/missionControl/models.d.ts +54 -0
  677. package/vscode/src/vs/platform/github/common/missionControl/tasks.d.ts +523 -0
  678. package/vscode/src/vs/platform/github/common/responseReader.d.ts +19 -0
  679. package/vscode/src/vs/platform/github/common/responseReader.js +87 -0
  680. package/vscode/src/vs/platform/github/common/scheduler.d.ts +10 -0
  681. package/vscode/src/vs/platform/github/common/scheduler.js +38 -0
  682. package/vscode/src/vs/platform/github/common/types.d.ts +78 -0
  683. package/vscode/src/vs/platform/github/common/types.js +32 -0
  684. package/vscode/src/vs/platform/history/browser/contextScopedHistoryWidget.js +1 -1
  685. package/vscode/src/vs/platform/hover/browser/hover.css +8 -8
  686. package/vscode/src/vs/platform/hover/browser/hover.service.d.ts +5 -1
  687. package/vscode/src/vs/platform/hover/browser/hoverService.d.ts +1 -0
  688. package/vscode/src/vs/platform/hover/browser/hoverService.js +8 -2
  689. package/vscode/src/vs/platform/hover/browser/hoverWidget.js +3 -3
  690. package/vscode/src/vs/platform/hover/browser/updatableHoverWidget.d.ts +1 -0
  691. package/vscode/src/vs/platform/hover/browser/updatableHoverWidget.js +32 -8
  692. package/vscode/src/vs/platform/keybinding/common/abstractKeybindingService.js +5 -5
  693. package/vscode/src/vs/platform/languagePacks/common/languagePacks.js +1 -1
  694. package/vscode/src/vs/platform/languagePacks/common/localizedStrings.js +3 -3
  695. package/vscode/src/vs/platform/list/browser/listService.js +25 -25
  696. package/vscode/src/vs/platform/localTranscription/common/localTranscription.service.d.ts +8 -7
  697. package/vscode/src/vs/platform/log/common/log.d.ts +6 -2
  698. package/vscode/src/vs/platform/log/common/log.js +24 -7
  699. package/vscode/src/vs/platform/markers/common/markerService.js +2 -2
  700. package/vscode/src/vs/platform/markers/common/markers.js +6 -6
  701. package/vscode/src/vs/platform/mcp/common/envVarResolution.d.ts +61 -0
  702. package/vscode/src/vs/platform/mcp/common/envVarResolution.js +198 -0
  703. package/vscode/src/vs/platform/mcp/common/mcpCopilotConfiguration.d.ts +21 -0
  704. package/vscode/src/vs/platform/mcp/common/mcpCopilotConfiguration.js +34 -0
  705. package/vscode/src/vs/platform/mcp/common/mcpCopilotGlobalConfiguration.d.ts +9 -0
  706. package/vscode/src/vs/platform/mcp/common/mcpCopilotGlobalConfiguration.js +83 -0
  707. package/vscode/src/vs/platform/mcp/common/mcpGalleryManifest.service.d.ts +1 -0
  708. package/vscode/src/vs/platform/mcp/common/mcpManagement.d.ts +16 -1
  709. package/vscode/src/vs/platform/mcp/common/mcpManagement.js +26 -14
  710. package/vscode/src/vs/platform/mcp/common/mcpManagement.service.d.ts +12 -8
  711. package/vscode/src/vs/platform/mcp/common/mcpManagementService.d.ts +5 -2
  712. package/vscode/src/vs/platform/mcp/common/mcpManagementService.js +45 -29
  713. package/vscode/src/vs/platform/mcp/common/mcpPlatformTypes.d.ts +2 -0
  714. package/vscode/src/vs/platform/mcp/common/mcpResourceScannerService.d.ts +50 -0
  715. package/vscode/src/vs/platform/mcp/common/mcpResourceScannerService.js +513 -0
  716. package/vscode/src/vs/platform/mcp/common/mcpResourceScannerService.service.d.ts +13 -5
  717. package/vscode/src/vs/platform/mcp/common/mcpWorkspaceConfiguration.d.ts +16 -0
  718. package/vscode/src/vs/platform/mcp/common/mcpWorkspaceConfiguration.js +111 -0
  719. package/vscode/src/vs/platform/native/common/native.d.ts +27 -2
  720. package/vscode/src/vs/platform/networkFilter/common/domainMatcher.d.ts +1 -1
  721. package/vscode/src/vs/platform/networkFilter/common/domainMatcher.js +2 -1
  722. package/vscode/src/vs/platform/networkFilter/common/networkFilterService.service.d.ts +5 -4
  723. package/vscode/src/vs/platform/networkFilter/common/settings.d.ts +2 -2
  724. package/vscode/src/vs/platform/networkFilter/common/settings.js +2 -2
  725. package/vscode/src/vs/platform/notification/common/notification.d.ts +17 -3
  726. package/vscode/src/vs/platform/notification/common/notification.js +3 -3
  727. package/vscode/src/vs/platform/notification/common/notification.service.d.ts +1 -1
  728. package/vscode/src/vs/platform/notification/common/notificationLegacy.d.ts +4 -0
  729. package/vscode/src/vs/platform/notification/common/notificationLegacy.js +8 -0
  730. package/vscode/src/vs/platform/notification/common/notificationMessage.d.ts +14 -0
  731. package/vscode/src/vs/platform/notification/common/notificationMessage.js +51 -0
  732. package/vscode/src/vs/platform/notification/common/notificationTelemetry.d.ts +71 -0
  733. package/vscode/src/vs/platform/notification/common/notificationTelemetry.js +103 -0
  734. package/vscode/src/vs/platform/observable/common/platformObservableUtils.js +10 -2
  735. package/vscode/src/vs/platform/opener/common/opener.d.ts +2 -1
  736. package/vscode/src/vs/platform/path/common/pathService.d.ts +5 -0
  737. package/vscode/src/vs/platform/path/common/pathService.service.d.ts +54 -0
  738. package/vscode/src/vs/platform/path/common/pathService.service.js +6 -0
  739. package/vscode/src/vs/platform/policy/common/copilotManagedSettings.d.ts +57 -6
  740. package/vscode/src/vs/platform/policy/common/copilotManagedSettings.js +98 -4
  741. package/vscode/src/vs/platform/policy/common/copilotManagedSettings.service.d.ts +3 -2
  742. package/vscode/src/vs/platform/product/common/product.js +3 -3
  743. package/vscode/src/vs/platform/progress/common/progress.d.ts +9 -2
  744. package/vscode/src/vs/platform/quickinput/browser/quickAccess.js +2 -0
  745. package/vscode/src/vs/platform/quickinput/browser/quickInput.js +10 -10
  746. package/vscode/src/vs/platform/quickinput/browser/quickInputActions.js +5 -5
  747. package/vscode/src/vs/platform/quickinput/browser/quickInputController.d.ts +3 -0
  748. package/vscode/src/vs/platform/quickinput/browser/quickInputController.js +55 -13
  749. package/vscode/src/vs/platform/quickinput/browser/quickInputList.js +1 -1
  750. package/vscode/src/vs/platform/quickinput/browser/quickInputService.d.ts +3 -2
  751. package/vscode/src/vs/platform/quickinput/browser/quickInputService.js +3 -0
  752. package/vscode/src/vs/platform/quickinput/browser/quickInputUtils.js +1 -1
  753. package/vscode/src/vs/platform/quickinput/browser/quickPickPin.js +2 -2
  754. package/vscode/src/vs/platform/quickinput/browser/tree/quickInputTreeAccessibilityProvider.js +1 -1
  755. package/vscode/src/vs/platform/quickinput/browser/tree/quickTree.js +1 -1
  756. package/vscode/src/vs/platform/quickinput/common/quickAccess.d.ts +11 -0
  757. package/vscode/src/vs/platform/quickinput/common/quickInput.d.ts +15 -2
  758. package/vscode/src/vs/platform/quickinput/common/quickInput.service.d.ts +5 -1
  759. package/vscode/src/vs/platform/remote/common/remoteAgentConnection.d.ts +4 -0
  760. package/vscode/src/vs/platform/remote/common/remoteAgentConnection.js +20 -9
  761. package/vscode/src/vs/platform/remoteTunnel/common/tunnelServiceHeaders.d.ts +10 -0
  762. package/vscode/src/vs/platform/remoteTunnel/common/tunnelServiceHeaders.js +23 -0
  763. package/vscode/src/vs/platform/request/common/request.d.ts +2 -0
  764. package/vscode/src/vs/platform/request/common/request.js +42 -22
  765. package/vscode/src/vs/platform/sandbox/common/sandboxHelperService.d.ts +0 -86
  766. package/vscode/src/vs/platform/sandbox/common/sandboxHelperService.service.d.ts +1 -4
  767. package/vscode/src/vs/platform/sandbox/common/sandboxSettingsResolutionHelper.d.ts +34 -0
  768. package/vscode/src/vs/platform/sandbox/common/sandboxSettingsResolutionHelper.js +51 -0
  769. package/vscode/src/vs/platform/sandbox/common/settings.d.ts +25 -5
  770. package/vscode/src/vs/platform/sandbox/common/settings.js +13 -6
  771. package/vscode/src/vs/platform/sandbox/common/terminalSandboxService.d.ts +109 -0
  772. package/vscode/src/vs/platform/sandbox/common/terminalSandboxService.js +20 -0
  773. package/vscode/src/vs/platform/sandbox/common/terminalSandboxService.service.d.ts +2 -1
  774. package/vscode/src/vs/platform/storage/common/storage.d.ts +6 -1
  775. package/vscode/src/vs/platform/storage/common/storage.js +17 -0
  776. package/vscode/src/vs/platform/storage/common/storage.service.d.ts +7 -0
  777. package/vscode/src/vs/platform/telemetry/common/experimentTrigger.d.ts +21 -0
  778. package/vscode/src/vs/platform/telemetry/common/experimentTrigger.js +28 -0
  779. package/vscode/src/vs/platform/telemetry/common/telemetryUtils.js +1 -1
  780. package/vscode/src/vs/platform/terminal/common/autoApprove/gitAutoApproveRules.d.ts +1 -0
  781. package/vscode/src/vs/platform/terminal/common/autoApprove/gitAutoApproveRules.js +13 -10
  782. package/vscode/src/vs/platform/terminal/common/capabilities/capabilities.d.ts +2 -0
  783. package/vscode/src/vs/platform/terminal/common/capabilities/commandDetectionCapability.d.ts +1 -0
  784. package/vscode/src/vs/platform/terminal/common/capabilities/commandDetectionCapability.js +5 -0
  785. package/vscode/src/vs/platform/terminal/common/capabilities/partialCommandDetectionCapability.d.ts +1 -0
  786. package/vscode/src/vs/platform/terminal/common/capabilities/partialCommandDetectionCapability.js +3 -0
  787. package/vscode/src/vs/platform/terminal/common/terminal.d.ts +1 -0
  788. package/vscode/src/vs/platform/terminal/common/terminal.js +1 -0
  789. package/vscode/src/vs/platform/terminal/common/terminalEnvironment.js +2 -2
  790. package/vscode/src/vs/platform/terminal/common/terminalPlatformConfiguration.js +34 -34
  791. package/vscode/src/vs/platform/terminal/common/terminalProfiles.js +1 -1
  792. package/vscode/src/vs/platform/theme/common/colorUtils.js +2 -2
  793. package/vscode/src/vs/platform/theme/common/colors/baseColors.js +19 -19
  794. package/vscode/src/vs/platform/theme/common/colors/chartsColors.js +8 -8
  795. package/vscode/src/vs/platform/theme/common/colors/editorColors.js +96 -96
  796. package/vscode/src/vs/platform/theme/common/colors/inputColors.js +53 -48
  797. package/vscode/src/vs/platform/theme/common/colors/listColors.js +36 -36
  798. package/vscode/src/vs/platform/theme/common/colors/menuColors.js +8 -8
  799. package/vscode/src/vs/platform/theme/common/colors/minimapColors.js +11 -11
  800. package/vscode/src/vs/platform/theme/common/colors/miscColors.js +16 -16
  801. package/vscode/src/vs/platform/theme/common/colors/quickpickColors.js +12 -12
  802. package/vscode/src/vs/platform/theme/common/colors/searchColors.js +3 -3
  803. package/vscode/src/vs/platform/theme/common/iconRegistry.js +6 -6
  804. package/vscode/src/vs/platform/theme/common/sizes/baseSizes.js +37 -37
  805. package/vscode/src/vs/platform/theme/common/tokenClassificationRegistry.js +42 -42
  806. package/vscode/src/vs/platform/undoRedo/common/undoRedoService.js +20 -20
  807. package/vscode/src/vs/platform/url/common/trustedDomains.d.ts +9 -1
  808. package/vscode/src/vs/platform/url/common/trustedDomains.js +43 -22
  809. package/vscode/src/vs/platform/url/common/urlGlob.d.ts +8 -5
  810. package/vscode/src/vs/platform/url/common/urlGlob.js +170 -85
  811. package/vscode/src/vs/platform/userDataProfile/common/userDataProfile.js +1 -1
  812. package/vscode/src/vs/platform/userDataSync/common/abstractSynchronizer.js +2 -2
  813. package/vscode/src/vs/platform/userDataSync/common/keybindingsSync.js +2 -2
  814. package/vscode/src/vs/platform/userDataSync/common/settingsSync.js +1 -1
  815. package/vscode/src/vs/platform/userDataSync/common/userDataSync.js +5 -5
  816. package/vscode/src/vs/platform/userDataSync/common/userDataSyncMachines.js +1 -1
  817. package/vscode/src/vs/platform/window/common/window.d.ts +22 -2
  818. package/vscode/src/vs/platform/window/common/window.js +37 -19
  819. package/vscode/src/vs/platform/workspace/common/workspace.js +1 -1
  820. package/vscode/src/vs/platform/workspace/common/workspaceTrust.service.d.ts +2 -0
  821. package/vscode/src/vs/sessions/browser/accountTitleBarState.js +18 -18
  822. package/vscode/src/vs/sessions/browser/layoutPolicy.d.ts +7 -8
  823. package/vscode/src/vs/sessions/browser/layoutPolicy.js +5 -5
  824. package/vscode/src/vs/sessions/browser/media/style.css +20 -11
  825. package/vscode/src/vs/sessions/browser/media/workbench.css +176 -35
  826. package/vscode/src/vs/sessions/browser/menus.d.ts +21 -0
  827. package/vscode/src/vs/sessions/browser/menus.js +21 -1
  828. package/vscode/src/vs/sessions/browser/openInVSCodeUtils.d.ts +26 -0
  829. package/vscode/src/vs/sessions/browser/openInVSCodeUtils.js +78 -0
  830. package/vscode/src/vs/sessions/browser/parts/agentsPartCard.d.ts +12 -5
  831. package/vscode/src/vs/sessions/browser/parts/agentsPartCard.js +50 -7
  832. package/vscode/src/vs/sessions/browser/parts/auxiliaryBarPart.d.ts +1 -1
  833. package/vscode/src/vs/sessions/browser/parts/auxiliaryBarPart.js +7 -5
  834. package/vscode/src/vs/sessions/browser/parts/chatView.d.ts +22 -5
  835. package/vscode/src/vs/sessions/browser/parts/chatView.js +12 -3
  836. package/vscode/src/vs/sessions/browser/parts/editorPartSizing.d.ts +2 -2
  837. package/vscode/src/vs/sessions/browser/parts/media/titlebarpart.css +8 -0
  838. package/vscode/src/vs/sessions/browser/parts/mobile/contributions/mobileChangesView.d.ts +1 -1
  839. package/vscode/src/vs/sessions/browser/parts/mobile/contributions/mobileDiffColors.js +3 -3
  840. package/vscode/src/vs/sessions/browser/parts/mobile/media/mobilePickerSheet.css +92 -0
  841. package/vscode/src/vs/sessions/browser/parts/mobile/mobileChatShell.css +37 -9
  842. package/vscode/src/vs/sessions/browser/parts/mobile/mobilePickerSheet.d.ts +17 -2
  843. package/vscode/src/vs/sessions/browser/parts/mobile/mobilePickerSheet.js +120 -12
  844. package/vscode/src/vs/sessions/browser/parts/mobile/mobileSessionFilterChips.d.ts +3 -46
  845. package/vscode/src/vs/sessions/browser/parts/mobile/mobileSessionFilterChips.js +5 -97
  846. package/vscode/src/vs/sessions/browser/parts/mobile/mobileSortGroupSheet.js +1 -1
  847. package/vscode/src/vs/sessions/browser/parts/mobile/mobileTitlebarPart.d.ts +2 -0
  848. package/vscode/src/vs/sessions/browser/parts/mobile/mobileTitlebarPart.js +23 -15
  849. package/vscode/src/vs/sessions/browser/parts/sidebarPart.js +1 -1
  850. package/vscode/src/vs/sessions/browser/parts/titlebarPart.js +20 -8
  851. package/vscode/src/vs/sessions/browser/sessionActionViewItem.d.ts +16 -1
  852. package/vscode/src/vs/sessions/browser/sessionActionViewItem.js +50 -6
  853. package/vscode/src/vs/sessions/browser/sessionAgentMerge.d.ts +10 -5
  854. package/vscode/src/vs/sessions/browser/sessionAgentMerge.js +25 -8
  855. package/vscode/src/vs/sessions/browser/sessionConversationGroups.d.ts +1 -3
  856. package/vscode/src/vs/sessions/browser/sessionConversationGroups.js +8 -11
  857. package/vscode/src/vs/sessions/browser/sessionStatusIcon.d.ts +3 -3
  858. package/vscode/src/vs/sessions/browser/sessionStatusIcon.js +5 -8
  859. package/vscode/src/vs/sessions/browser/sessionsAuthGate.d.ts +1 -1
  860. package/vscode/src/vs/sessions/browser/sessionsAuthGate.js +8 -1
  861. package/vscode/src/vs/sessions/browser/workbench.d.ts +33 -16
  862. package/vscode/src/vs/sessions/browser/workbench.js +288 -56
  863. package/vscode/src/vs/sessions/browser/workbench.service.d.ts +8 -8
  864. package/vscode/src/vs/sessions/common/agentHostSessionWorkspace.d.ts +11 -0
  865. package/vscode/src/vs/sessions/common/agentHostSessionWorkspace.js +81 -4
  866. package/vscode/src/vs/sessions/common/agentHostSessionsProvider.d.ts +58 -12
  867. package/vscode/src/vs/sessions/common/agentHostSessionsProvider.js +4 -1
  868. package/vscode/src/vs/sessions/common/categories.js +1 -1
  869. package/vscode/src/vs/sessions/common/chatLayout.d.ts +41 -0
  870. package/vscode/src/vs/sessions/common/chatLayout.js +81 -0
  871. package/vscode/src/vs/sessions/common/contextkeys.d.ts +24 -8
  872. package/vscode/src/vs/sessions/common/contextkeys.js +123 -80
  873. package/vscode/src/vs/sessions/common/devContainerAgentHostService.d.ts +23 -2
  874. package/vscode/src/vs/sessions/common/devContainerAgentHostService.js +10 -1
  875. package/vscode/src/vs/sessions/common/devContainerAgentHostService.service.d.ts +7 -2
  876. package/vscode/src/vs/sessions/common/dockedEditorInput.d.ts +2 -2
  877. package/vscode/src/vs/sessions/common/layoutConstants.d.ts +1 -1
  878. package/vscode/src/vs/sessions/common/layoutConstants.js +2 -2
  879. package/vscode/src/vs/sessions/common/sessionApplication.d.ts +2 -0
  880. package/vscode/src/vs/sessions/common/sessionApplication.js +58 -0
  881. package/vscode/src/vs/sessions/common/sessionCommands.d.ts +16 -0
  882. package/vscode/src/vs/sessions/common/sessionCommands.js +15 -1
  883. package/vscode/src/vs/sessions/common/sessionConfig.d.ts +16 -7
  884. package/vscode/src/vs/sessions/common/sessionConfig.js +19 -2
  885. package/vscode/src/vs/sessions/common/sessionsTelemetry.d.ts +38 -4
  886. package/vscode/src/vs/sessions/common/sessionsTelemetry.js +41 -4
  887. package/vscode/src/vs/sessions/common/theme.d.ts +1 -29
  888. package/vscode/src/vs/sessions/contrib/agentFeedback/browser/agentFeedbackEditorUtils.d.ts +2 -2
  889. package/vscode/src/vs/sessions/contrib/agentFeedback/browser/agentFeedbackItemsBackend.d.ts +4 -5
  890. package/vscode/src/vs/sessions/contrib/agentFeedback/browser/agentFeedbackItemsBackend.js +71 -52
  891. package/vscode/src/vs/sessions/contrib/agentFeedback/browser/agentFeedbackService.d.ts +10 -2
  892. package/vscode/src/vs/sessions/contrib/agentFeedback/browser/agentFeedbackService.service.d.ts +5 -1
  893. package/vscode/src/vs/sessions/contrib/agentFeedback/browser/feedbackInputWidget.d.ts +9 -0
  894. package/vscode/src/vs/sessions/contrib/agentFeedback/browser/feedbackInputWidget.js +24 -3
  895. package/vscode/src/vs/sessions/contrib/agentFeedback/browser/sessionEditorComments.d.ts +2 -1
  896. package/vscode/src/vs/sessions/contrib/aiCustomizationTreeView/browser/aiCustomizationTreeView.js +1 -1
  897. package/vscode/src/vs/sessions/contrib/automations/browser/automationModelConfiguration.d.ts +1 -1
  898. package/vscode/src/vs/sessions/contrib/automations/browser/automationModelConfiguration.js +15 -4
  899. package/vscode/src/vs/sessions/contrib/blockedSessions/browser/blockedSessions.d.ts +52 -0
  900. package/vscode/src/vs/sessions/contrib/blockedSessions/browser/blockedSessions.js +132 -0
  901. package/vscode/src/vs/sessions/contrib/canvases/browser/sessionCanvasesControl.d.ts +15 -0
  902. package/vscode/src/vs/sessions/contrib/canvases/browser/sessionCanvasesControl.js +67 -0
  903. package/vscode/src/vs/sessions/contrib/canvases/common/sessionCanvas.d.ts +7 -0
  904. package/vscode/src/vs/sessions/contrib/canvases/common/sessionCanvas.js +58 -0
  905. package/vscode/src/vs/sessions/contrib/changes/browser/changesEditorLabels.d.ts +11 -0
  906. package/vscode/src/vs/sessions/contrib/changes/browser/changesEditorLabels.js +9 -3
  907. package/vscode/src/vs/sessions/contrib/changes/browser/changesSummaryWidget.js +15 -46
  908. package/vscode/src/vs/sessions/contrib/changes/browser/changesView.d.ts +63 -11
  909. package/vscode/src/vs/sessions/contrib/changes/browser/changesView.js +250 -89
  910. package/vscode/src/vs/sessions/contrib/changes/browser/changesViewRenderer.d.ts +1 -0
  911. package/vscode/src/vs/sessions/contrib/changes/browser/changesViewRenderer.js +1 -1
  912. package/vscode/src/vs/sessions/contrib/changes/browser/changesViewService.d.ts +9 -3
  913. package/vscode/src/vs/sessions/contrib/changes/browser/changesViewService.js +251 -51
  914. package/vscode/src/vs/sessions/contrib/changes/browser/checksActions.js +5 -5
  915. package/vscode/src/vs/sessions/contrib/changes/browser/checksWidget.js +7 -7
  916. package/vscode/src/vs/sessions/contrib/changes/browser/createPullRequestChatRequest.d.ts +8 -4
  917. package/vscode/src/vs/sessions/contrib/changes/browser/createPullRequestChatRequest.js +13 -21
  918. package/vscode/src/vs/sessions/contrib/changes/browser/createPullRequestContextView.d.ts +2 -1
  919. package/vscode/src/vs/sessions/contrib/changes/browser/createPullRequestContextView.js +35 -1
  920. package/vscode/src/vs/sessions/contrib/changes/browser/createPullRequestWidget.d.ts +17 -2
  921. package/vscode/src/vs/sessions/contrib/changes/browser/createPullRequestWidget.js +149 -83
  922. package/vscode/src/vs/sessions/contrib/changes/browser/media/changesSummaryWidget.css +1 -9
  923. package/vscode/src/vs/sessions/contrib/changes/browser/media/sessionChangesEditor.css +9 -10
  924. package/vscode/src/vs/sessions/contrib/changes/browser/sessionChangesEditor.d.ts +10 -3
  925. package/vscode/src/vs/sessions/contrib/changes/browser/sessionChangesEditor.js +79 -25
  926. package/vscode/src/vs/sessions/contrib/changes/browser/sessionChangesEditorInput.js +2 -2
  927. package/vscode/src/vs/sessions/contrib/changes/browser/sessionChangesService.js +5 -4
  928. package/vscode/src/vs/sessions/contrib/changes/common/changes.d.ts +0 -1
  929. package/vscode/src/vs/sessions/contrib/changes/common/changes.js +1 -2
  930. package/vscode/src/vs/sessions/contrib/changes/common/changesViewService.d.ts +7 -0
  931. package/vscode/src/vs/sessions/contrib/changes/common/changesViewService.js +8 -0
  932. package/vscode/src/vs/sessions/contrib/changes/common/changesViewService.service.d.ts +2 -1
  933. package/vscode/src/vs/sessions/contrib/changes/common/pullRequestCreation.d.ts +10 -5
  934. package/vscode/src/vs/sessions/contrib/chat/browser/agentHostInputCompletions.d.ts +5 -1
  935. package/vscode/src/vs/sessions/contrib/chat/browser/agentHostInputCompletions.js +43 -13
  936. package/vscode/src/vs/sessions/contrib/chat/browser/branchPicker.d.ts +2 -0
  937. package/vscode/src/vs/sessions/contrib/chat/browser/branchPicker.js +12 -11
  938. package/vscode/src/vs/sessions/contrib/chat/browser/externalSessionBanner.d.ts +1 -0
  939. package/vscode/src/vs/sessions/contrib/chat/browser/externalSessionBanner.js +67 -34
  940. package/vscode/src/vs/sessions/contrib/chat/browser/media/chatInput.css +63 -1
  941. package/vscode/src/vs/sessions/contrib/chat/browser/media/chatInputMobile.css +0 -1
  942. package/vscode/src/vs/sessions/contrib/chat/browser/media/chatView.css +31 -25
  943. package/vscode/src/vs/sessions/contrib/chat/browser/media/chatWidget.css +409 -24
  944. package/vscode/src/vs/sessions/contrib/chat/browser/media/externalSessionBanner.css +1 -1
  945. package/vscode/src/vs/sessions/contrib/chat/browser/media/newChatInSession.css +1 -5
  946. package/vscode/src/vs/sessions/contrib/chat/browser/media/newChatMigrationNotice.css +27 -0
  947. package/vscode/src/vs/sessions/contrib/chat/browser/media/sessionComparisonResult.css +229 -0
  948. package/vscode/src/vs/sessions/contrib/chat/browser/mobile/mobileSessionTypePicker.d.ts +5 -3
  949. package/vscode/src/vs/sessions/contrib/chat/browser/mobile/mobileSessionTypePicker.js +34 -17
  950. package/vscode/src/vs/sessions/contrib/chat/browser/mobile/mobileWorkspacePickerSheet.d.ts +2 -1
  951. package/vscode/src/vs/sessions/contrib/chat/browser/mobile/mobileWorkspacePickerSheet.js +14 -8
  952. package/vscode/src/vs/sessions/contrib/chat/browser/modelPicker.d.ts +10 -4
  953. package/vscode/src/vs/sessions/contrib/chat/browser/modelPicker.js +70 -12
  954. package/vscode/src/vs/sessions/contrib/chat/browser/newChatContextAttachments.d.ts +2 -1
  955. package/vscode/src/vs/sessions/contrib/chat/browser/newChatContextAttachments.js +48 -30
  956. package/vscode/src/vs/sessions/contrib/chat/browser/newChatInSessionWidget.d.ts +10 -1
  957. package/vscode/src/vs/sessions/contrib/chat/browser/newChatInSessionWidget.js +38 -10
  958. package/vscode/src/vs/sessions/contrib/chat/browser/newChatInput.d.ts +46 -4
  959. package/vscode/src/vs/sessions/contrib/chat/browser/newChatInput.js +348 -104
  960. package/vscode/src/vs/sessions/contrib/chat/browser/newChatMigrationNotice.d.ts +8 -0
  961. package/vscode/src/vs/sessions/contrib/chat/browser/newChatMigrationNotice.js +46 -0
  962. package/vscode/src/vs/sessions/contrib/chat/browser/newChatModelPicker.d.ts +2 -1
  963. package/vscode/src/vs/sessions/contrib/chat/browser/newChatModelPicker.js +3 -3
  964. package/vscode/src/vs/sessions/contrib/chat/browser/newChatModelPicker.service.d.ts +1 -0
  965. package/vscode/src/vs/sessions/contrib/chat/browser/newChatPickerKeybinding.d.ts +12 -0
  966. package/vscode/src/vs/sessions/contrib/chat/browser/newChatPickerKeybinding.js +73 -0
  967. package/vscode/src/vs/sessions/contrib/chat/browser/newChatUserInteraction.d.ts +43 -0
  968. package/vscode/src/vs/sessions/contrib/chat/browser/newChatUserInteraction.js +172 -0
  969. package/vscode/src/vs/sessions/contrib/chat/browser/newChatVoice.js +5 -5
  970. package/vscode/src/vs/sessions/contrib/chat/browser/newChatWidget.d.ts +63 -10
  971. package/vscode/src/vs/sessions/contrib/chat/browser/newChatWidget.js +908 -84
  972. package/vscode/src/vs/sessions/contrib/chat/browser/newSessionComposerService.d.ts +16 -0
  973. package/vscode/src/vs/sessions/contrib/chat/browser/newSessionComposerService.js +37 -3
  974. package/vscode/src/vs/sessions/contrib/chat/browser/newSessionComposerService.service.d.ts +6 -1
  975. package/vscode/src/vs/sessions/contrib/chat/browser/newSessionPromptOptions.js +3 -3
  976. package/vscode/src/vs/sessions/contrib/chat/browser/noAgentHostEmptyState.js +4 -4
  977. package/vscode/src/vs/sessions/contrib/chat/browser/promptTemplatePlaceholder.js +2 -2
  978. package/vscode/src/vs/sessions/contrib/chat/browser/responseSelectionResolver.d.ts +9 -2
  979. package/vscode/src/vs/sessions/contrib/chat/browser/responseSelectionResolver.js +90 -11
  980. package/vscode/src/vs/sessions/contrib/chat/browser/responseSelectionSideChatController.d.ts +31 -7
  981. package/vscode/src/vs/sessions/contrib/chat/browser/responseSelectionSideChatController.js +252 -53
  982. package/vscode/src/vs/sessions/contrib/chat/browser/sessionArchiveNudge.d.ts +17 -3
  983. package/vscode/src/vs/sessions/contrib/chat/browser/sessionArchiveNudge.js +126 -26
  984. package/vscode/src/vs/sessions/contrib/chat/browser/sessionArchiveNudge.service.d.ts +13 -3
  985. package/vscode/src/vs/sessions/contrib/chat/browser/sessionArtifacts.d.ts +37 -9
  986. package/vscode/src/vs/sessions/contrib/chat/browser/sessionArtifacts.js +429 -114
  987. package/vscode/src/vs/sessions/contrib/chat/browser/sessionBackgroundActivitiesControl.d.ts +7 -11
  988. package/vscode/src/vs/sessions/contrib/chat/browser/sessionBackgroundActivitiesControl.js +36 -32
  989. package/vscode/src/vs/sessions/contrib/chat/browser/sessionBrowsersControl.js +2 -2
  990. package/vscode/src/vs/sessions/contrib/chat/browser/sessionChatInputToolbar.d.ts +21 -10
  991. package/vscode/src/vs/sessions/contrib/chat/browser/sessionChatInputToolbar.js +433 -131
  992. package/vscode/src/vs/sessions/contrib/chat/browser/sessionComparisonModelSelection.d.ts +28 -0
  993. package/vscode/src/vs/sessions/contrib/chat/browser/sessionComparisonModelSelection.js +201 -0
  994. package/vscode/src/vs/sessions/contrib/chat/browser/sessionComparisonResult.d.ts +47 -0
  995. package/vscode/src/vs/sessions/contrib/chat/browser/sessionComparisonResult.js +592 -0
  996. package/vscode/src/vs/sessions/contrib/chat/browser/sessionModelPickerState.js +0 -2
  997. package/vscode/src/vs/sessions/contrib/chat/browser/sessionModelSelection.d.ts +4 -1
  998. package/vscode/src/vs/sessions/contrib/chat/browser/sessionModelSelection.js +26 -10
  999. package/vscode/src/vs/sessions/contrib/chat/browser/sessionModelSelection.service.d.ts +3 -1
  1000. package/vscode/src/vs/sessions/contrib/chat/browser/sessionReferenceCompletions.js +3 -3
  1001. package/vscode/src/vs/sessions/contrib/chat/browser/sessionTaskRunner.service.d.ts +2 -2
  1002. package/vscode/src/vs/sessions/contrib/chat/browser/sessionTypePicker.d.ts +45 -12
  1003. package/vscode/src/vs/sessions/contrib/chat/browser/sessionTypePicker.js +142 -31
  1004. package/vscode/src/vs/sessions/contrib/chat/browser/sessionWorkspaceFallback.d.ts +7 -1
  1005. package/vscode/src/vs/sessions/contrib/chat/browser/sessionWorkspaceFallback.js +51 -8
  1006. package/vscode/src/vs/sessions/contrib/chat/browser/sessionWorkspacePicker.d.ts +41 -7
  1007. package/vscode/src/vs/sessions/contrib/chat/browser/sessionWorkspacePicker.js +425 -157
  1008. package/vscode/src/vs/sessions/contrib/chat/browser/sessionsTasksService.d.ts +10 -10
  1009. package/vscode/src/vs/sessions/contrib/chat/browser/sessionsTasksService.js +3 -3
  1010. package/vscode/src/vs/sessions/contrib/chat/browser/sessionsTasksService.service.d.ts +19 -19
  1011. package/vscode/src/vs/sessions/contrib/chat/browser/slashCommands.d.ts +5 -2
  1012. package/vscode/src/vs/sessions/contrib/chat/browser/slashCommands.js +40 -10
  1013. package/vscode/src/vs/sessions/contrib/chat/browser/variableCompletions.d.ts +2 -2
  1014. package/vscode/src/vs/sessions/contrib/chat/browser/variableCompletions.js +3 -3
  1015. package/vscode/src/vs/sessions/contrib/chat/browser/webWorkspacePicker.d.ts +7 -1
  1016. package/vscode/src/vs/sessions/contrib/chat/browser/webWorkspacePicker.js +54 -15
  1017. package/vscode/src/vs/sessions/contrib/chat/common/constants.d.ts +10 -0
  1018. package/vscode/src/vs/sessions/contrib/chat/common/constants.js +10 -1
  1019. package/vscode/src/vs/sessions/contrib/chat/common/newChatDraftState.d.ts +4 -0
  1020. package/vscode/src/vs/sessions/contrib/chat/common/newChatDraftState.js +29 -0
  1021. package/vscode/src/vs/sessions/contrib/chat/common/welcomePhrases.d.ts +19 -0
  1022. package/vscode/src/vs/sessions/contrib/chat/common/welcomePhrases.js +35 -0
  1023. package/vscode/src/vs/sessions/contrib/codeReview/browser/codeReviewService.d.ts +18 -0
  1024. package/vscode/src/vs/sessions/contrib/codeReview/browser/codeReviewService.js +185 -6
  1025. package/vscode/src/vs/sessions/contrib/codeReview/browser/codeReviewService.service.d.ts +5 -1
  1026. package/vscode/src/vs/sessions/contrib/editor/browser/diffEditor.sessions.contribution.js +6 -6
  1027. package/vscode/src/vs/sessions/contrib/editor/common/diffEditorOptionsService.js +1 -1
  1028. package/vscode/src/vs/sessions/contrib/github/browser/fetchers/githubChangesFetcher.js +1 -0
  1029. package/vscode/src/vs/sessions/contrib/github/browser/fetchers/githubPRFetcher.d.ts +4 -1
  1030. package/vscode/src/vs/sessions/contrib/github/browser/fetchers/githubPRFetcher.js +110 -6
  1031. package/vscode/src/vs/sessions/contrib/github/browser/fetchers/githubRepositoryFetcher.d.ts +2 -0
  1032. package/vscode/src/vs/sessions/contrib/github/browser/fetchers/githubRepositoryFetcher.js +58 -11
  1033. package/vscode/src/vs/sessions/contrib/github/browser/githubApiClient.d.ts +3 -0
  1034. package/vscode/src/vs/sessions/contrib/github/browser/githubApiClient.js +68 -13
  1035. package/vscode/src/vs/sessions/contrib/github/browser/githubService.d.ts +9 -1
  1036. package/vscode/src/vs/sessions/contrib/github/browser/githubService.js +44 -0
  1037. package/vscode/src/vs/sessions/contrib/github/browser/githubService.service.d.ts +9 -1
  1038. package/vscode/src/vs/sessions/contrib/github/browser/issueHover.d.ts +12 -1
  1039. package/vscode/src/vs/sessions/contrib/github/browser/issueHover.js +19 -52
  1040. package/vscode/src/vs/sessions/contrib/github/browser/models/githubPullRequestModel.d.ts +4 -0
  1041. package/vscode/src/vs/sessions/contrib/github/browser/models/githubPullRequestModel.js +13 -0
  1042. package/vscode/src/vs/sessions/contrib/github/browser/pullRequestHover.d.ts +12 -1
  1043. package/vscode/src/vs/sessions/contrib/github/browser/pullRequestHover.js +23 -55
  1044. package/vscode/src/vs/sessions/contrib/github/browser/pullRequestIconStatus.d.ts +5 -3
  1045. package/vscode/src/vs/sessions/contrib/github/browser/pullRequestIconStatus.js +20 -7
  1046. package/vscode/src/vs/sessions/contrib/github/common/sessionGitHubReferences.d.ts +13 -0
  1047. package/vscode/src/vs/sessions/contrib/github/common/sessionGitHubReferences.js +115 -0
  1048. package/vscode/src/vs/sessions/contrib/github/common/sessionLifecycleSettings.d.ts +2 -2
  1049. package/vscode/src/vs/sessions/contrib/github/common/types.d.ts +6 -14
  1050. package/vscode/src/vs/sessions/contrib/github/common/types.js +23 -53
  1051. package/vscode/src/vs/sessions/contrib/github/common/utils.d.ts +4 -6
  1052. package/vscode/src/vs/sessions/contrib/github/common/utils.js +15 -10
  1053. package/vscode/src/vs/sessions/contrib/layout/common/sessionEditorWorkingSet.service.d.ts +33 -0
  1054. package/vscode/src/vs/sessions/contrib/layout/common/sessionEditorWorkingSet.service.js +6 -0
  1055. package/vscode/src/vs/sessions/contrib/onboardingTours/browser/tours/sessionArchiveTour.js +11 -5
  1056. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostAutomationStore.d.ts +27 -37
  1057. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostAutomationStore.js +315 -686
  1058. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostClaudePermissionModePicker.d.ts +26 -0
  1059. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostClaudePermissionModePicker.js +98 -0
  1060. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostCodexApprovalsPicker.d.ts +33 -0
  1061. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostCodexApprovalsPicker.js +98 -0
  1062. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostDiffs.d.ts +2 -2
  1063. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostDiffs.js +10 -8
  1064. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostModeIcon.d.ts +2 -0
  1065. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostModeIcon.js +13 -0
  1066. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostModePicker.d.ts +122 -0
  1067. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostModePicker.js +474 -0
  1068. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostPermissionPickerActionItem.d.ts +35 -0
  1069. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostPermissionPickerActionItem.js +90 -0
  1070. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostPermissionPickerDelegate.d.ts +68 -0
  1071. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostPermissionPickerDelegate.js +371 -0
  1072. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostPullRequestCreation.d.ts +8 -5
  1073. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostPullRequestCreation.js +20 -7
  1074. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostSessionArtifacts.d.ts +24 -13
  1075. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostSessionArtifacts.js +28 -37
  1076. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostSessionChangesets.d.ts +13 -2
  1077. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostSessionChangesets.js +233 -69
  1078. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostSessionConfigPicker.d.ts +227 -0
  1079. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostSessionConfigPicker.js +1816 -0
  1080. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostSessionFiles.d.ts +4 -11
  1081. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostSessionFiles.js +40 -13
  1082. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostSessionPermissions.d.ts +8 -0
  1083. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostSessionPermissions.js +183 -0
  1084. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostSkillButtons.js +4 -4
  1085. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/baseAgentHostSessionsProvider.d.ts +258 -109
  1086. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/baseAgentHostSessionsProvider.js +2671 -618
  1087. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/devContainerAgentHostSessionsProvider.d.ts +45 -0
  1088. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/devContainerAgentHostSessionsProvider.js +485 -0
  1089. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/media/agentHostSessionConfigPicker.css +48 -0
  1090. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/mobile/mobileAgentHostModePicker.d.ts +30 -0
  1091. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/mobile/mobileAgentHostModePicker.js +78 -0
  1092. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/mobile/mobileChatPhoneInputTarget.d.ts +11 -0
  1093. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/mobile/mobileChatPhoneInputTarget.js +26 -0
  1094. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/reconnectableAgentHostAutomationStore.d.ts +29 -37
  1095. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/reconnectableAgentHostAutomationStore.js +109 -233
  1096. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/worktreeDiskUsage.d.ts +5 -0
  1097. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/worktreeDiskUsage.js +64 -0
  1098. package/vscode/src/vs/sessions/contrib/providers/copilotChatSessions/browser/mobilePermissionPicker.d.ts +25 -0
  1099. package/vscode/src/vs/sessions/contrib/providers/copilotChatSessions/browser/mobilePermissionPicker.js +99 -0
  1100. package/vscode/src/vs/sessions/contrib/providers/copilotChatSessions/browser/permissionPicker.d.ts +123 -0
  1101. package/vscode/src/vs/sessions/contrib/providers/copilotChatSessions/browser/permissionPicker.js +505 -0
  1102. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/browserTunnelAgentHostService.d.ts +35 -10
  1103. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/browserTunnelAgentHostService.js +136 -58
  1104. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/connectionDiagnostics.d.ts +35 -0
  1105. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/connectionDiagnostics.js +5 -0
  1106. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/connectionDiagnostics.service.d.ts +17 -0
  1107. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/connectionDiagnostics.service.js +6 -0
  1108. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/devTunnelsModule.js +644 -175
  1109. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/remoteAgentHostSessionsProvider.d.ts +102 -24
  1110. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/remoteAgentHostSessionsProvider.js +565 -79
  1111. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/remoteHostOptions.d.ts +5 -7
  1112. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/remoteHostOptions.js +115 -46
  1113. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/tunnelAgentHostStorage.d.ts +2 -1
  1114. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/tunnelAgentHostStorage.js +6 -0
  1115. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/webTunnelAgentHostService.contribution.d.ts +6 -6
  1116. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/webTunnelAgentHostService.contribution.js +11 -5
  1117. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/webTunnelAgentHostService.d.ts +3 -4
  1118. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/webTunnelAgentHostService.js +60 -10
  1119. package/vscode/src/vs/sessions/contrib/remoteSessions/browser/remoteSessionChatService.service.d.ts +8 -0
  1120. package/vscode/src/vs/sessions/contrib/remoteSessions/browser/remoteSessionChatService.service.js +6 -0
  1121. package/vscode/src/vs/sessions/contrib/remoteSessions/common/remoteSessions.d.ts +77 -0
  1122. package/vscode/src/vs/sessions/contrib/remoteSessions/common/remoteSessions.js +198 -0
  1123. package/vscode/src/vs/sessions/contrib/remoteSessions/common/remoteSessions.service.d.ts +9 -0
  1124. package/vscode/src/vs/sessions/contrib/remoteSessions/common/remoteSessions.service.js +6 -0
  1125. package/vscode/src/vs/sessions/contrib/sessionComparison/browser/sessionComparisonViewService.service.d.ts +5 -0
  1126. package/vscode/src/vs/sessions/contrib/sessionComparison/browser/sessionComparisonViewService.service.js +6 -0
  1127. package/vscode/src/vs/sessions/contrib/sessionComparison/common/sessionComparison.d.ts +2 -0
  1128. package/vscode/src/vs/sessions/contrib/sessionComparison/common/sessionComparison.js +6 -0
  1129. package/vscode/src/vs/sessions/contrib/sessionInputBanners/browser/sessionInputBannerWidget.d.ts +1 -1
  1130. package/vscode/src/vs/sessions/contrib/sessionInputBanners/browser/sessionInputBannerWidget.js +16 -5
  1131. package/vscode/src/vs/sessions/contrib/sessionInputBanners/browser/sessionInputBanners.js +56 -36
  1132. package/vscode/src/vs/sessions/contrib/sessionInputBanners/browser/sessionWorktreeCleanupService.d.ts +80 -0
  1133. package/vscode/src/vs/sessions/contrib/sessionInputBanners/browser/sessionWorktreeCleanupService.js +417 -0
  1134. package/vscode/src/vs/sessions/contrib/sessionInputBanners/browser/sessionWorktreeCleanupService.service.d.ts +12 -0
  1135. package/vscode/src/vs/sessions/contrib/sessionInputBanners/browser/sessionWorktreeCleanupService.service.js +6 -0
  1136. package/vscode/src/vs/sessions/contrib/sessions/browser/aiCustomizationShortcutsWidget.d.ts +8 -3
  1137. package/vscode/src/vs/sessions/contrib/sessions/browser/aiCustomizationShortcutsWidget.js +25 -27
  1138. package/vscode/src/vs/sessions/contrib/sessions/browser/customizationMcpServerCount.service.d.ts +6 -0
  1139. package/vscode/src/vs/sessions/contrib/sessions/browser/customizationMcpServerCount.service.js +6 -0
  1140. package/vscode/src/vs/sessions/contrib/sessions/browser/customizationsConstants.d.ts +1 -0
  1141. package/vscode/src/vs/sessions/contrib/sessions/browser/customizationsConstants.js +5 -0
  1142. package/vscode/src/vs/sessions/contrib/sessions/browser/customizationsNavigationState.d.ts +19 -0
  1143. package/vscode/src/vs/sessions/contrib/sessions/browser/customizationsNavigationState.js +98 -0
  1144. package/vscode/src/vs/sessions/contrib/sessions/browser/customizationsToolbar.contribution.d.ts +12 -6
  1145. package/vscode/src/vs/sessions/contrib/sessions/browser/customizationsToolbar.contribution.js +101 -37
  1146. package/vscode/src/vs/sessions/contrib/sessions/browser/media/sessionsList.css +673 -141
  1147. package/vscode/src/vs/sessions/contrib/sessions/browser/media/sessionsListNotice.css +42 -0
  1148. package/vscode/src/vs/sessions/contrib/sessions/browser/media/sessionsListNotification.css +76 -0
  1149. package/vscode/src/vs/sessions/contrib/sessions/browser/media/sessionsViewPane.css +72 -0
  1150. package/vscode/src/vs/sessions/contrib/sessions/browser/sessionHoverContent.d.ts +10 -3
  1151. package/vscode/src/vs/sessions/contrib/sessions/browser/sessionHoverContent.js +163 -30
  1152. package/vscode/src/vs/sessions/contrib/sessions/browser/views/sessionStorageCleanupNotice.d.ts +16 -0
  1153. package/vscode/src/vs/sessions/contrib/sessions/browser/views/sessionStorageCleanupNotice.js +102 -0
  1154. package/vscode/src/vs/sessions/contrib/sessions/browser/views/sessionsList.d.ts +175 -62
  1155. package/vscode/src/vs/sessions/contrib/sessions/browser/views/sessionsList.js +2469 -485
  1156. package/vscode/src/vs/sessions/contrib/sessions/browser/views/sessionsListFilters.d.ts +32 -0
  1157. package/vscode/src/vs/sessions/contrib/sessions/browser/views/sessionsListFilters.js +154 -0
  1158. package/vscode/src/vs/sessions/contrib/sessions/browser/views/sessionsListNotice.d.ts +36 -0
  1159. package/vscode/src/vs/sessions/contrib/sessions/browser/views/sessionsListNotice.js +17 -0
  1160. package/vscode/src/vs/sessions/contrib/sessions/browser/views/sessionsListNotification.d.ts +23 -0
  1161. package/vscode/src/vs/sessions/contrib/sessions/browser/views/sessionsListNotification.js +196 -0
  1162. package/vscode/src/vs/sessions/contrib/sessions/browser/views/sessionsView.d.ts +34 -15
  1163. package/vscode/src/vs/sessions/contrib/sessions/browser/views/sessionsView.js +369 -192
  1164. package/vscode/src/vs/sessions/services/agentHostFilter/common/agentHostFilter.d.ts +3 -0
  1165. package/vscode/src/vs/sessions/services/agentHostFilter/common/agentHostFilter.service.d.ts +6 -6
  1166. package/vscode/src/vs/sessions/services/chatBackground/browser/chatBackgroundRenderer.d.ts +22 -1
  1167. package/vscode/src/vs/sessions/services/chatBackground/browser/chatBackgroundRenderer.js +294 -38
  1168. package/vscode/src/vs/sessions/services/chatBackground/browser/media/chatBackground.css +63 -1
  1169. package/vscode/src/vs/sessions/services/customView/browser/customViewService.service.d.ts +8 -3
  1170. package/vscode/src/vs/sessions/services/sessions/browser/sessionGroupsService.service.d.ts +2 -0
  1171. package/vscode/src/vs/sessions/services/sessions/browser/sessionsListModelService.service.d.ts +4 -4
  1172. package/vscode/src/vs/sessions/services/sessions/browser/sessionsPartService.d.ts +15 -0
  1173. package/vscode/src/vs/sessions/services/sessions/browser/sessionsPartService.service.d.ts +15 -6
  1174. package/vscode/src/vs/sessions/services/sessions/browser/sessionsRecentWorkspacesService.d.ts +5 -0
  1175. package/vscode/src/vs/sessions/services/sessions/browser/sessionsRecentWorkspacesService.js +57 -2
  1176. package/vscode/src/vs/sessions/services/sessions/browser/sessionsRecentWorkspacesService.service.d.ts +5 -0
  1177. package/vscode/src/vs/sessions/services/sessions/browser/sessionsService.service.d.ts +17 -6
  1178. package/vscode/src/vs/sessions/services/sessions/common/session.d.ts +113 -44
  1179. package/vscode/src/vs/sessions/services/sessions/common/session.js +20 -33
  1180. package/vscode/src/vs/sessions/services/sessions/common/sessionChangesStatsCache.d.ts +6 -5
  1181. package/vscode/src/vs/sessions/services/sessions/common/sessionChangesStatsCache.js +24 -5
  1182. package/vscode/src/vs/sessions/services/sessions/common/sessionComparison.d.ts +134 -0
  1183. package/vscode/src/vs/sessions/services/sessions/common/sessionComparison.js +95 -0
  1184. package/vscode/src/vs/sessions/services/sessions/common/sessionComparison.service.d.ts +22 -0
  1185. package/vscode/src/vs/sessions/services/sessions/common/sessionComparison.service.js +6 -0
  1186. package/vscode/src/vs/sessions/services/sessions/common/sessionPickerVisibility.d.ts +26 -0
  1187. package/vscode/src/vs/sessions/services/sessions/common/sessionPickerVisibility.js +43 -0
  1188. package/vscode/src/vs/sessions/services/sessions/common/sessionPickerVisibility.service.d.ts +9 -0
  1189. package/vscode/src/vs/sessions/services/sessions/common/sessionPickerVisibility.service.js +6 -0
  1190. package/vscode/src/vs/sessions/services/sessions/common/sessionsManagement.d.ts +30 -12
  1191. package/vscode/src/vs/sessions/services/sessions/common/sessionsManagement.service.d.ts +31 -15
  1192. package/vscode/src/vs/sessions/services/sessions/common/sessionsProvider.d.ts +124 -63
  1193. package/vscode/src/vs/workbench/api/browser/mainThreadDocuments.d.ts +1 -1
  1194. package/vscode/src/vs/workbench/api/browser/mainThreadDocuments.js +2 -1
  1195. package/vscode/src/vs/workbench/api/browser/statusBarExtensionPoint.js +12 -12
  1196. package/vscode/src/vs/workbench/api/common/extHost.api.impl.js +7 -2
  1197. package/vscode/src/vs/workbench/api/common/extHost.protocol.d.ts +30 -8
  1198. package/vscode/src/vs/workbench/api/common/extHostAuthentication.d.ts +11 -1
  1199. package/vscode/src/vs/workbench/api/common/extHostAuthentication.js +115 -64
  1200. package/vscode/src/vs/workbench/api/common/extHostChatAgents2.d.ts +1 -1
  1201. package/vscode/src/vs/workbench/api/common/extHostChatAgents2.js +38 -19
  1202. package/vscode/src/vs/workbench/api/common/extHostChatSessions.d.ts +0 -1
  1203. package/vscode/src/vs/workbench/api/common/extHostChatSessions.js +1 -14
  1204. package/vscode/src/vs/workbench/api/common/extHostCodeMapper.js +11 -2
  1205. package/vscode/src/vs/workbench/api/common/extHostComments.js +13 -3
  1206. package/vscode/src/vs/workbench/api/common/extHostCustomEditors.d.ts +11 -0
  1207. package/vscode/src/vs/workbench/api/common/extHostCustomEditors.js +109 -11
  1208. package/vscode/src/vs/workbench/api/common/extHostDebugService.js +38 -15
  1209. package/vscode/src/vs/workbench/api/common/extHostDiagnostics.js +1 -1
  1210. package/vscode/src/vs/workbench/api/common/extHostExtensionService.d.ts +1 -0
  1211. package/vscode/src/vs/workbench/api/common/extHostExtensionService.js +4 -2
  1212. package/vscode/src/vs/workbench/api/common/extHostLanguageFeatures.js +11 -8
  1213. package/vscode/src/vs/workbench/api/common/extHostLanguageModelTools.d.ts +0 -1
  1214. package/vscode/src/vs/workbench/api/common/extHostLanguageModelTools.js +14 -14
  1215. package/vscode/src/vs/workbench/api/common/extHostLanguageModels.d.ts +5 -0
  1216. package/vscode/src/vs/workbench/api/common/extHostLanguageModels.js +42 -3
  1217. package/vscode/src/vs/workbench/api/common/extHostLogService.js +1 -1
  1218. package/vscode/src/vs/workbench/api/common/extHostMcp.d.ts +8 -1
  1219. package/vscode/src/vs/workbench/api/common/extHostMcp.js +127 -39
  1220. package/vscode/src/vs/workbench/api/common/extHostNotebook.js +4 -2
  1221. package/vscode/src/vs/workbench/api/common/extHostProgress.d.ts +5 -4
  1222. package/vscode/src/vs/workbench/api/common/extHostProgress.js +3 -2
  1223. package/vscode/src/vs/workbench/api/common/extHostSCM.js +19 -1
  1224. package/vscode/src/vs/workbench/api/common/extHostSpeech.js +2 -2
  1225. package/vscode/src/vs/workbench/api/common/extHostStatusBar.d.ts +1 -0
  1226. package/vscode/src/vs/workbench/api/common/extHostStatusBar.js +10 -3
  1227. package/vscode/src/vs/workbench/api/common/extHostTelemetry.d.ts +3 -1
  1228. package/vscode/src/vs/workbench/api/common/extHostTelemetry.js +38 -15
  1229. package/vscode/src/vs/workbench/api/common/extHostTerminalService.js +1 -1
  1230. package/vscode/src/vs/workbench/api/common/extHostTesting.js +6 -2
  1231. package/vscode/src/vs/workbench/api/common/extHostTimeline.js +4 -7
  1232. package/vscode/src/vs/workbench/api/common/extHostTreeViews.js +4 -2
  1233. package/vscode/src/vs/workbench/api/common/extHostTunnelService.js +2 -2
  1234. package/vscode/src/vs/workbench/api/common/extHostTypeConverters.js +13 -3
  1235. package/vscode/src/vs/workbench/api/common/extHostTypes.d.ts +10 -14
  1236. package/vscode/src/vs/workbench/api/common/extHostTypes.js +11 -16
  1237. package/vscode/src/vs/workbench/api/common/extHostUriOpener.d.ts +2 -0
  1238. package/vscode/src/vs/workbench/api/common/extHostUriOpener.js +2 -1
  1239. package/vscode/src/vs/workbench/api/common/extHostWorkspace.js +1 -1
  1240. package/vscode/src/vs/workbench/api/common/extensionHostMain.js +1 -1
  1241. package/vscode/src/vs/workbench/api/common/jsonValidationExtensionPoint.js +18 -18
  1242. package/vscode/src/vs/workbench/browser/actions/developerActions.js +90 -58
  1243. package/vscode/src/vs/workbench/browser/actions/layoutActions.js +132 -132
  1244. package/vscode/src/vs/workbench/browser/actions/layoutDensityActions.d.ts +2 -0
  1245. package/vscode/src/vs/workbench/browser/actions/layoutDensityActions.js +46 -0
  1246. package/vscode/src/vs/workbench/browser/actions/menuMotion.d.ts +4 -1
  1247. package/vscode/src/vs/workbench/browser/actions/navigationActions.d.ts +10 -0
  1248. package/vscode/src/vs/workbench/browser/actions/navigationActions.js +334 -0
  1249. package/vscode/src/vs/workbench/browser/actions/policyDiagnosticsMarkdown.d.ts +6 -0
  1250. package/vscode/src/vs/workbench/browser/actions/policyDiagnosticsMarkdown.js +53 -1
  1251. package/vscode/src/vs/workbench/browser/actions/textInputActions.js +6 -6
  1252. package/vscode/src/vs/workbench/browser/actions/windowActions.js +29 -29
  1253. package/vscode/src/vs/workbench/browser/actions/workspaceActions.js +21 -21
  1254. package/vscode/src/vs/workbench/browser/actions/workspaceCommands.js +6 -5
  1255. package/vscode/src/vs/workbench/browser/animatedCounterWidget.js +3 -3
  1256. package/vscode/src/vs/workbench/browser/changesStatsWidget.d.ts +15 -0
  1257. package/vscode/src/vs/workbench/browser/changesStatsWidget.js +44 -0
  1258. package/vscode/src/vs/workbench/browser/chatChangesPill.d.ts +3 -7
  1259. package/vscode/src/vs/workbench/browser/chatChangesPill.js +12 -31
  1260. package/vscode/src/vs/workbench/browser/chatDropdownPill.d.ts +22 -1
  1261. package/vscode/src/vs/workbench/browser/chatDropdownPill.js +209 -29
  1262. package/vscode/src/vs/workbench/browser/chatImagePreview.d.ts +7 -0
  1263. package/vscode/src/vs/workbench/browser/chatImagePreview.js +130 -0
  1264. package/vscode/src/vs/workbench/browser/chatPillHover.d.ts +37 -0
  1265. package/vscode/src/vs/workbench/browser/chatPillHover.js +202 -0
  1266. package/vscode/src/vs/workbench/browser/chatPills.d.ts +74 -6
  1267. package/vscode/src/vs/workbench/browser/chatPills.js +198 -28
  1268. package/vscode/src/vs/workbench/browser/chatResourcePill.d.ts +7 -1
  1269. package/vscode/src/vs/workbench/browser/chatResourcePill.js +16 -5
  1270. package/vscode/src/vs/workbench/browser/dnd.js +2 -2
  1271. package/vscode/src/vs/workbench/browser/editor.js +2 -2
  1272. package/vscode/src/vs/workbench/browser/labels.js +9 -5
  1273. package/vscode/src/vs/workbench/browser/media/animatedCounterWidget.css +1 -1
  1274. package/vscode/src/vs/workbench/browser/media/changesStatsWidget.css +12 -0
  1275. package/vscode/src/vs/workbench/browser/media/chatImagePreview.css +50 -0
  1276. package/vscode/src/vs/workbench/browser/media/chatPills.css +75 -14
  1277. package/vscode/src/vs/workbench/browser/media/floatingPanels.css +88 -69
  1278. package/vscode/src/vs/workbench/browser/media/style.css +10 -4
  1279. package/vscode/src/vs/workbench/browser/parts/activitybar/activitybarPart.d.ts +6 -1
  1280. package/vscode/src/vs/workbench/browser/parts/activitybar/activitybarPart.js +39 -29
  1281. package/vscode/src/vs/workbench/browser/parts/auxiliarybar/auxiliaryBarActions.js +25 -25
  1282. package/vscode/src/vs/workbench/browser/parts/auxiliarybar/auxiliaryBarPart.js +4 -4
  1283. package/vscode/src/vs/workbench/browser/parts/compositeBar.js +1 -1
  1284. package/vscode/src/vs/workbench/browser/parts/compositeBarActions.js +9 -9
  1285. package/vscode/src/vs/workbench/browser/parts/compositePart.js +3 -3
  1286. package/vscode/src/vs/workbench/browser/parts/dialogs/dialog.js +1 -1
  1287. package/vscode/src/vs/workbench/browser/parts/editor/auxiliaryEditorPart.js +3 -3
  1288. package/vscode/src/vs/workbench/browser/parts/editor/binaryDiffEditor.js +1 -1
  1289. package/vscode/src/vs/workbench/browser/parts/editor/binaryEditor.js +3 -3
  1290. package/vscode/src/vs/workbench/browser/parts/editor/breadcrumbs.js +38 -38
  1291. package/vscode/src/vs/workbench/browser/parts/editor/breadcrumbsControl.js +17 -15
  1292. package/vscode/src/vs/workbench/browser/parts/editor/breadcrumbsModel.d.ts +3 -1
  1293. package/vscode/src/vs/workbench/browser/parts/editor/breadcrumbsModel.js +6 -3
  1294. package/vscode/src/vs/workbench/browser/parts/editor/breadcrumbsPicker.js +2 -2
  1295. package/vscode/src/vs/workbench/browser/parts/editor/connectedTabClipping.d.ts +11 -0
  1296. package/vscode/src/vs/workbench/browser/parts/editor/connectedTabClipping.js +33 -0
  1297. package/vscode/src/vs/workbench/browser/parts/editor/diffEditorCommands.js +7 -7
  1298. package/vscode/src/vs/workbench/browser/parts/editor/editor.d.ts +2 -0
  1299. package/vscode/src/vs/workbench/browser/parts/editor/editor.js +54 -58
  1300. package/vscode/src/vs/workbench/browser/parts/editor/editorActions.js +136 -136
  1301. package/vscode/src/vs/workbench/browser/parts/editor/editorCommands.js +39 -32
  1302. package/vscode/src/vs/workbench/browser/parts/editor/editorDropTarget.js +1 -1
  1303. package/vscode/src/vs/workbench/browser/parts/editor/editorGroupView.js +11 -11
  1304. package/vscode/src/vs/workbench/browser/parts/editor/editorGroupWatermark.js +12 -12
  1305. package/vscode/src/vs/workbench/browser/parts/editor/editorHeaderControl.js +3 -3
  1306. package/vscode/src/vs/workbench/browser/parts/editor/editorPanes.js +2 -2
  1307. package/vscode/src/vs/workbench/browser/parts/editor/editorPart.d.ts +1 -0
  1308. package/vscode/src/vs/workbench/browser/parts/editor/editorPart.js +13 -6
  1309. package/vscode/src/vs/workbench/browser/parts/editor/editorParts.js +1 -1
  1310. package/vscode/src/vs/workbench/browser/parts/editor/editorPlaceholder.js +10 -10
  1311. package/vscode/src/vs/workbench/browser/parts/editor/editorQuickAccess.js +5 -5
  1312. package/vscode/src/vs/workbench/browser/parts/editor/editorStatus.js +66 -66
  1313. package/vscode/src/vs/workbench/browser/parts/editor/editorTabsControl.d.ts +1 -1
  1314. package/vscode/src/vs/workbench/browser/parts/editor/editorTabsControl.js +12 -6
  1315. package/vscode/src/vs/workbench/browser/parts/editor/editorTypePicker.js +6 -6
  1316. package/vscode/src/vs/workbench/browser/parts/editor/media/multieditortabscontrol.css +22 -1
  1317. package/vscode/src/vs/workbench/browser/parts/editor/modalEditorPart.d.ts +0 -1
  1318. package/vscode/src/vs/workbench/browser/parts/editor/modalEditorPart.js +10 -16
  1319. package/vscode/src/vs/workbench/browser/parts/editor/multiEditorTabsControl.d.ts +12 -1
  1320. package/vscode/src/vs/workbench/browser/parts/editor/multiEditorTabsControl.js +259 -32
  1321. package/vscode/src/vs/workbench/browser/parts/editor/sideBySideEditor.js +1 -1
  1322. package/vscode/src/vs/workbench/browser/parts/editor/textCodeEditor.js +1 -1
  1323. package/vscode/src/vs/workbench/browser/parts/editor/textDiffEditor.js +3 -3
  1324. package/vscode/src/vs/workbench/browser/parts/editor/textEditor.js +1 -1
  1325. package/vscode/src/vs/workbench/browser/parts/globalCompositeBar.d.ts +3 -0
  1326. package/vscode/src/vs/workbench/browser/parts/globalCompositeBar.js +49 -35
  1327. package/vscode/src/vs/workbench/browser/parts/notifications/notificationAccessibleView.js +114 -48
  1328. package/vscode/src/vs/workbench/browser/parts/notifications/notificationsActions.js +24 -22
  1329. package/vscode/src/vs/workbench/browser/parts/notifications/notificationsAlerts.js +3 -3
  1330. package/vscode/src/vs/workbench/browser/parts/notifications/notificationsCenter.d.ts +3 -1
  1331. package/vscode/src/vs/workbench/browser/parts/notifications/notificationsCenter.js +19 -9
  1332. package/vscode/src/vs/workbench/browser/parts/notifications/notificationsCommands.d.ts +5 -2
  1333. package/vscode/src/vs/workbench/browser/parts/notifications/notificationsCommands.js +155 -93
  1334. package/vscode/src/vs/workbench/browser/parts/notifications/notificationsList.d.ts +11 -1
  1335. package/vscode/src/vs/workbench/browser/parts/notifications/notificationsList.js +86 -12
  1336. package/vscode/src/vs/workbench/browser/parts/notifications/notificationsStatus.js +13 -13
  1337. package/vscode/src/vs/workbench/browser/parts/notifications/notificationsToasts.js +19 -4
  1338. package/vscode/src/vs/workbench/browser/parts/notifications/notificationsViewer.d.ts +5 -1
  1339. package/vscode/src/vs/workbench/browser/parts/notifications/notificationsViewer.js +40 -15
  1340. package/vscode/src/vs/workbench/browser/parts/paneCompositeBar.d.ts +1 -0
  1341. package/vscode/src/vs/workbench/browser/parts/paneCompositeBar.js +8 -5
  1342. package/vscode/src/vs/workbench/browser/parts/paneCompositePart.d.ts +1 -0
  1343. package/vscode/src/vs/workbench/browser/parts/paneCompositePart.js +13 -7
  1344. package/vscode/src/vs/workbench/browser/parts/panel/panelActions.js +27 -27
  1345. package/vscode/src/vs/workbench/browser/parts/panel/panelPart.js +13 -14
  1346. package/vscode/src/vs/workbench/browser/parts/sidebar/sidebarActions.js +2 -2
  1347. package/vscode/src/vs/workbench/browser/parts/sidebar/sidebarPart.js +2 -2
  1348. package/vscode/src/vs/workbench/browser/parts/titlebar/media/titlebarpart.css +13 -9
  1349. package/vscode/src/vs/workbench/browser/parts/titlebar/menubar.contribution.js +8 -8
  1350. package/vscode/src/vs/workbench/browser/parts/titlebar/menubarControl.js +11 -11
  1351. package/vscode/src/vs/workbench/browser/parts/titlebar/titlebarActions.js +15 -15
  1352. package/vscode/src/vs/workbench/browser/parts/titlebar/windowTitle.js +2 -2
  1353. package/vscode/src/vs/workbench/browser/parts/views/checkbox.js +1 -1
  1354. package/vscode/src/vs/workbench/browser/parts/views/treeView.js +10 -10
  1355. package/vscode/src/vs/workbench/browser/parts/views/viewFilter.js +4 -4
  1356. package/vscode/src/vs/workbench/browser/parts/views/viewPane.js +5 -5
  1357. package/vscode/src/vs/workbench/browser/parts/views/viewPaneContainer.js +6 -6
  1358. package/vscode/src/vs/workbench/browser/quickaccess.js +1 -1
  1359. package/vscode/src/vs/workbench/browser/window.d.ts +1 -0
  1360. package/vscode/src/vs/workbench/browser/window.js +26 -15
  1361. package/vscode/src/vs/workbench/browser/workbench.contribution.js +306 -237
  1362. package/vscode/src/vs/workbench/browser/workbench.zenMode.contribution.js +15 -15
  1363. package/vscode/src/vs/workbench/common/activity.d.ts +1 -0
  1364. package/vscode/src/vs/workbench/common/activity.js +2 -1
  1365. package/vscode/src/vs/workbench/common/agentsColors.d.ts +30 -0
  1366. package/vscode/src/vs/{sessions/common/theme.js → workbench/common/agentsColors.js} +40 -36
  1367. package/vscode/src/vs/workbench/common/agentsSizes.d.ts +23 -0
  1368. package/vscode/src/vs/workbench/common/agentsSizes.js +22 -0
  1369. package/vscode/src/vs/workbench/common/chatIssue.d.ts +6 -0
  1370. package/vscode/src/vs/workbench/common/chatIssue.js +33 -0
  1371. package/vscode/src/vs/workbench/common/configuration.js +9 -9
  1372. package/vscode/src/vs/workbench/common/contextkeys.d.ts +1 -0
  1373. package/vscode/src/vs/workbench/common/contextkeys.js +89 -88
  1374. package/vscode/src/vs/workbench/common/editor/diffEditorInput.js +1 -1
  1375. package/vscode/src/vs/workbench/common/editor/sideBySideEditorInput.js +1 -1
  1376. package/vscode/src/vs/workbench/common/editor/textEditorModel.js +1 -1
  1377. package/vscode/src/vs/workbench/common/editor.js +4 -4
  1378. package/vscode/src/vs/workbench/common/notificationTelemetry.d.ts +103 -0
  1379. package/vscode/src/vs/workbench/common/notificationTelemetry.js +100 -0
  1380. package/vscode/src/vs/workbench/common/notifications.d.ts +7 -0
  1381. package/vscode/src/vs/workbench/common/notifications.js +81 -17
  1382. package/vscode/src/vs/workbench/common/theme.d.ts +2 -0
  1383. package/vscode/src/vs/workbench/common/theme.js +212 -203
  1384. package/vscode/src/vs/workbench/common/views.js +4 -4
  1385. package/vscode/src/vs/workbench/contrib/accessibility/browser/accessibilityConfiguration.d.ts +8 -0
  1386. package/vscode/src/vs/workbench/contrib/accessibility/browser/accessibilityConfiguration.js +241 -170
  1387. package/vscode/src/vs/workbench/contrib/accessibility/browser/accessibleViewActions.js +12 -12
  1388. package/vscode/src/vs/workbench/contrib/agentsVoice/common/agentsVoice.d.ts +2 -0
  1389. package/vscode/src/vs/workbench/contrib/agentsVoice/common/agentsVoice.js +3 -1
  1390. package/vscode/src/vs/workbench/contrib/agentsVoice/common/agentsVoiceColors.js +2 -2
  1391. package/vscode/src/vs/workbench/contrib/browserView/common/browserEditorInput.js +1 -1
  1392. package/vscode/src/vs/workbench/contrib/browserView/common/browserView.d.ts +35 -22
  1393. package/vscode/src/vs/workbench/contrib/browserView/common/browserView.js +83 -81
  1394. package/vscode/src/vs/workbench/contrib/browserView/common/browserView.service.d.ts +4 -1
  1395. package/vscode/src/vs/workbench/contrib/bulkEdit/browser/preview/bulkEdit.contribution.js +18 -18
  1396. package/vscode/src/vs/workbench/contrib/bulkEdit/browser/preview/bulkEditPane.js +6 -6
  1397. package/vscode/src/vs/workbench/contrib/bulkEdit/browser/preview/bulkEditPreview.js +1 -1
  1398. package/vscode/src/vs/workbench/contrib/bulkEdit/browser/preview/bulkEditTree.js +16 -16
  1399. package/vscode/src/vs/workbench/contrib/canvases/common/agentHostCanvas.d.ts +23 -0
  1400. package/vscode/src/vs/workbench/contrib/canvases/common/agentHostCanvas.js +114 -0
  1401. package/vscode/src/vs/workbench/contrib/canvases/common/canvas.d.ts +95 -0
  1402. package/vscode/src/vs/workbench/contrib/canvases/common/canvas.js +110 -0
  1403. package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatAccessibilityProvider.js +34 -26
  1404. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatActions.js +86 -77
  1405. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatContext.js +15 -14
  1406. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatContinueInAction.d.ts +5 -0
  1407. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatContinueInAction.js +177 -17
  1408. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatElicitationActions.js +1 -1
  1409. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatExecuteActions.js +63 -50
  1410. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatForkActions.d.ts +5 -2
  1411. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatForkActions.js +34 -13
  1412. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatModelFeedbackSurveyActions.js +1 -1
  1413. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatPluginActions.d.ts +16 -0
  1414. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatPluginActions.js +372 -0
  1415. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatSpeechToTextActions.js +17 -15
  1416. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatTitleActions.js +10 -10
  1417. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolActions.js +25 -13
  1418. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolPicker.js +18 -18
  1419. package/vscode/src/vs/workbench/contrib/chat/browser/actions/configureVoiceInstructionsAction.js +10 -9
  1420. package/vscode/src/vs/workbench/contrib/chat/browser/actions/exportAgentHostDebugLogsAction.d.ts +27 -12
  1421. package/vscode/src/vs/workbench/contrib/chat/browser/actions/exportAgentHostDebugLogsAction.js +473 -222
  1422. package/vscode/src/vs/workbench/contrib/chat/browser/actions/exportAgentHostDebugLogsAction.service.d.ts +2 -2
  1423. package/vscode/src/vs/workbench/contrib/chat/browser/agentHostCompletionAction.d.ts +5 -9
  1424. package/vscode/src/vs/workbench/contrib/chat/browser/agentHostCompletionAction.js +41 -5
  1425. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginActions.d.ts +9 -6
  1426. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginActions.js +57 -25
  1427. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginEditor/agentPluginItems.d.ts +2 -0
  1428. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginEditor/agentPluginItems.js +6 -1
  1429. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostAuth.d.ts +166 -0
  1430. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostAuth.js +1014 -0
  1431. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostAuthTelemetry.d.ts +19 -0
  1432. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostAuthTelemetry.js +22 -0
  1433. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostAutoTierScope.d.ts +24 -0
  1434. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostAutoTierScope.js +99 -0
  1435. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostBackgroundShells.d.ts +23 -0
  1436. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostBackgroundShells.js +137 -0
  1437. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostBranchPicker.d.ts +19 -0
  1438. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostBranchPicker.js +17 -0
  1439. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostByokLmHandler.js +12 -3
  1440. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostChatInputPicker.contribution.js +5 -5
  1441. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostChatInputPicker.d.ts +19 -17
  1442. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostChatInputPicker.js +434 -229
  1443. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostCustomizationService.d.ts +171 -0
  1444. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostCustomizationService.js +627 -0
  1445. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostCustomizationService.service.d.ts +6 -6
  1446. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostDownloadProgress.js +9 -3
  1447. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostFolderPickerActionItem.js +1 -1
  1448. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostFolderPickerTip.js +2 -2
  1449. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostGenericConfigChips.d.ts +8 -9
  1450. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostGenericConfigChips.js +90 -33
  1451. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostLegacyMigration.d.ts +1 -1
  1452. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostLegacyMigration.js +69 -22
  1453. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostModePickerPresentation.d.ts +4 -0
  1454. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostModePickerPresentation.js +42 -39
  1455. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostSdkSetupNotification.d.ts +13 -12
  1456. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostSdkSetupNotification.js +74 -25
  1457. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostSessionConfigSubscription.d.ts +23 -0
  1458. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostSessionConfigSubscription.js +98 -0
  1459. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostSessionUri.d.ts +6 -1
  1460. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostSessionUri.js +17 -17
  1461. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostSnapshotController.js +2 -2
  1462. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostUntitledProvisionalSessionService.service.d.ts +8 -7
  1463. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/chatTerminalOutputTextModelContentProvider.d.ts +37 -0
  1464. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/chatTerminalOutputTextModelContentProvider.js +305 -0
  1465. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/chatTerminalOutputTextModelContentProvider.service.d.ts +7 -0
  1466. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/chatTerminalOutputTextModelContentProvider.service.js +6 -0
  1467. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/importLocalConversationToAgentSession.js +8 -3
  1468. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/media/agentHostModePicker.css +27 -47
  1469. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/stateToProgressAdapter.d.ts +36 -32
  1470. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/stateToProgressAdapter.js +569 -145
  1471. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionApprovalModel.js +58 -41
  1472. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessions.d.ts +2 -0
  1473. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessions.js +22 -17
  1474. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsBanner.d.ts +8 -12
  1475. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsBanner.js +71 -12
  1476. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsFilter.js +16 -14
  1477. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsModel.d.ts +15 -4
  1478. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsModel.js +113 -66
  1479. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsOpener.js +13 -6
  1480. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/externalSessionsFilterMenu.d.ts +1 -1
  1481. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/externalSessionsFilterMenu.js +26 -8
  1482. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/media/agentsessionsviewer.css +149 -8
  1483. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/media/sessionSummaryHover.css +5 -0
  1484. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/sessionSummaryHover.d.ts +22 -2
  1485. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/sessionSummaryHover.js +83 -39
  1486. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/sessionTypeAvailability.d.ts +11 -9
  1487. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/sessionTypeAvailability.js +29 -17
  1488. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationColors.d.ts +1 -0
  1489. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationColors.js +20 -0
  1490. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationDiscoveryPage.d.ts +157 -0
  1491. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationDiscoveryPage.js +2100 -0
  1492. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationIcons.js +15 -15
  1493. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationItemSource.d.ts +11 -2
  1494. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationItemSource.js +2 -2
  1495. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationItemsModel.d.ts +6 -3
  1496. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationItemsModel.js +45 -12
  1497. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationItemsModel.service.d.ts +2 -2
  1498. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationListWidget.d.ts +26 -41
  1499. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationListWidget.js +450 -804
  1500. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationListWidgetUtils.d.ts +18 -0
  1501. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationListWidgetUtils.js +58 -4
  1502. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagement.d.ts +9 -0
  1503. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagement.js +9 -5
  1504. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementEditor.d.ts +148 -64
  1505. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementEditor.js +2180 -1451
  1506. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementEditorInput.js +5 -4
  1507. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementSectionRegistry.d.ts +4 -0
  1508. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationPresentation.d.ts +5 -0
  1509. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationPresentation.js +38 -7
  1510. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationQuery.d.ts +15 -0
  1511. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationQuery.js +104 -0
  1512. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationWelcomePage.d.ts +62 -4
  1513. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationWelcomePage.js +126 -19
  1514. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationWelcomePagePromptLaunchers.js +45 -37
  1515. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationWorkspaceGroups.d.ts +10 -0
  1516. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationWorkspaceGroups.js +25 -0
  1517. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/chatCustomizationMigrationNotice.d.ts +40 -0
  1518. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/chatCustomizationMigrationNotice.js +199 -0
  1519. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/connectorPresentation.d.ts +14 -0
  1520. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/connectorPresentation.js +102 -0
  1521. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/copilotConnectorsService.service.d.ts +26 -0
  1522. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/copilotConnectorsService.service.js +6 -0
  1523. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationCardList.d.ts +2 -0
  1524. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationCardList.js +19 -198
  1525. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationCreatorService.d.ts +9 -14
  1526. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationCreatorService.js +32 -23
  1527. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationGroupHeaderRenderer.d.ts +5 -1
  1528. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationGroupHeaderRenderer.js +18 -5
  1529. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationMarketplaceConfiguration.d.ts +25 -0
  1530. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationMarketplaceConfiguration.js +47 -0
  1531. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationMarketplaceSourceWarnings.d.ts +33 -0
  1532. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationMarketplaceSourceWarnings.js +228 -0
  1533. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationMarketplaceWelcome.d.ts +16 -0
  1534. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationMarketplaceWelcome.js +41 -0
  1535. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationMigration.d.ts +35 -2
  1536. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationMigration.js +160 -52
  1537. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationMigrationCategories.d.ts +14 -35
  1538. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationMigrationCategories.js +182 -415
  1539. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationMigrationDashboard.d.ts +62 -30
  1540. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationMigrationDashboard.js +542 -186
  1541. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationToggle.d.ts +26 -0
  1542. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationToggle.js +61 -0
  1543. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationTree.d.ts +17 -0
  1544. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationTree.js +25 -0
  1545. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationsTelemetryService.service.d.ts +6 -0
  1546. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationsTelemetryService.service.js +6 -0
  1547. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/embeddedAgentPluginDetail.d.ts +31 -3
  1548. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/embeddedAgentPluginDetail.js +216 -75
  1549. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/embeddedConnectorDetail.d.ts +44 -0
  1550. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/embeddedConnectorDetail.js +287 -0
  1551. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/embeddedMarketplaceDetail.d.ts +70 -0
  1552. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/embeddedMarketplaceDetail.js +639 -0
  1553. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/embeddedMcpServerDetail.d.ts +95 -1
  1554. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/embeddedMcpServerDetail.js +566 -30
  1555. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/mcpListWidget.d.ts +205 -66
  1556. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/mcpListWidget.js +2059 -899
  1557. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/mcpServerCount.d.ts +17 -0
  1558. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/mcpServerCount.js +97 -0
  1559. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/media/aiCustomizationDiscovery.css +532 -0
  1560. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/media/aiCustomizationManagement.css +1275 -676
  1561. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/media/aiCustomizationWelcomePromptLaunchers.css +3 -3
  1562. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/media/chatCustomizationMigrationNotice.css +46 -0
  1563. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/media/customizationMarketplaceSourceWarnings.css +57 -0
  1564. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/media/customizationMarketplaceWelcome.css +52 -0
  1565. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/media/customizationMigrationDashboard.css +136 -224
  1566. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/pluginCustomizationMarketplaceProvider.d.ts +22 -0
  1567. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/pluginCustomizationMarketplaceProvider.js +204 -0
  1568. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/pluginListWidget.d.ts +33 -26
  1569. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/pluginListWidget.js +605 -676
  1570. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/promptsServiceCustomizationItemProvider.d.ts +4 -1
  1571. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/promptsServiceCustomizationItemProvider.js +13 -7
  1572. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/toolsListWidget.d.ts +60 -68
  1573. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/toolsListWidget.js +781 -624
  1574. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentWidgets.d.ts +13 -4
  1575. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentWidgets.js +219 -148
  1576. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatDynamicVariables.d.ts +1 -0
  1577. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatDynamicVariables.js +20 -2
  1578. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatImageGlyphSurface.d.ts +43 -0
  1579. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatImageGlyphSurface.js +497 -0
  1580. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatImageReveal.css +97 -0
  1581. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatImageReveal.d.ts +23 -0
  1582. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatImageReveal.js +122 -0
  1583. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatImageTextures.d.ts +127 -0
  1584. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatImageTextures.js +328 -0
  1585. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatImplicitContext.d.ts +2 -0
  1586. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatImplicitContext.js +46 -10
  1587. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatScreenshotContext.js +1 -1
  1588. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/implicitContextAttachment.js +13 -13
  1589. package/vscode/src/vs/workbench/contrib/chat/browser/chat.d.ts +29 -0
  1590. package/vscode/src/vs/workbench/contrib/chat/browser/chat.js +8 -2
  1591. package/vscode/src/vs/workbench/contrib/chat/browser/chat.service.d.ts +3 -1
  1592. package/vscode/src/vs/workbench/contrib/chat/browser/chatArtifactPillSource.d.ts +35 -0
  1593. package/vscode/src/vs/workbench/contrib/chat/browser/chatArtifactPillSource.js +239 -0
  1594. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/agentHostLogSources.d.ts +4 -6
  1595. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/agentHostLogSources.js +35 -33
  1596. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/agentHostUsageSidecar.d.ts +8 -2
  1597. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/agentHostUsageSidecar.js +89 -8
  1598. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingActions.js +37 -36
  1599. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorContextKeys.js +7 -7
  1600. package/vscode/src/vs/workbench/contrib/chat/browser/chatIcons.d.ts +1 -0
  1601. package/vscode/src/vs/workbench/contrib/chat/browser/chatIcons.js +9 -1
  1602. package/vscode/src/vs/workbench/contrib/chat/browser/chatImageCarouselService.service.d.ts +3 -4
  1603. package/vscode/src/vs/workbench/contrib/chat/browser/chatImageUtils.d.ts +0 -11
  1604. package/vscode/src/vs/workbench/contrib/chat/browser/chatImageUtils.js +1 -54
  1605. package/vscode/src/vs/workbench/contrib/chat/browser/chatInputPills.d.ts +3 -0
  1606. package/vscode/src/vs/workbench/contrib/chat/browser/chatInputPills.js +89 -29
  1607. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsViewModel.d.ts +15 -0
  1608. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsViewModel.js +41 -3
  1609. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsWidget.d.ts +5 -0
  1610. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsWidget.js +66 -63
  1611. package/vscode/src/vs/workbench/contrib/chat/browser/chatOutline.js +2 -2
  1612. package/vscode/src/vs/workbench/contrib/chat/browser/chatPetAchievementPreview.d.ts +2 -2
  1613. package/vscode/src/vs/workbench/contrib/chat/browser/chatPetAchievementPreview.js +14 -10
  1614. package/vscode/src/vs/workbench/contrib/chat/browser/chatPetAchievements.d.ts +5 -0
  1615. package/vscode/src/vs/workbench/contrib/chat/browser/chatPetAchievements.js +86 -72
  1616. package/vscode/src/vs/workbench/contrib/chat/browser/chatPetColors.d.ts +16 -0
  1617. package/vscode/src/vs/workbench/contrib/chat/browser/chatPetColors.js +154 -0
  1618. package/vscode/src/vs/workbench/contrib/chat/browser/chatPetService.d.ts +7 -4
  1619. package/vscode/src/vs/workbench/contrib/chat/browser/chatPetService.js +53 -19
  1620. package/vscode/src/vs/workbench/contrib/chat/browser/chatPetService.service.d.ts +3 -3
  1621. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/chatSessionPickerActionItem.js +2 -1
  1622. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/chatSessions.contribution.d.ts +5 -4
  1623. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/chatSessions.contribution.js +96 -69
  1624. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetup.d.ts +19 -0
  1625. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetup.js +18 -2
  1626. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupMicrosoftProbe.service.d.ts +27 -0
  1627. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupMicrosoftProbe.service.js +6 -0
  1628. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusDashboard.d.ts +1 -0
  1629. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusDashboard.js +73 -65
  1630. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/codexStatusDashboard.d.ts +21 -0
  1631. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/codexStatusDashboard.js +170 -0
  1632. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/media/chatStatus.css +56 -0
  1633. package/vscode/src/vs/workbench/contrib/chat/browser/chatTerminalCommandPaste.js +3 -3
  1634. package/vscode/src/vs/workbench/contrib/chat/browser/chatUserInteractionOTel.service.d.ts +14 -0
  1635. package/vscode/src/vs/workbench/contrib/chat/browser/chatUserInteractionOTel.service.js +6 -0
  1636. package/vscode/src/vs/workbench/contrib/chat/browser/chatUserInteractionTelemetry.d.ts +66 -0
  1637. package/vscode/src/vs/workbench/contrib/chat/browser/chatUserInteractionTelemetry.js +262 -0
  1638. package/vscode/src/vs/workbench/contrib/chat/browser/copilotCliEventsUri.js +1 -1
  1639. package/vscode/src/vs/workbench/contrib/chat/browser/editorChatResponseFileChangesService.js +1 -1
  1640. package/vscode/src/vs/workbench/contrib/chat/browser/enablementActions.js +4 -4
  1641. package/vscode/src/vs/workbench/contrib/chat/browser/feedbackSurvey/chatHarnessSwitchFeedbackSurveyService.service.d.ts +8 -0
  1642. package/vscode/src/vs/workbench/contrib/chat/browser/feedbackSurvey/chatHarnessSwitchFeedbackSurveyService.service.js +6 -0
  1643. package/vscode/src/vs/workbench/contrib/chat/browser/feedbackSurvey/chatModelFeedbackSurveyService.d.ts +1 -1
  1644. package/vscode/src/vs/workbench/contrib/chat/browser/feedbackSurvey/chatModelFeedbackSurveyService.js +5 -3
  1645. package/vscode/src/vs/workbench/contrib/chat/browser/feedbackSurvey/chatModelFeedbackSurveyWidget.js +6 -6
  1646. package/vscode/src/vs/workbench/contrib/chat/browser/media/sessionBackgroundShells.css +31 -0
  1647. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/attachInstructionsAction.js +6 -6
  1648. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/hookActions.d.ts +4 -0
  1649. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/hookActions.js +43 -34
  1650. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/hookUtils.js +3 -3
  1651. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/newPromptFileActions.js +15 -15
  1652. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/pickers/askForPromptName.js +9 -9
  1653. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/pickers/askForPromptSourceFolder.js +25 -25
  1654. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/pickers/promptFilePickers.js +32 -32
  1655. package/vscode/src/vs/workbench/contrib/chat/browser/remoteAgentHost/cloudSandboxModels.service.d.ts +9 -0
  1656. package/vscode/src/vs/workbench/contrib/chat/browser/remoteAgentHost/cloudSandboxModels.service.js +6 -0
  1657. package/vscode/src/vs/{sessions/contrib/providers/remoteAgentHost/browser → workbench/contrib/chat/browser/remoteAgentHost}/cloudSandboxTelemetry.service.d.ts +6 -8
  1658. package/vscode/src/vs/workbench/contrib/chat/browser/remoteAgentHost/remoteAgentHostAuthentication.service.d.ts +8 -0
  1659. package/vscode/src/vs/workbench/contrib/chat/browser/remoteAgentHost/remoteAgentHostAuthentication.service.js +6 -0
  1660. package/vscode/src/vs/{sessions/contrib/providers/remoteAgentHost/browser → workbench/contrib/chat/browser/remoteAgentHost}/remoteAgentHostConnectionCustomization.service.d.ts +1 -1
  1661. package/vscode/src/vs/workbench/contrib/chat/browser/sessionBackgroundShellOutputView.d.ts +39 -0
  1662. package/vscode/src/vs/workbench/contrib/chat/browser/sessionBackgroundShellOutputView.js +250 -0
  1663. package/vscode/src/vs/workbench/contrib/chat/browser/sessionBackgroundShellsControl.d.ts +26 -0
  1664. package/vscode/src/vs/workbench/contrib/chat/browser/sessionBackgroundShellsControl.js +213 -0
  1665. package/vscode/src/vs/workbench/contrib/chat/browser/sessionChatPillOptions.d.ts +11 -0
  1666. package/vscode/src/vs/workbench/contrib/chat/browser/sessionChatPillOptions.js +50 -19
  1667. package/vscode/src/vs/{sessions → workbench}/contrib/chat/browser/sessionCustomizations.d.ts +10 -7
  1668. package/vscode/src/vs/{sessions → workbench}/contrib/chat/browser/sessionCustomizations.js +16 -25
  1669. package/vscode/src/vs/workbench/contrib/chat/browser/sessionPullRequestPill.d.ts +3 -6
  1670. package/vscode/src/vs/workbench/contrib/chat/browser/sessionPullRequestPill.js +10 -19
  1671. package/vscode/src/vs/workbench/contrib/chat/browser/sessionSubagentsPill.d.ts +18 -0
  1672. package/vscode/src/vs/workbench/contrib/chat/browser/sessionSubagentsPill.js +41 -0
  1673. package/vscode/src/vs/workbench/contrib/chat/browser/speechToText/chatSpeechToTextService.js +45 -27
  1674. package/vscode/src/vs/workbench/contrib/chat/browser/speechToText/dictationDownloadRing.js +7 -7
  1675. package/vscode/src/vs/workbench/contrib/chat/browser/speechToText/dictationOnboarding.js +14 -14
  1676. package/vscode/src/vs/workbench/contrib/chat/browser/speechToText/dictationSession.js +14 -13
  1677. package/vscode/src/vs/workbench/contrib/chat/browser/speechToText/micButtonHovers.js +4 -4
  1678. package/vscode/src/vs/workbench/contrib/chat/browser/speechToText/micButtonMenuActions.js +12 -12
  1679. package/vscode/src/vs/workbench/contrib/chat/browser/tools/chatToolRiskAssessmentService.js +3 -3
  1680. package/vscode/src/vs/workbench/contrib/chat/browser/tools/toolSetsContribution.js +17 -17
  1681. package/vscode/src/vs/workbench/contrib/chat/browser/viewsWelcome/chatViewWelcomeController.d.ts +5 -1
  1682. package/vscode/src/vs/workbench/contrib/chat/browser/viewsWelcome/chatViewWelcomeController.js +15 -3
  1683. package/vscode/src/vs/workbench/contrib/chat/browser/voiceClient/micCaptureService.js +2 -2
  1684. package/vscode/src/vs/workbench/contrib/chat/browser/voiceClient/voiceInputDecorations.js +3 -3
  1685. package/vscode/src/vs/workbench/contrib/chat/browser/voiceClient/voiceSessionController.d.ts +7 -1
  1686. package/vscode/src/vs/workbench/contrib/chat/browser/voiceClient/voiceSessionController.js +117 -83
  1687. package/vscode/src/vs/workbench/contrib/chat/browser/voiceClient/voiceTelemetry.d.ts +212 -0
  1688. package/vscode/src/vs/workbench/contrib/chat/browser/voiceClient/voiceTelemetry.js +10 -0
  1689. package/vscode/src/vs/workbench/contrib/chat/browser/voiceClient/voiceToolDispatchService.js +12 -11
  1690. package/vscode/src/vs/workbench/contrib/chat/browser/voiceInputMode/voiceInputModeActionViewItem.d.ts +1 -0
  1691. package/vscode/src/vs/workbench/contrib/chat/browser/voiceInputMode/voiceInputModeActionViewItem.js +24 -16
  1692. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatAgentHover.js +2 -2
  1693. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatArtifactsWidget.js +17 -23
  1694. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatClipboard.d.ts +5 -0
  1695. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatClipboard.js +1 -1
  1696. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatAgentCommandContentPart.js +1 -1
  1697. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatAgentMergeContentPart.js +20 -20
  1698. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatAnonymousRateLimitedPart.js +2 -2
  1699. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatAttachmentsContentPart.d.ts +13 -0
  1700. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatAttachmentsContentPart.js +9 -1
  1701. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatAutoModeResolutionContentPart.js +1 -1
  1702. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatChangesSummaryPart.js +6 -6
  1703. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatCodeCitationContentPart.js +1 -1
  1704. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatCollapsibleContentPart.d.ts +2 -0
  1705. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatCollapsibleContentPart.js +38 -31
  1706. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatCommandContentPart.js +1 -1
  1707. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatContentParts.d.ts +24 -1
  1708. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatDisabledClaudeHooksContentPart.js +3 -3
  1709. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatEditPillElement.js +19 -7
  1710. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatEditStatsButton.d.ts +10 -0
  1711. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatEditStatsButton.js +104 -0
  1712. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatExtensionsContentPart.js +1 -1
  1713. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatExternalEditContentPart.d.ts +3 -0
  1714. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatExternalEditContentPart.js +22 -18
  1715. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatHookContentPart.js +1 -1
  1716. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatImageGenerationBatchPart.d.ts +55 -0
  1717. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatImageGenerationBatchPart.js +434 -0
  1718. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatInlineAnchorWidget.d.ts +4 -0
  1719. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatInlineAnchorWidget.js +83 -53
  1720. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatMarkdownDecorationsRenderer.js +13 -1
  1721. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatMcpAuthenticationContentPart.d.ts +13 -1
  1722. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatMcpAuthenticationContentPart.js +83 -25
  1723. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatMcpServersInteractionContentPart.js +10 -9
  1724. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatMcpServersStartingContentPart.d.ts +6 -5
  1725. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatMcpServersStartingContentPart.js +67 -9
  1726. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatMultiDiffContentPart.js +4 -4
  1727. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatPlanReviewPart.d.ts +3 -1
  1728. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatPlanReviewPart.js +51 -40
  1729. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatProgressContentPart.d.ts +39 -4
  1730. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatProgressContentPart.js +330 -39
  1731. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatQuestionCarouselPart.d.ts +14 -3
  1732. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatQuestionCarouselPart.js +112 -73
  1733. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatQuotaExceededPart.js +2 -2
  1734. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatReferencesContentPart.js +24 -10
  1735. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatRequestOriginPart.js +5 -5
  1736. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatResourceGroupWidget.d.ts +8 -2
  1737. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatResourceGroupWidget.js +65 -18
  1738. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatRichLink.js +2 -2
  1739. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatSubagentOpenChat.d.ts +171 -0
  1740. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatSubagentOpenChat.js +911 -0
  1741. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatSuggestNextWidget.js +6 -6
  1742. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatSystemNotificationContentPart.d.ts +2 -0
  1743. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatSystemNotificationContentPart.js +33 -1
  1744. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatTaskContentPart.js +1 -0
  1745. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatTextEditContentPart.js +1 -1
  1746. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatThinkingContentPart.d.ts +40 -22
  1747. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatThinkingContentPart.js +541 -279
  1748. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatTipContentPart.js +9 -9
  1749. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatTodoListWidget.js +17 -17
  1750. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatToolGroupSummary.d.ts +5 -0
  1751. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatToolGroupSummary.js +212 -0
  1752. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatTreeContentPart.js +1 -1
  1753. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatTurnPillsPart.js +8 -6
  1754. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatWorkspaceEditContentPart.js +10 -11
  1755. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/codeBlockPart.js +14 -14
  1756. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/fusionPhasePillActionViewItem.d.ts +36 -0
  1757. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/fusionPhasePillActionViewItem.js +159 -0
  1758. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatCodeBlockPill.css +23 -56
  1759. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatCollapsibleContentPart.css +7 -2
  1760. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatConfirmationWidget.css +34 -2
  1761. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatEditStatsButton.css +53 -0
  1762. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatImageGenerationBatchPart.css +126 -0
  1763. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatImageGenerationProgressPart.css +8 -0
  1764. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatInlineAnchorWidget.css +20 -5
  1765. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatMcpServersInteractionContent.css +1 -1
  1766. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatQuestionCarousel.css +58 -3
  1767. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatSubagentContent.css +0 -18
  1768. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatSubagentOpenChat.css +392 -0
  1769. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatSystemNotificationContentPart.css +26 -0
  1770. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatTerminalToolProgressPart.css +15 -4
  1771. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatThinkingContent.css +346 -74
  1772. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatAutomationConfiguredResultSubPart.js +2 -2
  1773. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatGeneratedImageResultSubPart.d.ts +11 -2
  1774. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatGeneratedImageResultSubPart.js +74 -59
  1775. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatMcpAppModel.js +1 -1
  1776. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatMcpAppSubPart.js +3 -3
  1777. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatOtherClientToolProgressPart.js +2 -2
  1778. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolConfirmationCarouselPart.d.ts +6 -2
  1779. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolConfirmationCarouselPart.js +28 -11
  1780. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolInvocationSubPart.d.ts +4 -0
  1781. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolInvocationSubPart.js +8 -1
  1782. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolOutputPart.js +2 -2
  1783. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolPartUtilities.d.ts +26 -2
  1784. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolPartUtilities.js +111 -7
  1785. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolProgressPart.d.ts +1 -0
  1786. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolProgressPart.js +16 -2
  1787. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolStreamingSubPart.d.ts +1 -0
  1788. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolStreamingSubPart.js +8 -2
  1789. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/toolRiskBadgeWidget.js +4 -4
  1790. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatDragAndDrop.js +12 -12
  1791. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatForkActionViewItem.d.ts +1 -0
  1792. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatForkActionViewItem.js +20 -3
  1793. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatOptions.d.ts +4 -0
  1794. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatOptions.js +2 -1
  1795. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatPetAccessoryRenderer.d.ts +2 -1
  1796. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatPetAccessoryRenderer.js +7 -4
  1797. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatPetAccessoryRig.d.ts +1 -1
  1798. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatPetAccessoryRig.js +6 -0
  1799. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatPetWidget.d.ts +35 -3
  1800. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatPetWidget.js +402 -83
  1801. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatReadOnlyBanner.d.ts +17 -1
  1802. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatReadOnlyBanner.js +61 -8
  1803. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatRestoreCheckpointActionViewItem.js +1 -1
  1804. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatTurnPills.js +4 -4
  1805. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatWorkingLogo.d.ts +41 -0
  1806. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatWorkingLogo.js +301 -0
  1807. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatWorkingLogoDraw.d.ts +9 -0
  1808. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatWorkingLogoDraw.js +450 -0
  1809. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatFollowups.js +1 -1
  1810. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatGoalBannerWidget.js +4 -4
  1811. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatInputModelSelectionController.d.ts +7 -15
  1812. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatInputModelSelectionController.js +19 -5
  1813. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatInputNoticeWidget.js +2 -2
  1814. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatInputNotificationService.d.ts +25 -2
  1815. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatInputNotificationService.js +36 -5
  1816. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatInputNotificationService.service.d.ts +2 -5
  1817. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatInputNotificationWidget.d.ts +5 -1
  1818. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatInputNotificationWidget.js +49 -16
  1819. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatInputPart.d.ts +46 -3
  1820. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatInputPart.js +496 -248
  1821. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatInputPickerActionItem.d.ts +8 -0
  1822. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatInputPickerActionItem.js +50 -2
  1823. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatInputPickerResponsiveLayout.d.ts +4 -1
  1824. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatInputPickerResponsiveLayout.js +61 -29
  1825. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatModelConfigurationStore.d.ts +25 -5
  1826. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatModelConfigurationStore.js +184 -36
  1827. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatPhoneInputPresenter.js +2 -2
  1828. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatSessionArchiveNudge.d.ts +10 -1
  1829. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatSessionArchiveNudge.js +60 -26
  1830. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/delegationSessionPickerActionItem.d.ts +6 -2
  1831. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/delegationSessionPickerActionItem.js +24 -10
  1832. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/agentHostInputCompletionsBase.d.ts +1 -0
  1833. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/agentHostInputCompletionsBase.js +12 -0
  1834. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputCompletionUtils.d.ts +1 -0
  1835. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputCompletionUtils.js +11 -4
  1836. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatPasteProviders.d.ts +2 -0
  1837. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatPasteProviders.js +16 -16
  1838. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/media/chatInputNotificationWidget.css +34 -2
  1839. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/media/chatInputPicker.css +57 -0
  1840. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/media/chatSessionArchiveNudge.css +43 -0
  1841. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modePickerActionItem.js +5 -5
  1842. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPicker/media/modelPicker.css +161 -136
  1843. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPicker/modelPickerActionItem.d.ts +23 -4
  1844. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPicker/modelPickerActionItem.js +27 -8
  1845. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPicker/modelPickerBadges.d.ts +4 -6
  1846. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPicker/modelPickerBadges.js +11 -12
  1847. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPicker/modelPickerCard.d.ts +56 -7
  1848. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPicker/modelPickerCard.js +277 -67
  1849. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPicker/modelPickerConfiguration.d.ts +6 -21
  1850. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPicker/modelPickerConfiguration.js +15 -170
  1851. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPicker/modelPickerDetails.d.ts +5 -3
  1852. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPicker/modelPickerDetails.js +21 -15
  1853. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPicker/modelPickerHover.d.ts +4 -1
  1854. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPicker/modelPickerHover.js +43 -25
  1855. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPicker/modelPickerItemPrimitives.d.ts +6 -7
  1856. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPicker/modelPickerItemPrimitives.js +18 -65
  1857. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPicker/modelPickerItems.d.ts +3 -8
  1858. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPicker/modelPickerItems.js +17 -24
  1859. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPicker/modelPickerModelConfig.d.ts +35 -11
  1860. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPicker/modelPickerModelConfig.js +97 -9
  1861. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPicker/modelPickerPresentation.d.ts +17 -1
  1862. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPicker/modelPickerPresentation.js +70 -10
  1863. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPicker/modelPickerTabbedWidget.d.ts +88 -16
  1864. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPicker/modelPickerTabbedWidget.js +732 -178
  1865. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPicker/modelPickerTabs.d.ts +11 -14
  1866. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPicker/modelPickerTabs.js +18 -19
  1867. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPicker/modelPickerTelemetry.d.ts +55 -3
  1868. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPicker/modelPickerTelemetry.js +89 -18
  1869. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPicker/modelPickerWelcome.d.ts +2 -1
  1870. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPicker/modelPickerWelcome.js +1 -1
  1871. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPicker/modelPickerWidget.d.ts +40 -18
  1872. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPicker/modelPickerWidget.js +404 -255
  1873. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPicker/modelPickerWorkflow.d.ts +34 -0
  1874. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPicker/modelProviderIcons.js +11 -10
  1875. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/permissionPickerActionItem.d.ts +5 -6
  1876. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/permissionPickerActionItem.js +63 -41
  1877. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/sessionTargetPickerActionItem.d.ts +15 -4
  1878. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/sessionTargetPickerActionItem.js +112 -17
  1879. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/workspacePickerActionItem.js +3 -3
  1880. package/vscode/src/vs/workbench/contrib/chat/browser/widget/media/chat.css +220 -72
  1881. package/vscode/src/vs/workbench/contrib/chat/browser/widget/media/chatPet.css +19 -2
  1882. package/vscode/src/vs/workbench/contrib/chat/browser/widget/media/chatViewWelcome.css +40 -0
  1883. package/vscode/src/vs/workbench/contrib/chat/browser/widget/media/chatWorkingLogo.css +74 -0
  1884. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/editor/chatEditorInput.d.ts +10 -1
  1885. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/editor/chatEditorInput.js +65 -21
  1886. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatContextUsageDetails.js +9 -9
  1887. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatContextUsageWidget.d.ts +3 -15
  1888. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatContextUsageWidget.js +10 -14
  1889. package/vscode/src/vs/workbench/contrib/chat/common/actions/chatActions.d.ts +2 -0
  1890. package/vscode/src/vs/workbench/contrib/chat/common/actions/chatActions.js +1 -0
  1891. package/vscode/src/vs/workbench/contrib/chat/common/actions/chatContextKeys.d.ts +8 -0
  1892. package/vscode/src/vs/workbench/contrib/chat/common/actions/chatContextKeys.js +152 -108
  1893. package/vscode/src/vs/workbench/contrib/chat/common/agentHostConfigPolicy.d.ts +14 -3
  1894. package/vscode/src/vs/workbench/contrib/chat/common/agentHostConfigPolicy.js +54 -10
  1895. package/vscode/src/vs/{sessions/contrib/providers/agentHost/browser → workbench/contrib/chat/common}/agentHostSessionCustomizations.d.ts +6 -8
  1896. package/vscode/src/vs/{sessions/contrib/providers/agentHost/browser → workbench/contrib/chat/common}/agentHostSessionCustomizations.js +16 -11
  1897. package/vscode/src/vs/workbench/contrib/chat/common/agentsWindowUsage.d.ts +13 -0
  1898. package/vscode/src/vs/workbench/contrib/chat/common/agentsWindowUsage.js +32 -0
  1899. package/vscode/src/vs/workbench/contrib/chat/common/aiCustomizationWorkspaceService.d.ts +5 -0
  1900. package/vscode/src/vs/workbench/contrib/chat/common/aiCustomizationWorkspaceService.js +1 -4
  1901. package/vscode/src/vs/workbench/contrib/chat/common/aiCustomizationWorkspaceService.service.d.ts +3 -2
  1902. package/vscode/src/vs/workbench/contrib/chat/common/attachments/chatDraft.d.ts +13 -0
  1903. package/vscode/src/vs/workbench/contrib/chat/common/attachments/chatDraft.js +18 -0
  1904. package/vscode/src/vs/workbench/contrib/chat/common/attachments/chatVariableEntries.d.ts +3 -1
  1905. package/vscode/src/vs/workbench/contrib/chat/common/attachments/chatVariableEntries.js +12 -7
  1906. package/vscode/src/vs/workbench/contrib/chat/common/attachments/chatVariables.d.ts +1 -0
  1907. package/vscode/src/vs/workbench/contrib/chat/common/automations/automation.d.ts +26 -12
  1908. package/vscode/src/vs/workbench/contrib/chat/common/automations/automationBlueprint.js +24 -1
  1909. package/vscode/src/vs/workbench/contrib/chat/common/automations/automationDialogService.d.ts +8 -1
  1910. package/vscode/src/vs/workbench/contrib/chat/common/automations/automationRunner.d.ts +11 -6
  1911. package/vscode/src/vs/workbench/contrib/chat/common/automations/automationRunner.service.d.ts +6 -7
  1912. package/vscode/src/vs/workbench/contrib/chat/common/automations/automationService.d.ts +118 -42
  1913. package/vscode/src/vs/workbench/contrib/chat/common/automations/automationService.js +11 -10
  1914. package/vscode/src/vs/workbench/contrib/chat/common/automations/automationService.service.d.ts +13 -10
  1915. package/vscode/src/vs/workbench/contrib/chat/common/automations/automationsEnabled.d.ts +1 -0
  1916. package/vscode/src/vs/workbench/contrib/chat/common/automations/automationsEnabled.js +2 -1
  1917. package/vscode/src/vs/workbench/contrib/chat/common/chatArtifactExtraction.js +19 -0
  1918. package/vscode/src/vs/workbench/contrib/chat/common/chatAutoModeExplainability.d.ts +4 -1
  1919. package/vscode/src/vs/workbench/contrib/chat/common/chatAutoModeExplainability.js +4 -1
  1920. package/vscode/src/vs/workbench/contrib/chat/common/chatErrorMessages.js +81 -63
  1921. package/vscode/src/vs/workbench/contrib/chat/common/chatImageExtraction.d.ts +20 -1
  1922. package/vscode/src/vs/workbench/contrib/chat/common/chatImageExtraction.js +89 -20
  1923. package/vscode/src/vs/workbench/contrib/chat/common/chatModeTelemetry.d.ts +1 -1
  1924. package/vscode/src/vs/workbench/contrib/chat/common/chatModeTelemetry.js +2 -1
  1925. package/vscode/src/vs/workbench/contrib/chat/common/chatModes.js +12 -13
  1926. package/vscode/src/vs/workbench/contrib/chat/common/chatPermissionWarnings.js +13 -13
  1927. package/vscode/src/vs/workbench/contrib/chat/common/chatProgressFormatting.d.ts +1 -0
  1928. package/vscode/src/vs/workbench/contrib/chat/common/chatProgressFormatting.js +12 -3
  1929. package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatService.d.ts +104 -13
  1930. package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatService.js +33 -6
  1931. package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatService.service.d.ts +4 -5
  1932. package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceTelemetry.d.ts +273 -0
  1933. package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceTelemetry.js +280 -0
  1934. package/vscode/src/vs/workbench/contrib/chat/common/chatSessionsService.d.ts +54 -1
  1935. package/vscode/src/vs/workbench/contrib/chat/common/chatSessionsService.js +19 -2
  1936. package/vscode/src/vs/workbench/contrib/chat/common/chatSessionsService.service.d.ts +4 -2
  1937. package/vscode/src/vs/workbench/contrib/chat/common/cloudSandboxSessionTrace.d.ts +21 -0
  1938. package/vscode/src/vs/workbench/contrib/chat/common/cloudSandboxSessionTrace.js +49 -0
  1939. package/vscode/src/vs/workbench/contrib/chat/common/constants.d.ts +52 -16
  1940. package/vscode/src/vs/workbench/contrib/chat/common/constants.js +112 -25
  1941. package/vscode/src/vs/workbench/contrib/chat/common/customizationHarnessService.d.ts +49 -0
  1942. package/vscode/src/vs/workbench/contrib/chat/common/customizationHarnessService.js +5 -5
  1943. package/vscode/src/vs/workbench/contrib/chat/common/customizationMarketplaceInstallService.service.d.ts +20 -0
  1944. package/vscode/src/vs/workbench/contrib/chat/common/customizationMarketplaceInstallService.service.js +6 -0
  1945. package/vscode/src/vs/workbench/contrib/chat/common/customizationMarketplaceInstallTelemetry.d.ts +18 -0
  1946. package/vscode/src/vs/workbench/contrib/chat/common/customizationMarketplaceInstallTelemetry.js +55 -0
  1947. package/vscode/src/vs/workbench/contrib/chat/common/editing/chatEditingService.d.ts +4 -4
  1948. package/vscode/src/vs/workbench/contrib/chat/common/editing/chatEditingService.js +2 -2
  1949. package/vscode/src/vs/workbench/contrib/chat/common/editorChatUsage.d.ts +18 -0
  1950. package/vscode/src/vs/workbench/contrib/chat/common/editorChatUsage.js +76 -0
  1951. package/vscode/src/vs/workbench/contrib/chat/common/languageModelSourcePresentation.js +1 -1
  1952. package/vscode/src/vs/workbench/contrib/chat/common/languageModelStats.js +3 -3
  1953. package/vscode/src/vs/workbench/contrib/chat/common/languageModels.d.ts +59 -8
  1954. package/vscode/src/vs/workbench/contrib/chat/common/languageModels.js +133 -62
  1955. package/vscode/src/vs/workbench/contrib/chat/common/languageModels.service.d.ts +5 -6
  1956. package/vscode/src/vs/workbench/contrib/chat/common/model/chatModel.d.ts +64 -7
  1957. package/vscode/src/vs/workbench/contrib/chat/common/model/chatModel.js +329 -64
  1958. package/vscode/src/vs/workbench/contrib/chat/common/model/chatProgressTypes/chatToolInvocation.d.ts +12 -5
  1959. package/vscode/src/vs/workbench/contrib/chat/common/model/chatProgressTypes/chatToolInvocation.js +59 -5
  1960. package/vscode/src/vs/workbench/contrib/chat/common/model/chatViewModel.d.ts +16 -1
  1961. package/vscode/src/vs/workbench/contrib/chat/common/model/chatViewModel.js +43 -22
  1962. package/vscode/src/vs/workbench/contrib/chat/common/modelSelection.d.ts +2 -0
  1963. package/vscode/src/vs/workbench/contrib/chat/common/modelSelection.js +11 -2
  1964. package/vscode/src/vs/workbench/contrib/chat/common/participants/chatAgents.d.ts +3 -0
  1965. package/vscode/src/vs/workbench/contrib/chat/common/plugins/agentPluginEnablement.d.ts +21 -4
  1966. package/vscode/src/vs/workbench/contrib/chat/common/plugins/agentPluginEnablement.js +94 -11
  1967. package/vscode/src/vs/workbench/contrib/chat/common/plugins/agentPluginEnablement.service.d.ts +8 -0
  1968. package/vscode/src/vs/workbench/contrib/chat/common/plugins/agentPluginEnablement.service.js +6 -0
  1969. package/vscode/src/vs/workbench/contrib/chat/common/plugins/agentPluginService.d.ts +28 -7
  1970. package/vscode/src/vs/workbench/contrib/chat/common/plugins/marketplaceReference.d.ts +7 -0
  1971. package/vscode/src/vs/workbench/contrib/chat/common/plugins/marketplaceReference.js +82 -7
  1972. package/vscode/src/vs/workbench/contrib/chat/common/plugins/pluginInstallService.d.ts +3 -4
  1973. package/vscode/src/vs/workbench/contrib/chat/common/plugins/pluginInstallService.service.d.ts +14 -4
  1974. package/vscode/src/vs/workbench/contrib/chat/common/plugins/pluginMarketplaceService.d.ts +25 -1
  1975. package/vscode/src/vs/workbench/contrib/chat/common/plugins/pluginMarketplaceService.js +154 -18
  1976. package/vscode/src/vs/workbench/contrib/chat/common/plugins/pluginMarketplaceService.service.d.ts +7 -2
  1977. package/vscode/src/vs/workbench/contrib/chat/common/plugins/pluginSource.d.ts +2 -0
  1978. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookSchema.d.ts +10 -3
  1979. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookSchema.js +29 -24
  1980. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookTypes.js +20 -20
  1981. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptFileAttributes.js +82 -81
  1982. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/promptTypes.js +10 -10
  1983. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/customizationMigrationService.d.ts +50 -12
  1984. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/customizationMigrationService.js +17 -16
  1985. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/customizationMigrationService.service.d.ts +2 -1
  1986. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/customizationMigrationTelemetryService.service.d.ts +15 -0
  1987. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/customizationMigrationTelemetryService.service.js +6 -0
  1988. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsService.d.ts +1 -0
  1989. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.d.ts +1 -1
  1990. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.js +23 -13
  1991. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.d.ts +3 -2
  1992. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.js +9 -8
  1993. package/vscode/src/vs/workbench/contrib/chat/common/requestParser/chatParserTypes.d.ts +12 -5
  1994. package/vscode/src/vs/workbench/contrib/chat/common/requestParser/chatParserTypes.js +17 -5
  1995. package/vscode/src/vs/workbench/contrib/chat/common/requestParser/chatRequestParser.js +2 -1
  1996. package/vscode/src/vs/workbench/contrib/chat/common/sessionChatCustomizations.d.ts +19 -0
  1997. package/vscode/src/vs/workbench/contrib/chat/common/sessionChatCustomizations.js +14 -0
  1998. package/vscode/src/vs/workbench/contrib/chat/common/sessionChatPills.d.ts +40 -2
  1999. package/vscode/src/vs/workbench/contrib/chat/common/sessionChatPills.js +32 -20
  2000. package/vscode/src/vs/workbench/contrib/chat/common/sessionChatPills.service.d.ts +4 -5
  2001. package/vscode/src/vs/workbench/contrib/chat/common/tools/builtinTools/askQuestionsTool.js +8 -8
  2002. package/vscode/src/vs/workbench/contrib/chat/common/tools/languageModelToolsService.d.ts +14 -0
  2003. package/vscode/src/vs/workbench/contrib/chat/common/tools/languageModelToolsService.js +3 -3
  2004. package/vscode/src/vs/workbench/contrib/chat/common/tools/toolInvocationSummary.d.ts +24 -0
  2005. package/vscode/src/vs/workbench/contrib/chat/common/tools/toolInvocationSummary.js +161 -0
  2006. package/vscode/src/vs/workbench/contrib/chat/common/widget/annotations.d.ts +1 -0
  2007. package/vscode/src/vs/workbench/contrib/chat/common/widget/annotations.js +44 -27
  2008. package/vscode/src/vs/workbench/contrib/chat/common/widget/chatColors.d.ts +2 -0
  2009. package/vscode/src/vs/workbench/contrib/chat/common/widget/chatColors.js +49 -31
  2010. package/vscode/src/vs/workbench/contrib/codeActions/browser/codeActionsContribution.js +11 -11
  2011. package/vscode/src/vs/workbench/contrib/codeEditor/browser/dictation/editorDictation.js +4 -4
  2012. package/vscode/src/vs/workbench/contrib/codeEditor/browser/diffEditorAccessibilityHelp.js +10 -7
  2013. package/vscode/src/vs/workbench/contrib/codeEditor/browser/diffEditorHelper.js +3 -3
  2014. package/vscode/src/vs/workbench/contrib/codeEditor/browser/find/simpleFindWidget.js +10 -10
  2015. package/vscode/src/vs/workbench/contrib/codeEditor/browser/inspectEditorTokens/inspectEditorTokens.js +2 -2
  2016. package/vscode/src/vs/workbench/contrib/codeEditor/browser/inspectKeybindings.js +2 -2
  2017. package/vscode/src/vs/workbench/contrib/codeEditor/browser/largeFileOptimizations.js +3 -3
  2018. package/vscode/src/vs/workbench/contrib/codeEditor/browser/quickaccess/gotoSymbolQuickAccess.js +6 -6
  2019. package/vscode/src/vs/workbench/contrib/codeEditor/browser/saveParticipants.js +4 -4
  2020. package/vscode/src/vs/workbench/contrib/codeEditor/browser/toggleColumnSelection.js +2 -2
  2021. package/vscode/src/vs/workbench/contrib/codeEditor/browser/toggleMinimap.js +2 -2
  2022. package/vscode/src/vs/workbench/contrib/codeEditor/browser/toggleMultiCursorModifier.js +3 -3
  2023. package/vscode/src/vs/workbench/contrib/codeEditor/browser/toggleOvertype.js +3 -3
  2024. package/vscode/src/vs/workbench/contrib/codeEditor/browser/toggleRenderControlCharacter.js +2 -2
  2025. package/vscode/src/vs/workbench/contrib/codeEditor/browser/toggleRenderWhitespace.js +12 -12
  2026. package/vscode/src/vs/workbench/contrib/codeEditor/browser/toggleWordWrap.js +5 -5
  2027. package/vscode/src/vs/workbench/contrib/codeEditor/common/languageConfigurationExtensionPoint.js +71 -71
  2028. package/vscode/src/vs/workbench/contrib/comments/browser/commentColors.js +7 -7
  2029. package/vscode/src/vs/workbench/contrib/comments/browser/commentGlyphWidget.js +7 -7
  2030. package/vscode/src/vs/workbench/contrib/comments/browser/commentNode.js +4 -4
  2031. package/vscode/src/vs/workbench/contrib/comments/browser/commentReply.js +3 -3
  2032. package/vscode/src/vs/workbench/contrib/comments/browser/commentThreadBody.js +3 -3
  2033. package/vscode/src/vs/workbench/contrib/comments/browser/commentThreadHeader.js +3 -3
  2034. package/vscode/src/vs/workbench/contrib/comments/browser/commentThreadWidget.js +3 -3
  2035. package/vscode/src/vs/workbench/contrib/comments/browser/commentThreadZoneWidget.js +3 -3
  2036. package/vscode/src/vs/workbench/contrib/comments/browser/commentsAccessibility.js +12 -12
  2037. package/vscode/src/vs/workbench/contrib/comments/browser/commentsController.js +9 -8
  2038. package/vscode/src/vs/workbench/contrib/comments/browser/commentsModel.js +1 -1
  2039. package/vscode/src/vs/workbench/contrib/comments/browser/commentsTreeViewer.js +9 -9
  2040. package/vscode/src/vs/workbench/contrib/comments/browser/commentsView.d.ts +1 -1
  2041. package/vscode/src/vs/workbench/contrib/comments/browser/commentsView.js +16 -15
  2042. package/vscode/src/vs/workbench/contrib/comments/browser/commentsViewActions.js +16 -16
  2043. package/vscode/src/vs/workbench/contrib/comments/browser/media/panel.css +5 -0
  2044. package/vscode/src/vs/workbench/contrib/comments/browser/reactionsAction.js +7 -7
  2045. package/vscode/src/vs/workbench/contrib/comments/common/commentContextKeys.js +12 -12
  2046. package/vscode/src/vs/workbench/contrib/customEditor/browser/customEditorDiffInput.js +3 -3
  2047. package/vscode/src/vs/workbench/contrib/customEditor/browser/customEditorInput.d.ts +9 -1
  2048. package/vscode/src/vs/workbench/contrib/customEditor/browser/customEditorInput.js +34 -3
  2049. package/vscode/src/vs/workbench/contrib/customEditor/common/customTextEditorNavigation.d.ts +14 -0
  2050. package/vscode/src/vs/workbench/contrib/debug/browser/baseDebugView.js +1 -1
  2051. package/vscode/src/vs/workbench/contrib/debug/browser/breakpointEditorContribution.js +29 -29
  2052. package/vscode/src/vs/workbench/contrib/debug/browser/breakpointWidget.js +14 -14
  2053. package/vscode/src/vs/workbench/contrib/debug/browser/breakpointsView.js +75 -75
  2054. package/vscode/src/vs/workbench/contrib/debug/browser/callStackEditorContribution.js +2 -2
  2055. package/vscode/src/vs/workbench/contrib/debug/browser/debugActionViewItems.js +9 -9
  2056. package/vscode/src/vs/workbench/contrib/debug/browser/debugColors.js +12 -12
  2057. package/vscode/src/vs/workbench/contrib/debug/browser/debugCommands.js +40 -40
  2058. package/vscode/src/vs/workbench/contrib/debug/browser/debugEditorContribution.js +2 -2
  2059. package/vscode/src/vs/workbench/contrib/debug/browser/debugHover.js +3 -3
  2060. package/vscode/src/vs/workbench/contrib/debug/browser/debugIcons.js +57 -57
  2061. package/vscode/src/vs/workbench/contrib/debug/browser/debugSessionPicker.js +3 -3
  2062. package/vscode/src/vs/workbench/contrib/debug/browser/exceptionWidget.js +7 -7
  2063. package/vscode/src/vs/workbench/contrib/debug/browser/linkDetector.d.ts +14 -1
  2064. package/vscode/src/vs/workbench/contrib/debug/browser/linkDetector.js +13 -10
  2065. package/vscode/src/vs/workbench/contrib/debug/browser/repl.js +18 -18
  2066. package/vscode/src/vs/workbench/contrib/debug/browser/replViewer.js +5 -5
  2067. package/vscode/src/vs/workbench/contrib/debug/browser/variablesView.js +9 -9
  2068. package/vscode/src/vs/workbench/contrib/debug/common/abstractDebugAdapter.js +1 -1
  2069. package/vscode/src/vs/workbench/contrib/debug/common/debug.d.ts +9 -0
  2070. package/vscode/src/vs/workbench/contrib/debug/common/debug.js +78 -66
  2071. package/vscode/src/vs/workbench/contrib/debug/common/debugModel.js +11 -10
  2072. package/vscode/src/vs/workbench/contrib/debug/common/debugSource.js +1 -1
  2073. package/vscode/src/vs/workbench/contrib/debug/common/disassemblyViewInput.js +2 -2
  2074. package/vscode/src/vs/workbench/contrib/debug/common/loadedScriptsPicker.js +1 -1
  2075. package/vscode/src/vs/workbench/contrib/debug/common/replModel.js +1 -1
  2076. package/vscode/src/vs/workbench/contrib/dropOrPasteInto/browser/commands.js +2 -2
  2077. package/vscode/src/vs/workbench/contrib/dropOrPasteInto/browser/configurationSchema.js +4 -4
  2078. package/vscode/src/vs/workbench/contrib/editTelemetry/browser/telemetry/aiEditTelemetry/aiEditTelemetryService.d.ts +11 -1
  2079. package/vscode/src/vs/workbench/contrib/editTelemetry/browser/telemetry/aiEditTelemetry/aiEditTelemetryServiceImpl.js +6 -0
  2080. package/vscode/src/vs/workbench/contrib/extensions/browser/configBasedRecommendations.js +1 -1
  2081. package/vscode/src/vs/workbench/contrib/extensions/browser/exeBasedRecommendations.js +1 -1
  2082. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionEditor.js +41 -41
  2083. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionEnablementWorkspaceTrustTransitionParticipant.js +1 -1
  2084. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionFeaturesTab.js +15 -15
  2085. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionRecommendationNotificationService.js +14 -14
  2086. package/vscode/src/vs/workbench/contrib/extensions/browser/extensions.contribution.js +164 -164
  2087. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsActions.js +183 -186
  2088. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsActivationProgress.js +3 -1
  2089. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsCompletionItemsProvider.js +1 -1
  2090. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsDependencyChecker.js +5 -5
  2091. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsIcons.js +25 -25
  2092. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsQuickAccess.js +4 -4
  2093. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsViewer.js +7 -7
  2094. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsViewlet.js +48 -48
  2095. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsViews.js +5 -5
  2096. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsWidgets.js +30 -30
  2097. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.d.ts +33 -34
  2098. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.js +138 -137
  2099. package/vscode/src/vs/workbench/contrib/extensions/browser/fileBasedRecommendations.js +2 -2
  2100. package/vscode/src/vs/workbench/contrib/extensions/browser/webRecommendations.js +1 -1
  2101. package/vscode/src/vs/workbench/contrib/extensions/browser/workspaceRecommendations.js +2 -2
  2102. package/vscode/src/vs/workbench/contrib/extensions/common/extensions.js +1 -1
  2103. package/vscode/src/vs/workbench/contrib/extensions/common/extensionsFileTemplate.js +5 -5
  2104. package/vscode/src/vs/workbench/contrib/extensions/common/extensionsInput.js +2 -2
  2105. package/vscode/src/vs/workbench/contrib/extensions/common/extensionsUtils.js +3 -3
  2106. package/vscode/src/vs/workbench/contrib/extensions/common/searchExtensionsTool.js +3 -3
  2107. package/vscode/src/vs/workbench/contrib/externalUriOpener/common/configuration.js +4 -4
  2108. package/vscode/src/vs/workbench/contrib/externalUriOpener/common/externalUriOpenerService.d.ts +3 -0
  2109. package/vscode/src/vs/workbench/contrib/externalUriOpener/common/externalUriOpenerService.js +3 -3
  2110. package/vscode/src/vs/workbench/contrib/files/browser/editors/binaryFileEditor.js +1 -1
  2111. package/vscode/src/vs/workbench/contrib/files/browser/editors/fileEditorInput.d.ts +1 -1
  2112. package/vscode/src/vs/workbench/contrib/files/browser/editors/fileEditorInput.js +2 -1
  2113. package/vscode/src/vs/workbench/contrib/files/browser/editors/textFileEditor.d.ts +1 -1
  2114. package/vscode/src/vs/workbench/contrib/files/browser/editors/textFileEditor.js +10 -9
  2115. package/vscode/src/vs/workbench/contrib/files/browser/editors/textFileSaveErrorHandler.js +18 -18
  2116. package/vscode/src/vs/workbench/contrib/files/browser/explorerViewlet.js +15 -14
  2117. package/vscode/src/vs/workbench/contrib/files/browser/fileActions.contribution.js +39 -39
  2118. package/vscode/src/vs/workbench/contrib/files/browser/fileActions.d.ts +1 -1
  2119. package/vscode/src/vs/workbench/contrib/files/browser/fileActions.js +88 -92
  2120. package/vscode/src/vs/workbench/contrib/files/browser/fileCommands._save.js +4 -4
  2121. package/vscode/src/vs/workbench/contrib/files/browser/fileCommands.js +11 -8
  2122. package/vscode/src/vs/workbench/contrib/files/browser/fileConstants.js +6 -6
  2123. package/vscode/src/vs/workbench/contrib/files/browser/fileImportExport.d.ts +7 -1
  2124. package/vscode/src/vs/workbench/contrib/files/browser/fileImportExport.js +28 -28
  2125. package/vscode/src/vs/workbench/contrib/files/browser/files.contribution._configuration.js +52 -51
  2126. package/vscode/src/vs/workbench/contrib/files/browser/files.contribution._editorPane.js +2 -2
  2127. package/vscode/src/vs/workbench/contrib/files/browser/files.service.d.ts +2 -6
  2128. package/vscode/src/vs/workbench/contrib/files/browser/views/emptyView.js +1 -1
  2129. package/vscode/src/vs/workbench/contrib/files/browser/views/explorerView.d.ts +3 -2
  2130. package/vscode/src/vs/workbench/contrib/files/browser/views/explorerView.js +20 -17
  2131. package/vscode/src/vs/workbench/contrib/files/browser/views/explorerViewer.js +17 -17
  2132. package/vscode/src/vs/workbench/contrib/files/browser/views/openEditorsView.js +9 -9
  2133. package/vscode/src/vs/workbench/contrib/files/browser/workspaceWatcher.js +4 -4
  2134. package/vscode/src/vs/workbench/contrib/files/common/dirtyFilesIndicator.js +1 -1
  2135. package/vscode/src/vs/workbench/contrib/files/common/files.d.ts +1 -0
  2136. package/vscode/src/vs/workbench/contrib/files/common/files.js +18 -17
  2137. package/vscode/src/vs/workbench/contrib/folding/browser/folding.contribution.js +3 -3
  2138. package/vscode/src/vs/workbench/contrib/format/browser/formatActionsMultiple.js +20 -20
  2139. package/vscode/src/vs/workbench/contrib/format/browser/formatActionsNone.js +4 -4
  2140. package/vscode/src/vs/workbench/contrib/format/browser/formatModified.js +1 -1
  2141. package/vscode/src/vs/workbench/contrib/github/browser/githubResourceDetails.d.ts +98 -0
  2142. package/vscode/src/vs/workbench/contrib/github/browser/githubResourceDetails.js +621 -0
  2143. package/vscode/src/vs/workbench/contrib/github/browser/githubResourceHover.d.ts +81 -0
  2144. package/vscode/src/vs/workbench/contrib/github/browser/githubResourceHover.js +385 -0
  2145. package/vscode/src/vs/workbench/contrib/github/browser/media/githubResourceHover.css +153 -0
  2146. package/vscode/src/vs/workbench/contrib/inlayHints/browser/inlayHintsAccessibilty.js +4 -4
  2147. package/vscode/src/vs/workbench/contrib/inlineChat/common/inlineChat.js +32 -32
  2148. package/vscode/src/vs/workbench/contrib/inlineCompletions/browser/inlineCompletionLanguageStatusBarContribution.js +6 -6
  2149. package/vscode/src/vs/workbench/contrib/interactive/browser/replInputHintContentWidget.js +3 -3
  2150. package/vscode/src/vs/workbench/contrib/issue/common/issue.service.d.ts +2 -1
  2151. package/vscode/src/vs/workbench/contrib/languageStatus/browser/languageStatus.js +7 -7
  2152. package/vscode/src/vs/workbench/contrib/list/browser/listResizeColumnAction.js +2 -2
  2153. package/vscode/src/vs/workbench/contrib/list/browser/tableColumnResizeQuickPick.js +5 -5
  2154. package/vscode/src/vs/workbench/contrib/markdown/browser/markdownSettingRenderer.js +14 -14
  2155. package/vscode/src/vs/workbench/contrib/markdown/common/markdownColors.js +5 -5
  2156. package/vscode/src/vs/workbench/contrib/mcp/browser/mcpCommandsAddConfiguration.d.ts +17 -4
  2157. package/vscode/src/vs/workbench/contrib/mcp/browser/mcpCommandsAddConfiguration.js +312 -191
  2158. package/vscode/src/vs/workbench/contrib/mcp/browser/mcpConfigurationDestination.d.ts +30 -0
  2159. package/vscode/src/vs/workbench/contrib/mcp/browser/mcpConfigurationDestination.js +158 -0
  2160. package/vscode/src/vs/workbench/contrib/mcp/browser/mcpServerActions.d.ts +4 -2
  2161. package/vscode/src/vs/workbench/contrib/mcp/browser/mcpServerActions.js +74 -58
  2162. package/vscode/src/vs/workbench/contrib/mcp/browser/mcpServerConfigurationForm.d.ts +101 -0
  2163. package/vscode/src/vs/workbench/contrib/mcp/browser/mcpServerConfigurationForm.js +647 -0
  2164. package/vscode/src/vs/workbench/contrib/mcp/browser/mcpToolCallUI.js +1 -1
  2165. package/vscode/src/vs/workbench/contrib/mcp/browser/media/mcpServerConfigurationForm.css +92 -0
  2166. package/vscode/src/vs/workbench/contrib/mcp/common/discovery/pluginMcpDiscovery.js +9 -1
  2167. package/vscode/src/vs/workbench/contrib/mcp/common/mcpConfiguration.d.ts +14 -0
  2168. package/vscode/src/vs/workbench/contrib/mcp/common/mcpConfiguration.js +201 -160
  2169. package/vscode/src/vs/workbench/contrib/mcp/common/mcpConfigurationGeneration.d.ts +20 -0
  2170. package/vscode/src/vs/workbench/contrib/mcp/common/mcpConfigurationGeneration.js +104 -0
  2171. package/vscode/src/vs/workbench/contrib/mcp/common/mcpCopilotGlobalConfigurationService.service.d.ts +7 -0
  2172. package/vscode/src/vs/workbench/contrib/mcp/common/mcpCopilotGlobalConfigurationService.service.js +6 -0
  2173. package/vscode/src/vs/workbench/contrib/mcp/common/mcpDevMode.js +3 -4
  2174. package/vscode/src/vs/workbench/contrib/mcp/common/mcpRegistryTypes.d.ts +5 -0
  2175. package/vscode/src/vs/workbench/contrib/mcp/common/mcpRegistryTypes.service.d.ts +1 -1
  2176. package/vscode/src/vs/workbench/contrib/mcp/common/mcpServer.d.ts +3 -18
  2177. package/vscode/src/vs/workbench/contrib/mcp/common/mcpServer.js +59 -39
  2178. package/vscode/src/vs/workbench/contrib/mcp/common/mcpServerConfigurationForm.d.ts +95 -0
  2179. package/vscode/src/vs/workbench/contrib/mcp/common/mcpServerConfigurationForm.js +277 -0
  2180. package/vscode/src/vs/workbench/contrib/mcp/common/mcpTypes.d.ts +40 -1
  2181. package/vscode/src/vs/workbench/contrib/mcp/common/mcpTypes.js +38 -11
  2182. package/vscode/src/vs/workbench/contrib/mcp/common/mcpTypes.service.d.ts +11 -2
  2183. package/vscode/src/vs/workbench/contrib/mcp/common/mcpTypesUtils.js +11 -7
  2184. package/vscode/src/vs/workbench/contrib/mergeEditor/browser/mergeEditorInput.js +4 -4
  2185. package/vscode/src/vs/workbench/contrib/mergeEditor/browser/mergeEditorInputModel.js +23 -23
  2186. package/vscode/src/vs/workbench/contrib/mergeEditor/browser/model/mergeEditorModel.js +2 -2
  2187. package/vscode/src/vs/workbench/contrib/mergeEditor/common/mergeEditor.js +8 -8
  2188. package/vscode/src/vs/workbench/contrib/modernUI/browser/connectedEditorTabs.d.ts +1 -0
  2189. package/vscode/src/vs/workbench/contrib/modernUI/browser/connectedEditorTabs.js +54 -0
  2190. package/vscode/src/vs/workbench/contrib/modernUI/browser/media/connectedEditorTabs.css +787 -0
  2191. package/vscode/src/vs/workbench/contrib/modernUI/browser/media/tabs.css +143 -62
  2192. package/vscode/src/vs/workbench/contrib/multiDiffEditor/browser/actions.js +7 -7
  2193. package/vscode/src/vs/workbench/contrib/multiDiffEditor/browser/icons.contribution.js +1 -1
  2194. package/vscode/src/vs/workbench/contrib/multiDiffEditor/browser/multiDiffEditor.d.ts +5 -2
  2195. package/vscode/src/vs/workbench/contrib/multiDiffEditor/browser/multiDiffEditor.js +38 -13
  2196. package/vscode/src/vs/workbench/contrib/multiDiffEditor/browser/multiDiffEditorInput.js +12 -4
  2197. package/vscode/src/vs/workbench/contrib/multiDiffEditor/browser/scmMultiDiffSourceResolver.js +3 -2
  2198. package/vscode/src/vs/workbench/contrib/multiDiffEditor/common/multiDiffEditor.d.ts +8 -0
  2199. package/vscode/src/vs/workbench/contrib/multiDiffEditor/common/multiDiffEditor.js +39 -0
  2200. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/cellStatusBar/executionStatusBarItemController.js +7 -7
  2201. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/find/notebookFindReplaceWidget.js +17 -17
  2202. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/find/notebookFindWidget.js +2 -2
  2203. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/cellOperations.js +2 -2
  2204. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/cellOutputActions.js +6 -6
  2205. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/coreActions.js +4 -4
  2206. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/foldingController.js +3 -3
  2207. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/insertCellActions.js +24 -24
  2208. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/diffComponents.js +3 -3
  2209. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/diffElementOutputs.js +7 -7
  2210. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/notebookDiffEditor.js +1 -1
  2211. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/notebookDiffEditorBrowser.js +5 -5
  2212. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/notebookDiffList.js +1 -1
  2213. package/vscode/src/vs/workbench/contrib/notebook/browser/notebookAccessibilityProvider.js +3 -3
  2214. package/vscode/src/vs/workbench/contrib/notebook/browser/notebookEditor.js +13 -13
  2215. package/vscode/src/vs/workbench/contrib/notebook/browser/notebookEditorWidget.js +24 -24
  2216. package/vscode/src/vs/workbench/contrib/notebook/browser/notebookIcons.js +29 -29
  2217. package/vscode/src/vs/workbench/contrib/notebook/browser/view/cellParts/cellEditorOptions.js +5 -5
  2218. package/vscode/src/vs/workbench/contrib/notebook/browser/view/cellParts/cellOutput.js +7 -7
  2219. package/vscode/src/vs/workbench/contrib/notebook/browser/view/cellParts/codeCell.js +2 -2
  2220. package/vscode/src/vs/workbench/contrib/notebook/browser/view/cellParts/codeCellExecutionIcon.js +4 -4
  2221. package/vscode/src/vs/workbench/contrib/notebook/browser/view/cellParts/codeCellRunToolbar.js +1 -1
  2222. package/vscode/src/vs/workbench/contrib/notebook/browser/view/cellParts/collapsedCellOutput.js +3 -3
  2223. package/vscode/src/vs/workbench/contrib/notebook/browser/view/cellParts/foldedCellHint.js +1 -1
  2224. package/vscode/src/vs/workbench/contrib/notebook/browser/view/cellParts/markupCell.js +2 -2
  2225. package/vscode/src/vs/workbench/contrib/notebook/browser/view/renderers/backLayerWebView.d.ts +1 -1
  2226. package/vscode/src/vs/workbench/contrib/notebook/browser/view/renderers/backLayerWebView.js +6 -5
  2227. package/vscode/src/vs/workbench/contrib/notebook/browser/view/renderers/cellRenderer.js +1 -1
  2228. package/vscode/src/vs/workbench/contrib/notebook/browser/viewParts/notebookKernelQuickPickStrategy.js +14 -14
  2229. package/vscode/src/vs/workbench/contrib/notebook/browser/viewParts/notebookKernelView.js +2 -2
  2230. package/vscode/src/vs/workbench/contrib/notebook/browser/viewParts/notebookViewZones.js +1 -1
  2231. package/vscode/src/vs/workbench/contrib/notebook/common/notebookEditorInput.d.ts +1 -1
  2232. package/vscode/src/vs/workbench/contrib/notebook/common/notebookEditorInput.js +4 -3
  2233. package/vscode/src/vs/workbench/contrib/onboarding/browser/guidedTryoutPresentation.d.ts +17 -0
  2234. package/vscode/src/vs/workbench/contrib/onboarding/browser/guidedTryoutPresentation.js +131 -0
  2235. package/vscode/src/vs/workbench/contrib/onboarding/browser/onboardingPresentationQueue.d.ts +3 -0
  2236. package/vscode/src/vs/workbench/contrib/onboarding/browser/onboardingPresentationQueue.js +15 -0
  2237. package/vscode/src/vs/workbench/contrib/onboarding/browser/sequence/sequencePresentation.d.ts +10 -0
  2238. package/vscode/src/vs/workbench/contrib/onboarding/browser/sequence/sequencePresentation.js +154 -0
  2239. package/vscode/src/vs/workbench/contrib/onboarding/browser/spotlight/onboardingTarget.d.ts +31 -1
  2240. package/vscode/src/vs/workbench/contrib/onboarding/browser/spotlight/onboardingTarget.js +67 -4
  2241. package/vscode/src/vs/workbench/contrib/onboarding/browser/spotlight/spotlightTypes.d.ts +21 -4
  2242. package/vscode/src/vs/workbench/contrib/onboarding/common/onboardingRegistry.d.ts +17 -1
  2243. package/vscode/src/vs/workbench/contrib/onboarding/common/onboardingRegistry.js +17 -1
  2244. package/vscode/src/vs/workbench/contrib/onboarding/common/onboardingScenario.d.ts +3 -0
  2245. package/vscode/src/vs/workbench/contrib/onboarding/common/onboardingScenarioService.service.d.ts +9 -6
  2246. package/vscode/src/vs/workbench/contrib/onboarding/common/onboardingSequence.d.ts +2 -0
  2247. package/vscode/src/vs/workbench/contrib/onboarding/common/onboardingSequence.js +5 -0
  2248. package/vscode/src/vs/workbench/contrib/onboarding/common/onboardingTryout.d.ts +95 -0
  2249. package/vscode/src/vs/workbench/contrib/onboarding/common/onboardingTryout.js +111 -0
  2250. package/vscode/src/vs/workbench/contrib/onboarding/common/onboardingTryout.service.d.ts +13 -0
  2251. package/vscode/src/vs/workbench/contrib/onboarding/common/onboardingTryout.service.js +6 -0
  2252. package/vscode/src/vs/workbench/contrib/onboarding/common/onboardingTryoutActions.d.ts +34 -0
  2253. package/vscode/src/vs/workbench/contrib/onboarding/common/onboardingTryoutActions.js +44 -0
  2254. package/vscode/src/vs/workbench/contrib/opener/browser/opener.contribution.d.ts +18 -1
  2255. package/vscode/src/vs/workbench/contrib/opener/browser/opener.contribution.js +54 -12
  2256. package/vscode/src/vs/workbench/contrib/preferences/browser/keybindingWidgets.js +3 -3
  2257. package/vscode/src/vs/workbench/contrib/preferences/browser/preferencesIcons.js +13 -13
  2258. package/vscode/src/vs/workbench/contrib/preferences/browser/preferencesWidgets.js +10 -10
  2259. package/vscode/src/vs/workbench/contrib/preferences/browser/settingsLayout.js +60 -60
  2260. package/vscode/src/vs/workbench/contrib/preferences/browser/settingsTreeModels.d.ts +11 -4
  2261. package/vscode/src/vs/workbench/contrib/preferences/browser/settingsTreeModels.js +68 -17
  2262. package/vscode/src/vs/workbench/contrib/preferences/common/preferences.d.ts +1 -0
  2263. package/vscode/src/vs/workbench/contrib/preferences/common/preferences.js +5 -4
  2264. package/vscode/src/vs/workbench/contrib/preferences/common/settingsEditorColorRegistry.js +21 -21
  2265. package/vscode/src/vs/workbench/contrib/remote/browser/remoteExplorer.d.ts +30 -0
  2266. package/vscode/src/vs/workbench/contrib/remote/browser/remoteExplorer.js +20 -19
  2267. package/vscode/src/vs/workbench/contrib/remote/browser/remoteIcons.js +17 -17
  2268. package/vscode/src/vs/workbench/contrib/remote/browser/tunnelView.js +59 -59
  2269. package/vscode/src/vs/workbench/contrib/replNotebook/browser/replEditor.js +1 -1
  2270. package/vscode/src/vs/workbench/contrib/replNotebook/browser/replEditorInput.d.ts +1 -1
  2271. package/vscode/src/vs/workbench/contrib/replNotebook/browser/replEditorInput.js +3 -2
  2272. package/vscode/src/vs/workbench/contrib/scm/browser/scmHistory.js +11 -11
  2273. package/vscode/src/vs/workbench/contrib/scm/browser/scmHistoryChatContext.js +6 -6
  2274. package/vscode/src/vs/workbench/contrib/scm/common/quickDiff.js +14 -14
  2275. package/vscode/src/vs/workbench/contrib/scm/common/scm.d.ts +1 -0
  2276. package/vscode/src/vs/workbench/contrib/search/browser/anythingQuickAccess.d.ts +1 -1
  2277. package/vscode/src/vs/workbench/contrib/search/browser/anythingQuickAccess.js +11 -10
  2278. package/vscode/src/vs/workbench/contrib/search/browser/patternInputWidget.js +4 -4
  2279. package/vscode/src/vs/workbench/contrib/search/browser/replaceService.js +3 -3
  2280. package/vscode/src/vs/workbench/contrib/search/browser/search.common.contribution.js +18 -18
  2281. package/vscode/src/vs/workbench/contrib/search/browser/searchActionsBase.js +1 -1
  2282. package/vscode/src/vs/workbench/contrib/search/browser/searchActionsSymbol.js +3 -3
  2283. package/vscode/src/vs/workbench/contrib/search/browser/searchActionsTopBar.js +9 -9
  2284. package/vscode/src/vs/workbench/contrib/search/browser/searchChatContext.js +5 -5
  2285. package/vscode/src/vs/workbench/contrib/search/browser/searchFindInput.js +1 -1
  2286. package/vscode/src/vs/workbench/contrib/search/browser/searchIcons.js +20 -20
  2287. package/vscode/src/vs/workbench/contrib/search/browser/searchMessage.js +2 -2
  2288. package/vscode/src/vs/workbench/contrib/search/browser/searchQuickAccess.contribution.js +4 -4
  2289. package/vscode/src/vs/workbench/contrib/search/browser/searchResultsView.js +14 -14
  2290. package/vscode/src/vs/workbench/contrib/search/browser/searchView.js +55 -55
  2291. package/vscode/src/vs/workbench/contrib/search/browser/searchWidget.js +11 -11
  2292. package/vscode/src/vs/workbench/contrib/search/browser/symbolsQuickAccess.js +2 -2
  2293. package/vscode/src/vs/workbench/contrib/search/common/search.js +1 -1
  2294. package/vscode/src/vs/workbench/contrib/searchEditor/browser/searchEditorInput.d.ts +1 -1
  2295. package/vscode/src/vs/workbench/contrib/searchEditor/browser/searchEditorInput.js +7 -5
  2296. package/vscode/src/vs/workbench/contrib/searchEditor/browser/searchEditorModel.d.ts +7 -4
  2297. package/vscode/src/vs/workbench/contrib/searchEditor/browser/searchEditorModel.js +7 -1
  2298. package/vscode/src/vs/workbench/contrib/searchEditor/browser/searchEditorSerialization.js +5 -5
  2299. package/vscode/src/vs/workbench/contrib/snippets/browser/snippetCompletionProvider.js +3 -3
  2300. package/vscode/src/vs/workbench/contrib/snippets/browser/snippetsFile.js +3 -3
  2301. package/vscode/src/vs/workbench/contrib/snippets/browser/snippetsService.js +9 -9
  2302. package/vscode/src/vs/workbench/contrib/speech/common/speechService.js +29 -29
  2303. package/vscode/src/vs/workbench/contrib/tasks/common/constants.js +1 -1
  2304. package/vscode/src/vs/workbench/contrib/tasks/common/problemMatcher.js +70 -70
  2305. package/vscode/src/vs/workbench/contrib/tasks/common/taskConfiguration.js +16 -16
  2306. package/vscode/src/vs/workbench/contrib/tasks/common/taskDefinitionRegistry.js +6 -6
  2307. package/vscode/src/vs/workbench/contrib/tasks/common/taskService.js +6 -6
  2308. package/vscode/src/vs/workbench/contrib/tasks/common/tasks.js +4 -4
  2309. package/vscode/src/vs/workbench/contrib/terminal/browser/agentHostPty.d.ts +19 -0
  2310. package/vscode/src/vs/workbench/contrib/terminal/browser/agentHostPty.js +36 -5
  2311. package/vscode/src/vs/workbench/contrib/terminal/browser/agentHostTerminalService.d.ts +10 -0
  2312. package/vscode/src/vs/workbench/contrib/terminal/browser/agentHostTerminalService.js +43 -11
  2313. package/vscode/src/vs/workbench/contrib/terminal/browser/agentHostTerminalService.service.d.ts +26 -0
  2314. package/vscode/src/vs/workbench/contrib/terminal/browser/chatTerminalCommandMirror.d.ts +19 -6
  2315. package/vscode/src/vs/workbench/contrib/terminal/browser/chatTerminalCommandMirror.js +10 -9
  2316. package/vscode/src/vs/workbench/contrib/terminal/browser/environmentVariableInfo.js +5 -5
  2317. package/vscode/src/vs/workbench/contrib/terminal/browser/terminal.d.ts +5 -0
  2318. package/vscode/src/vs/workbench/contrib/terminal/browser/terminalActions.js +61 -61
  2319. package/vscode/src/vs/workbench/contrib/terminal/browser/terminalEditorInput.js +3 -3
  2320. package/vscode/src/vs/workbench/contrib/terminal/browser/terminalIcons.js +13 -13
  2321. package/vscode/src/vs/workbench/contrib/terminal/browser/terminalMenus.js +42 -42
  2322. package/vscode/src/vs/workbench/contrib/terminal/browser/terminalProcessManager.d.ts +1 -1
  2323. package/vscode/src/vs/workbench/contrib/terminal/browser/terminalProcessManager.js +4 -3
  2324. package/vscode/src/vs/workbench/contrib/terminal/browser/terminalTabsList.js +5 -5
  2325. package/vscode/src/vs/workbench/contrib/terminal/browser/terminalTooltip.js +3 -3
  2326. package/vscode/src/vs/workbench/contrib/terminal/browser/xterm/decorationAddon.js +16 -16
  2327. package/vscode/src/vs/workbench/contrib/terminal/browser/xterm/decorationStyles.js +15 -15
  2328. package/vscode/src/vs/workbench/contrib/terminal/browser/xterm/terminalFontRendering.css +11 -0
  2329. package/vscode/src/vs/workbench/contrib/terminal/browser/xterm/terminalFontRendering.d.ts +3 -0
  2330. package/vscode/src/vs/workbench/contrib/terminal/browser/xterm/terminalFontRendering.js +24 -0
  2331. package/vscode/src/vs/workbench/contrib/terminal/common/terminal.d.ts +1 -0
  2332. package/vscode/src/vs/workbench/contrib/terminal/common/terminal.js +10 -10
  2333. package/vscode/src/vs/workbench/contrib/terminal/common/terminalColorRegistry.js +27 -27
  2334. package/vscode/src/vs/workbench/contrib/terminal/common/terminalContextKey.js +17 -17
  2335. package/vscode/src/vs/workbench/contrib/terminal/common/terminalEnvironment.js +1 -0
  2336. package/vscode/src/vs/workbench/contrib/terminal/common/terminalStrings.js +26 -26
  2337. package/vscode/src/vs/workbench/contrib/terminal/terminalContribExports.d.ts +2 -5
  2338. package/vscode/src/vs/workbench/contrib/terminal/terminalContribExports.js +1 -4
  2339. package/vscode/src/vs/workbench/contrib/terminalContrib/accessibility/common/terminalAccessibilityConfiguration.js +5 -5
  2340. package/vscode/src/vs/workbench/contrib/terminalContrib/autoReplies/common/terminalAutoRepliesConfiguration.js +2 -2
  2341. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminalChatAgentToolsConfiguration.d.ts +2 -1
  2342. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminalChatAgentToolsConfiguration.js +294 -170
  2343. package/vscode/src/vs/workbench/contrib/terminalContrib/commandGuide/common/terminalCommandGuideConfiguration.js +1 -1
  2344. package/vscode/src/vs/workbench/contrib/terminalContrib/history/common/terminal.history.js +1 -1
  2345. package/vscode/src/vs/workbench/contrib/terminalContrib/inlineHint/common/terminalInitialHintConfiguration.js +1 -1
  2346. package/vscode/src/vs/workbench/contrib/terminalContrib/notification/common/terminalNotificationConfiguration.js +1 -1
  2347. package/vscode/src/vs/workbench/contrib/terminalContrib/resizeDimensionsOverlay/common/terminalResizeDimensionsOverlayConfiguration.js +1 -1
  2348. package/vscode/src/vs/workbench/contrib/terminalContrib/stickyScroll/browser/terminalStickyScrollColorRegistry.js +3 -3
  2349. package/vscode/src/vs/workbench/contrib/terminalContrib/stickyScroll/common/terminalStickyScrollConfiguration.js +3 -3
  2350. package/vscode/src/vs/workbench/contrib/terminalContrib/suggest/common/terminalSuggestConfiguration.js +30 -30
  2351. package/vscode/src/vs/workbench/contrib/terminalContrib/typeAhead/common/terminalTypeAheadConfiguration.js +5 -5
  2352. package/vscode/src/vs/workbench/contrib/terminalContrib/zoom/common/terminal.zoom.js +2 -2
  2353. package/vscode/src/vs/workbench/contrib/testing/common/constants.js +11 -11
  2354. package/vscode/src/vs/workbench/contrib/testing/common/testResult.js +2 -2
  2355. package/vscode/src/vs/workbench/contrib/testing/common/testTypes.js +3 -3
  2356. package/vscode/src/vs/workbench/contrib/update/browser/releaseNotesEditor.d.ts +27 -4
  2357. package/vscode/src/vs/workbench/contrib/update/browser/releaseNotesEditor.js +292 -60
  2358. package/vscode/src/vs/workbench/contrib/update/browser/releaseNotesTryouts.d.ts +67 -0
  2359. package/vscode/src/vs/workbench/contrib/update/browser/releaseNotesTryouts.js +434 -0
  2360. package/vscode/src/vs/workbench/contrib/update/browser/update.js +27 -27
  2361. package/vscode/src/vs/workbench/contrib/update/browser/updateTitleBarEntry.js +11 -11
  2362. package/vscode/src/vs/workbench/contrib/update/browser/updateTooltip.js +45 -45
  2363. package/vscode/src/vs/workbench/contrib/update/common/updateUtils.js +8 -8
  2364. package/vscode/src/vs/workbench/contrib/url/browser/trustedDomains.js +6 -6
  2365. package/vscode/src/vs/workbench/contrib/webview/browser/webview.contribution.js +3 -3
  2366. package/vscode/src/vs/workbench/contrib/webview/browser/webviewFindAccessibilityHelp.js +30 -30
  2367. package/vscode/src/vs/workbench/contrib/webviewPanel/browser/webviewEditor.d.ts +2 -0
  2368. package/vscode/src/vs/workbench/contrib/webviewPanel/browser/webviewEditor.js +16 -1
  2369. package/vscode/src/vs/workbench/contrib/webviewPanel/browser/webviewEditorInput.d.ts +3 -0
  2370. package/vscode/src/vs/workbench/contrib/webviewPanel/browser/webviewEditorInput.js +1 -0
  2371. package/vscode/src/vs/workbench/contrib/webviewPanel/browser/webviewWorkbenchService.js +11 -7
  2372. package/vscode/src/vs/workbench/contrib/welcomeAgentSessions/browser/agentSessionsWelcomeInput.js +1 -1
  2373. package/vscode/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedInput.js +1 -1
  2374. package/vscode/src/vs/workbench/contrib/welcomeOnboarding/common/onboardingTypes.d.ts +0 -30
  2375. package/vscode/src/vs/workbench/contrib/welcomeOnboarding/common/onboardingTypes.js +13 -46
  2376. package/vscode/src/vs/workbench/contrib/workspace/common/workspace.js +2 -2
  2377. package/vscode/src/vs/workbench/services/accounts/browser/defaultAccount.d.ts +5 -4
  2378. package/vscode/src/vs/workbench/services/accounts/browser/defaultAccount.js +161 -102
  2379. package/vscode/src/vs/workbench/services/accounts/browser/managedSettings.d.ts +3 -0
  2380. package/vscode/src/vs/workbench/services/accounts/common/githubEnterprise.d.ts +29 -0
  2381. package/vscode/src/vs/workbench/services/accounts/common/githubEnterprise.js +109 -0
  2382. package/vscode/src/vs/workbench/services/agentHost/browser/agentSdkSetupService.service.d.ts +1 -1
  2383. package/vscode/src/vs/workbench/services/agentHost/browser/codexAccountService.d.ts +6 -0
  2384. package/vscode/src/vs/workbench/services/agentHost/browser/codexAccountService.js +49 -15
  2385. package/vscode/src/vs/workbench/services/agentHost/browser/codexContinuationService.service.d.ts +35 -0
  2386. package/vscode/src/vs/workbench/services/agentHost/browser/codexContinuationService.service.js +6 -0
  2387. package/vscode/src/vs/workbench/services/agentHost/common/agentHostFileSearchProvider.d.ts +14 -0
  2388. package/vscode/src/vs/workbench/services/agentHost/common/agentHostFileSearchProvider.js +172 -0
  2389. package/vscode/src/vs/workbench/services/agentHost/common/agentHostFileSystemService.d.ts +18 -0
  2390. package/vscode/src/vs/workbench/services/agentHost/common/agentHostFileSystemService.js +46 -0
  2391. package/vscode/src/vs/workbench/services/assignment/common/assignmentService.service.d.ts +3 -1
  2392. package/vscode/src/vs/workbench/services/authentication/browser/authenticationMcpService.service.d.ts +2 -2
  2393. package/vscode/src/vs/workbench/services/authentication/browser/authenticationService.js +11 -11
  2394. package/vscode/src/vs/workbench/services/authentication/common/authentication.d.ts +18 -65
  2395. package/vscode/src/vs/workbench/services/authentication/common/authentication.js +22 -1
  2396. package/vscode/src/vs/workbench/services/authentication/common/authentication.service.d.ts +5 -5
  2397. package/vscode/src/vs/workbench/services/auxiliaryWindow/browser/auxiliaryWindowService.js +5 -5
  2398. package/vscode/src/vs/workbench/services/banner/browser/bannerService.d.ts +3 -0
  2399. package/vscode/src/vs/workbench/services/chat/common/chatEntitlementService.d.ts +4 -0
  2400. package/vscode/src/vs/workbench/services/chat/common/chatEntitlementService.js +32 -28
  2401. package/vscode/src/vs/workbench/services/configuration/common/experimentalSettings.service.d.ts +12 -0
  2402. package/vscode/src/vs/workbench/services/configuration/common/experimentalSettings.service.js +6 -0
  2403. package/vscode/src/vs/workbench/services/configuration/common/managedSettingsPresentation.service.d.ts +9 -0
  2404. package/vscode/src/vs/workbench/services/configuration/common/managedSettingsPresentation.service.js +6 -0
  2405. package/vscode/src/vs/workbench/services/configurationResolver/common/configurationResolverExpression.d.ts +2 -11
  2406. package/vscode/src/vs/workbench/services/configurationResolver/common/configurationResolverExpression.js +2 -44
  2407. package/vscode/src/vs/workbench/services/configurationResolver/common/configurationResolverSchema.js +16 -16
  2408. package/vscode/src/vs/workbench/services/configurationResolver/common/configurationResolverUtils.js +1 -1
  2409. package/vscode/src/vs/workbench/services/configurationResolver/common/variableResolver.js +16 -16
  2410. package/vscode/src/vs/workbench/services/dataChannel/browser/dataChannelService.js +11 -11
  2411. package/vscode/src/vs/workbench/services/decorations/common/decorations.d.ts +5 -0
  2412. package/vscode/src/vs/workbench/services/decorations/common/decorations.js +2 -1
  2413. package/vscode/src/vs/workbench/services/editor/common/editorResolverService.d.ts +2 -4
  2414. package/vscode/src/vs/workbench/services/editor/common/editorResolverService.js +17 -8
  2415. package/vscode/src/vs/workbench/services/extensionManagement/common/extensionsIcons.js +3 -3
  2416. package/vscode/src/vs/workbench/services/extensionRecommendations/common/workspaceExtensionsConfig.js +7 -7
  2417. package/vscode/src/vs/workbench/services/extensions/browser/extensionUrlHandler.js +10 -10
  2418. package/vscode/src/vs/workbench/services/extensions/common/extensionManifestPropertiesService.d.ts +1 -1
  2419. package/vscode/src/vs/workbench/services/extensions/common/extensionManifestPropertiesService.js +6 -2
  2420. package/vscode/src/vs/workbench/services/extensions/common/extensionManifestPropertiesService.service.d.ts +1 -1
  2421. package/vscode/src/vs/workbench/services/extensions/common/extensionsRegistry.js +92 -92
  2422. package/vscode/src/vs/workbench/services/filesConfiguration/common/filesConfigurationService.js +19 -12
  2423. package/vscode/src/vs/workbench/services/github/common/githubService.service.d.ts +10 -0
  2424. package/vscode/src/vs/workbench/services/github/common/githubService.service.js +7 -0
  2425. package/vscode/src/vs/workbench/services/language/common/languageService.js +24 -24
  2426. package/vscode/src/vs/workbench/services/layout/browser/layoutService.d.ts +15 -6
  2427. package/vscode/src/vs/workbench/services/layout/browser/layoutService.js +26 -5
  2428. package/vscode/src/vs/workbench/services/log/common/logConstants.js +1 -1
  2429. package/vscode/src/vs/workbench/services/mcp/common/mcpWorkbenchManagementService.d.ts +12 -1
  2430. package/vscode/src/vs/workbench/services/mcp/common/mcpWorkbenchManagementService.js +108 -27
  2431. package/vscode/src/vs/workbench/services/mcp/common/mcpWorkbenchManagementService.service.d.ts +2 -2
  2432. package/vscode/src/vs/workbench/services/mcp/common/mcpWorkspaceInstallTargetService.service.d.ts +7 -0
  2433. package/vscode/src/vs/workbench/services/mcp/common/mcpWorkspaceInstallTargetService.service.js +6 -0
  2434. package/vscode/src/vs/workbench/services/outline/browser/outline.service.d.ts +1 -0
  2435. package/vscode/src/vs/workbench/services/path/common/pathService.d.ts +41 -0
  2436. package/vscode/src/vs/workbench/services/path/common/pathService.js +145 -0
  2437. package/vscode/src/vs/workbench/services/policies/common/accountPolicyService.d.ts +10 -3
  2438. package/vscode/src/vs/workbench/services/policies/common/accountPolicyService.js +11 -4
  2439. package/vscode/src/vs/workbench/services/policies/common/accountPolicyService.service.d.ts +2 -0
  2440. package/vscode/src/vs/workbench/services/policies/common/managedSettingsUpdate.d.ts +17 -0
  2441. package/vscode/src/vs/workbench/services/policies/common/managedSettingsUpdate.js +77 -0
  2442. package/vscode/src/vs/workbench/services/policies/common/managedSettingsUpdate.service.d.ts +8 -0
  2443. package/vscode/src/vs/workbench/services/policies/common/managedSettingsUpdate.service.js +6 -0
  2444. package/vscode/src/vs/workbench/services/preferences/browser/keybindingsEditorInput.js +2 -2
  2445. package/vscode/src/vs/workbench/services/preferences/browser/keybindingsEditorModel.js +7 -7
  2446. package/vscode/src/vs/workbench/services/preferences/common/preferences.d.ts +1 -0
  2447. package/vscode/src/vs/workbench/services/preferences/common/preferencesEditorInput.js +4 -4
  2448. package/vscode/src/vs/workbench/services/preferences/common/preferencesModels.js +6 -4
  2449. package/vscode/src/vs/workbench/services/preferences/common/preferencesValidation.js +30 -30
  2450. package/vscode/src/vs/workbench/services/remote/common/remoteExplorerService.js +8 -8
  2451. package/vscode/src/vs/workbench/services/remote/common/tunnelModel.js +6 -6
  2452. package/vscode/src/vs/workbench/services/search/common/queryBuilder.d.ts +1 -1
  2453. package/vscode/src/vs/workbench/services/search/common/queryBuilder.js +3 -2
  2454. package/vscode/src/vs/workbench/services/search/common/search.js +13 -2
  2455. package/vscode/src/vs/workbench/services/statusbar/browser/statusbar.d.ts +6 -3
  2456. package/vscode/src/vs/workbench/services/statusbar/browser/statusbar.js +5 -1
  2457. package/vscode/src/vs/workbench/services/storage/browser/storageService.d.ts +5 -0
  2458. package/vscode/src/vs/workbench/services/storage/browser/storageService.js +10 -1
  2459. package/vscode/src/vs/workbench/services/textMate/common/TMGrammars.js +9 -9
  2460. package/vscode/src/vs/workbench/services/textfile/common/encoding.js +36 -2
  2461. package/vscode/src/vs/workbench/services/textfile/common/textFileEditorModel.d.ts +1 -1
  2462. package/vscode/src/vs/workbench/services/textfile/common/textFileEditorModel.js +5 -4
  2463. package/vscode/src/vs/workbench/services/themes/browser/modernTabColorCustomizations.js +191 -54
  2464. package/vscode/src/vs/workbench/services/themes/common/colorExtensionPoint.js +18 -18
  2465. package/vscode/src/vs/workbench/services/themes/common/colorThemeData.d.ts +5 -1
  2466. package/vscode/src/vs/workbench/services/themes/common/colorThemeData.js +30 -9
  2467. package/vscode/src/vs/workbench/services/themes/common/iconExtensionPoint.js +13 -13
  2468. package/vscode/src/vs/workbench/services/themes/common/tokenClassificationExtensionPoint.js +24 -24
  2469. package/vscode/src/vs/workbench/services/themes/common/workbenchThemeService.service.d.ts +6 -1
  2470. package/vscode/src/vs/workbench/services/untitled/common/untitledTextEditorInput.d.ts +1 -1
  2471. package/vscode/src/vs/workbench/services/untitled/common/untitledTextEditorInput.js +2 -1
  2472. package/vscode/src/vs/workbench/services/userDataProfile/common/userDataProfile.js +3 -3
  2473. package/vscode/src/vs/workbench/services/userDataProfile/common/userDataProfileIcons.js +1 -1
  2474. package/vscode/src/vs/workbench/services/userDataSync/common/userDataSync.js +13 -13
  2475. package/vscode/src/vs/workbench/services/workingCopy/common/storedFileWorkingCopy.js +16 -16
  2476. package/vscode/src/vs/workbench/services/workspaces/common/workspaceTrust.d.ts +2 -0
  2477. package/vscode/src/vs/workbench/services/workspaces/common/workspaceTrust.js +27 -2
  2478. package/vscode-dts/vscode.d.ts +6 -3
  2479. package/vscode-dts/vscode.proposed.authIssuers.d.ts +11 -0
  2480. package/vscode-dts/vscode.proposed.chatParticipantAdditions.d.ts +11 -0
  2481. package/vscode-dts/vscode.proposed.chatParticipantPrivate.d.ts +4 -1
  2482. package/vscode-dts/vscode.proposed.chatProvider.d.ts +6 -0
  2483. package/vscode-dts/vscode.proposed.chatSessionsProvider.d.ts +2 -0
  2484. package/vscode-dts/vscode.proposed.customTextEditorNavigation.d.ts +47 -0
  2485. package/vscode-dts/vscode.proposed.d.ts +1 -0
  2486. package/vscode-dts/vscode.proposed.externalUriOpener.d.ts +6 -0
  2487. package/vscode-dts/vscode.proposed.languageModelCapabilities.d.ts +17 -0
  2488. package/vscode-dts/vscode.proposed.languageModelThinkingPart.d.ts +5 -0
  2489. package/vscode-dts/vscode.proposed.scmProviderOptions.d.ts +5 -0
  2490. package/vscode/src/vs/platform/agentHost/browser/webPubSubRelayTransport.d.ts +0 -106
  2491. package/vscode/src/vs/platform/agentHost/browser/webPubSubRelayTransport.js +0 -207
  2492. package/vscode/src/vs/platform/agentHost/common/agentHostOperatingSystem.d.ts +0 -6
  2493. package/vscode/src/vs/platform/agentHost/common/agentHostOperatingSystem.js +0 -32
  2494. package/vscode/src/vs/platform/agentHost/common/cloudSandboxAgentHost.d.ts +0 -230
  2495. package/vscode/src/vs/platform/agentHost/common/cloudSandboxAgentHost.js +0 -53
  2496. package/vscode/src/vs/platform/agentHost/common/githubEndpoints.d.ts +0 -52
  2497. package/vscode/src/vs/platform/agentHost/common/githubIssueReferences.d.ts +0 -8
  2498. package/vscode/src/vs/platform/agentHost/common/githubIssueReferences.js +0 -13
  2499. package/vscode/src/vs/platform/agentHost/common/meta/agentMessageDelegationMeta.js +0 -27
  2500. package/vscode/src/vs/platform/agentHost/common/meta/automationMeta.d.ts +0 -15
  2501. package/vscode/src/vs/platform/agentHost/common/meta/automationMeta.js +0 -17
  2502. package/vscode/src/vs/platform/agentHost/common/taskEventReplay.d.ts +0 -51
  2503. package/vscode/src/vs/platform/agentHost/common/taskEventReplay.js +0 -184
  2504. package/vscode/src/vs/platform/agentHost/common/webPubSub/chunking.d.ts +0 -100
  2505. package/vscode/src/vs/platform/agentHost/common/webPubSub/chunking.js +0 -256
  2506. package/vscode/src/vs/platform/agentHost/common/webPubSub/framing.d.ts +0 -86
  2507. package/vscode/src/vs/platform/agentHost/common/webPubSub/framing.js +0 -64
  2508. package/vscode/src/vs/platform/agentHost/common/webPubSub/groups.d.ts +0 -46
  2509. package/vscode/src/vs/platform/agentHost/common/webPubSub/groups.js +0 -92
  2510. package/vscode/src/vs/platform/sandbox/common/terminalSandboxMxcRuntime.service.d.ts +0 -13
  2511. package/vscode/src/vs/platform/sandbox/common/terminalSandboxMxcRuntime.service.js +0 -6
  2512. package/vscode/src/vs/sessions/contrib/automations/browser/automationService.d.ts +0 -53
  2513. package/vscode/src/vs/sessions/contrib/automations/browser/automationService.js +0 -893
  2514. package/vscode/src/vs/sessions/contrib/automations/common/automationStorageService.d.ts +0 -6
  2515. package/vscode/src/vs/sessions/contrib/automations/common/automationStorageService.js +0 -8
  2516. package/vscode/src/vs/sessions/contrib/automations/common/automationStorageService.service.d.ts +0 -10
  2517. package/vscode/src/vs/sessions/contrib/automations/common/automationStorageService.service.js +0 -6
  2518. package/vscode/src/vs/sessions/contrib/chat/browser/newSession.d.ts +0 -9
  2519. package/vscode/src/vs/sessions/contrib/github/browser/media/issueHover.css +0 -59
  2520. package/vscode/src/vs/sessions/contrib/github/browser/media/pullRequestHover.css +0 -88
  2521. package/vscode/src/vs/sessions/contrib/providers/copilotChatSessions/browser/copilotChatSessionsChangesets.d.ts +0 -104
  2522. package/vscode/src/vs/sessions/contrib/providers/copilotChatSessions/browser/copilotChatSessionsChangesets.js +0 -301
  2523. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/cloudSandboxAgentHostContribution.d.ts +0 -166
  2524. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/cloudSandboxAgentHostContribution.js +0 -586
  2525. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/cloudSandboxAgentHostService.d.ts +0 -43
  2526. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/cloudSandboxAgentHostService.js +0 -264
  2527. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/cloudSandboxApiService.d.ts +0 -114
  2528. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/cloudSandboxApiService.js +0 -593
  2529. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/cloudSandboxConnectionCustomization.d.ts +0 -15
  2530. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/cloudSandboxConnectionCustomization.js +0 -47
  2531. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/cloudSandboxCredentialRefresh.d.ts +0 -71
  2532. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/cloudSandboxCredentialRefresh.js +0 -147
  2533. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/cloudSandboxReadOnlySessionHandler.d.ts +0 -45
  2534. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/cloudSandboxReadOnlySessionHandler.js +0 -109
  2535. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/cloudSandboxSessionsProvider.d.ts +0 -49
  2536. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/cloudSandboxSessionsProvider.js +0 -69
  2537. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/cloudSandboxTelemetry.d.ts +0 -43
  2538. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/cloudSandboxTelemetry.js +0 -91
  2539. package/vscode/src/vs/sessions/contrib/sessions/browser/automationsNewBadge.d.ts +0 -42
  2540. package/vscode/src/vs/sessions/contrib/sessions/browser/automationsNewBadge.js +0 -196
  2541. package/vscode/src/vs/sessions/contrib/sessions/browser/sessionsLifecycleTracker.d.ts +0 -191
  2542. package/vscode/src/vs/sessions/contrib/sessions/browser/sessionsLifecycleTracker.js +0 -514
  2543. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/embeddedExtensionToolsDetail.d.ts +0 -42
  2544. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/embeddedExtensionToolsDetail.js +0 -130
  2545. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/galleryItemRenderer.d.ts +0 -46
  2546. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/galleryItemRenderer.js +0 -91
  2547. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPicker/modelPickerAutoRow.d.ts +0 -30
  2548. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPicker/modelPickerAutoRow.js +0 -140
  2549. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPicker/modelPickerItemSections.d.ts +0 -11
  2550. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPicker/modelPickerItemSections.js +0 -580
  2551. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPicker/modelPickerItemTypes.d.ts +0 -38
  2552. package/vscode/src/vs/workbench/contrib/chat/common/automations/schedule.d.ts +0 -9
  2553. package/vscode/src/vs/workbench/contrib/chat/common/automations/schedule.js +0 -83
  2554. package/vscode/src/vs/workbench/services/path/common/pathService.service.d.ts +0 -61
  2555. package/vscode/src/vs/workbench/services/path/common/pathService.service.js +0 -6
  2556. /package/vscode/src/vs/platform/agentHost/common/meta/{agentDevContainerWorktreeMeta.js → vscode/agentDevContainerWorktreeMeta.js} +0 -0
  2557. /package/vscode/src/vs/platform/agentHost/common/meta/{agentElementAttachments.js → vscode/agentElementAttachments.js} +0 -0
  2558. /package/vscode/src/vs/platform/agentHost/common/meta/{agentHostArtifactRemovalMeta.js → vscode/agentHostArtifactRemovalMeta.js} +0 -0
  2559. /package/vscode/src/vs/platform/agentHost/common/meta/{agentMergeMessageMeta.js → vscode/agentMergeMessageMeta.js} +0 -0
  2560. /package/vscode/src/vs/platform/agentHost/common/meta/{agentWorkspaceContinuationMeta.js → vscode/agentWorkspaceContinuationMeta.js} +0 -0
  2561. /package/vscode/src/vs/{sessions/contrib/providers/remoteAgentHost/browser → workbench/contrib/chat/browser/remoteAgentHost}/cloudSandboxTelemetry.service.js +0 -0
  2562. /package/vscode/src/vs/{sessions/contrib/providers/remoteAgentHost/browser → workbench/contrib/chat/browser/remoteAgentHost}/remoteAgentHostConnectionCustomization.service.js +0 -0
@@ -2,7 +2,8 @@
2
2
  import { registerCss } from '../../../../../../../../css.js';
3
3
  import { __decorate, __param } from '../../../../../../../../external/tslib/tslib.es6.js';
4
4
  import * as sessionsList from '../media/sessionsList.css';
5
- import { $ as $$1, append, addDisposableListener, EventType, clearNode, getWindow, addStandardDisposableListener, isAncestorOfActiveElement, isMouseEvent, scheduleAtNextAnimationFrame } from '../../../../../base/browser/dom.js';
5
+ import { $ as $$1, append, addDisposableListener, clearNode, getWindow, EventType, isActiveElement, addStandardDisposableListener, scheduleAtNextAnimationFrame, isAncestorOfActiveElement, isMouseEvent } from '../../../../../base/browser/dom.js';
6
+ import { renderAsPlaintext } from '../../../../../base/browser/markdownRenderer.js';
6
7
  import { synchronizeCSSAnimations, pauseCSSAnimationsWhenHidden } from '../../../../../base/browser/animationSync.js';
7
8
  import { Gesture } from '../../../../../base/browser/touch.js';
8
9
  import { ListDragOverEffectPosition, ListDragOverEffectType, NotSelectableGroupId } from '../../../../../base/browser/ui/list/list.js';
@@ -10,115 +11,144 @@ import { ObjectTreeElementCollapseState } from '../../../../../base/browser/ui/t
10
11
  import { RenderIndentGuides, TreeFindMode } from '../../../../../base/browser/ui/tree/abstractTree.js';
11
12
  import { Codicon } from '../../../../../base/common/codicons.js';
12
13
  import { onUnexpectedError } from '../../../../../base/common/errors.js';
13
- import { Emitter } from '../../../../../base/common/event.js';
14
+ import { Emitter, Event } from '../../../../../base/common/event.js';
14
15
  import { HighlightedLabel } from '../../../../../base/browser/ui/highlightedlabel/highlightedLabel.js';
15
16
  import { createMatches } from '../../../../../base/common/filters.js';
16
17
  import { DisposableStore, toDisposable, MutableDisposable, Disposable } from '../../../../../base/common/lifecycle.js';
17
18
  import { MarkdownString } from '../../../../../base/common/htmlContent.js';
18
19
  import '../../../../../base/common/observableInternal/index.js';
19
- import { ThemeIcon } from '../../../../../base/common/themables.js';
20
+ import { ThemeIcon, themeColorFromId } from '../../../../../base/common/themables.js';
21
+ import { hasKey } from '../../../../../base/common/types.js';
20
22
  import { fromNow } from '../../../../../base/common/date.js';
21
23
  import { KeyCode } from '../../../../../base/common/keyCodes.js';
24
+ import { OS } from '../../../../../base/common/platform.js';
22
25
  import { isEqual } from '../../../../../base/common/resources.js';
23
26
  import { localize } from '../../../../../nls.js';
24
- import { MenuId, MenuItemAction } from '../../../../../platform/actions/common/actions.js';
27
+ import { MenuId, MenuItemAction, SubmenuItemAction } from '../../../../../platform/actions/common/actions.js';
25
28
  import { IMenuService } from '../../../../../platform/actions/common/actions.service.js';
26
29
  import { MenuWorkbenchToolBar } from '../../../../../platform/actions/browser/toolbar.js';
27
30
  import { DropdownWithPrimaryActionViewItem } from '../../../../../platform/actions/browser/dropdownWithPrimaryActionViewItem.js';
28
- import { MenuEntryActionViewItem, getFlatContextMenuActions } from '../../../../../platform/actions/browser/menuEntryActionViewItem.js';
31
+ import { createActionViewItem, getFlatContextMenuActions } from '../../../../../platform/actions/browser/menuEntryActionViewItem.js';
29
32
  import { ICommandService } from '../../../../../platform/commands/common/commands.service.js';
30
33
  import { RawContextKey } from '../../../../../platform/contextkey/common/contextkey.js';
31
34
  import { IContextKeyService } from '../../../../../platform/contextkey/common/contextkey.service.js';
32
35
  import { MarshalledId } from '../../../../../base/common/marshallingIds.js';
33
- import { SessionIsReadContext, SessionIsArchivedContext, SessionSupportsDeleteContext, IsPhoneLayoutContext, SessionTypeContext, SessionProviderIdContext, SessionSupportsRenameContext, SessionHasPullRequestContext } from '../../../../common/contextkeys.js';
34
- import { ARCHIVE_SESSION_COMMAND_ID, RENAME_SESSION_COMMAND_ID } from '../../../../common/sessionCommands.js';
35
- import { IContextMenuService } from '../../../../../platform/contextview/browser/contextView.service.js';
36
+ import { SessionIsReadContext, SessionIsArchivedContext, IsQuickChatSessionContext, SessionSupportsMultipleChatsContext, SessionSupportsDeleteContext, IsPhoneLayoutContext, SessionItemIsMultiSelectionContext, SessionTypeContext, SessionProviderIdContext, SessionSupportsRenameContext, SessionHasPullRequestContext } from '../../../../common/contextkeys.js';
37
+ import { ARCHIVE_SESSION_COMMAND_ID, RENAME_SESSION_COMMAND_ID, RENAME_CHAT_COMMAND_ID } from '../../../../common/sessionCommands.js';
38
+ import { ExternalSessionApplicationBadgeMode, SESSIONS_LIST_GROUP_EXTERNAL_SESSIONS_SETTING, SESSIONS_LIST_EXTERNAL_APPLICATION_BADGE_SETTING, SESSIONS_LIST_EXTERNAL_APPLICATION_BADGE_SHOW_FROM_SETTING } from '../../../../common/sessionConfig.js';
39
+ import { IContextMenuService, IContextViewService } from '../../../../../platform/contextview/browser/contextView.service.js';
36
40
  import { IInstantiationService } from '../../../../../platform/instantiation/common/instantiation.js';
37
41
  import { IKeybindingService } from '../../../../../platform/keybinding/common/keybinding.service.js';
38
42
  import { ServiceCollection } from '../../../../../platform/instantiation/common/serviceCollection.js';
39
- import { WorkbenchObjectTree } from '../../../../../platform/list/browser/listService.js';
40
- import { defaultButtonStyles, defaultInputBoxStyles, defaultToggleStyles, defaultFindWidgetStyles } from '../../../../../platform/theme/browser/defaultStyles.js';
41
- import { asCssVariable } from '../../../../../platform/theme/common/colorUtils.js';
43
+ import { WorkbenchList, WorkbenchObjectTree } from '../../../../../platform/list/browser/listService.js';
44
+ import { defaultButtonStyles, defaultInputBoxStyles, defaultKeybindingLabelStyles, defaultToggleStyles, defaultFindWidgetStyles } from '../../../../../platform/theme/browser/defaultStyles.js';
42
45
  import { chartsOrange } from '../../../../../platform/theme/common/colors/chartsColors.js';
46
+ import { asCssVariable } from '../../../../../platform/theme/common/colorUtils.js';
43
47
  import { StorageScope, StorageTarget } from '../../../../../platform/storage/common/storage.js';
44
48
  import { IStorageService } from '../../../../../platform/storage/common/storage.service.js';
49
+ import { isConfigured } from '../../../../../platform/configuration/common/configuration.js';
45
50
  import { IConfigurationService } from '../../../../../platform/configuration/common/configuration.service.js';
51
+ import { observableConfigValue } from '../../../../../platform/observable/common/platformObservableUtils.js';
52
+ import { ITelemetryService } from '../../../../../platform/telemetry/common/telemetry.service.js';
53
+ import { logSettingExperimentTrigger } from '../../../../../platform/telemetry/common/experimentTrigger.js';
54
+ import { IAccessibilityService } from '../../../../../platform/accessibility/common/accessibility.service.js';
46
55
  import { IUriIdentityService } from '../../../../../platform/uriIdentity/common/uriIdentity.service.js';
47
56
  import { IOpenerService } from '../../../../../platform/opener/common/opener.service.js';
48
57
  import { ILabelService } from '../../../../../platform/label/common/label.service.js';
49
58
  import { ChatSessionArchiveActionWordingSettingId, getChatSessionArchivedSectionLabel, getChatSessionArchiveActionWording, ChatSessionArchiveActionWording } from '../../../../../platform/chat/common/sessionArchiveActions.js';
50
- import { SessionStatus, ChatOriginKind, ChatInteractivity, getGitHubPullRequestRefs, getSessionWorkspaceKind, SessionWorkspaceKind, getSessionStatusMessage, GITHUB_REMOTE_FILE_SCHEME, getChatCapabilities } from '../../../../services/sessions/common/session.js';
59
+ import { SessionStatus, getUntitledSessionTitle, ChatOriginKind, ChatInteractivity, BRANCH_CHANGES_CHANGESET_ID, isActiveSessionStatus, getGitHubPullRequestRefs, getChatCapabilities, getSessionStatusMessage, getSessionWorkspaceKind, SessionWorkspaceKind, GITHUB_REMOTE_FILE_SCHEME } from '../../../../services/sessions/common/session.js';
60
+ import { readChatChangesStats } from '../../../../services/sessions/common/sessionChangesStatsCache.js';
51
61
  import { agentSessionApprovalId, AgentSessionApprovalModel } from '../../../../../workbench/contrib/chat/browser/agentSessions/agentSessionApprovalModel.js';
52
62
  import { IVoicePlaybackService } from '../../../../../workbench/contrib/chat/common/voicePlaybackService.service.js';
53
63
  import { Button } from '../../../../../base/browser/ui/button/button.js';
54
64
  import { IMarkdownRendererService } from '../../../../../platform/markdown/browser/markdownRenderer.service.js';
55
65
  import { ActionRunner, Action, toAction, Separator, SubmenuAction } from '../../../../../base/common/actions.js';
56
66
  import { IHoverService } from '../../../../../platform/hover/browser/hover.service.js';
57
- import { createSessionActionViewItemProvider, getSessionArchiveActionViewItemOptions } from '../../../../browser/sessionActionViewItem.js';
67
+ import { createSessionActionViewItemProvider, SessionArchiveActionViewItem, getSessionArchiveActionViewItemOptions } from '../../../../browser/sessionActionViewItem.js';
58
68
  import { HoverStyle } from '../../../../../base/browser/ui/hover/hover.js';
59
69
  import { HoverPosition } from '../../../../../base/browser/ui/hover/hoverWidget.js';
60
70
  import { getDefaultHoverDelegate } from '../../../../../base/browser/ui/hover/hoverDelegateFactory.js';
61
71
  import { ISessionsManagementService } from '../../../../services/sessions/common/sessionsManagement.service.js';
72
+ import { SessionComparisonParticipantRole, getSessionComparisonHarnessLabel, getSessionComparisonParticipantsInDisplayOrder } from '../../../../services/sessions/common/sessionComparison.js';
73
+ import { ISessionComparisonService } from '../../../../services/sessions/common/sessionComparison.service.js';
62
74
  import { ISessionsService } from '../../../../services/sessions/browser/sessionsService.service.js';
63
75
  import { ISessionsListModelService } from '../../../../services/sessions/browser/sessionsListModelService.service.js';
64
76
  import { ISessionGroupsService } from '../../../../services/sessions/browser/sessionGroupsService.service.js';
65
77
  import { ISessionSectionOrderService } from '../../../../services/sessions/browser/sessionSectionOrderService.service.js';
66
- import { InputBox } from '../../../../../base/browser/ui/inputbox/inputBox.js';
78
+ import { InputBox, MessageType } from '../../../../../base/browser/ui/inputbox/inputBox.js';
67
79
  import { IWorkbenchAssignmentService } from '../../../../../workbench/services/assignment/common/assignmentService.service.js';
68
80
  import { IPreferencesService } from '../../../../../workbench/services/preferences/common/preferences.service.js';
69
81
  import { markOnboardingTarget } from '../../../../../workbench/contrib/onboarding/browser/spotlight/onboardingTarget.js';
82
+ import { OPEN_SESSION_COMPARISON_COMMAND_ID } from '../../../sessionComparison/common/sessionComparison.js';
70
83
  import { IAgentSessionsService } from '../../../../../workbench/contrib/chat/browser/agentSessions/agentSessionsService.service.js';
71
84
  import { IAgentHostFilterService } from '../../../../services/agentHostFilter/common/agentHostFilter.service.js';
85
+ import { SessionsListFilters } from './sessionsListFilters.js';
72
86
  import { IAgentHostConnectionsService } from '../../../../../platform/agentHost/common/agentHostConnectionsService.service.js';
73
87
  import { buildOpenSessionLinkUri } from '../../../../../platform/agentHost/common/openSessionLink.js';
74
88
  import { LocalSelectionTransfer } from '../../../../../platform/dnd/browser/dnd.js';
75
89
  import { fillSessionChatDragData, DraggedSessionIdentifier, SessionsDataTransfers } from '../../../../browser/dnd.js';
76
90
  import { ElementsDragAndDropData, ListViewTargetSector } from '../../../../../base/browser/ui/list/listView.js';
77
91
  import { ISessionsProvidersService } from '../../../../services/sessions/browser/sessionsProvidersService.service.js';
78
- import { getSessionSummaryHoverData, getSessionDiffStats } from '../sessionHoverContent.js';
79
- import { SessionSummaryHoverWidget } from '../../../../../workbench/contrib/chat/browser/agentSessions/sessionSummaryHover.js';
92
+ import { getSessionDiffStats, createSessionSummaryHover, getSessionSummaryHoverData, getChatSummaryHoverData } from '../sessionHoverContent.js';
80
93
  import { SessionStatusIcon } from '../../../../browser/sessionStatusIcon.js';
81
94
  import { ChatAutomationsEnabledContext } from '../../../../../workbench/contrib/chat/common/automations/automationsEnabled.js';
95
+ import { AICustomizationManagementEditorInput } from '../../../../../workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementEditorInput.js';
82
96
  import { IAutomationService } from '../../../../../workbench/contrib/chat/common/automations/automationService.service.js';
97
+ import { IEditorService } from '../../../../../workbench/services/editor/common/editorService.service.js';
83
98
  import { ICustomViewService } from '../../../../services/customView/browser/customViewService.service.js';
84
99
  import { AUTOMATIONS_CUSTOM_VIEW_ID } from '../automationsConstants.js';
85
- import { AutomationsNewBadgeState } from '../automationsNewBadge.js';
100
+ import { OPEN_AI_CUSTOMIZATIONS_COMMAND_ID } from '../customizationsConstants.js';
101
+ import { NEW_SESSION_ACTION_ID } from '../../../chat/common/constants.js';
86
102
  import { Menus } from '../../../../browser/menus.js';
87
103
  import { getSessionConversationStatusAriaLabel } from '../../../../browser/sessionConversationGroups.js';
88
104
  import { isAgentMergePullRequestIcon, getSessionAgentMergeConfigurationObservable, getAgentMergeAwarePullRequestIcon } from '../../../../browser/sessionAgentMerge.js';
105
+ import { BlockedSessions, BlockedSessionReason } from '../../../blockedSessions/browser/blockedSessions.js';
106
+ import { KeybindingLabel } from '../../../../../base/browser/ui/keybindingLabel/keybindingLabel.js';
107
+ import { logSessionsInteraction } from '../../../../common/sessionsTelemetry.js';
89
108
  import { observableValue } from '../../../../../base/common/observableInternal/observables/observableValue.js';
90
- import { derived } from '../../../../../base/common/observableInternal/observables/derived.js';
109
+ import { constObservable } from '../../../../../base/common/observableInternal/observables/constObservable.js';
91
110
  import { autorun } from '../../../../../base/common/observableInternal/reactions/autorun.js';
92
- import { observableSignalFromEvent } from '../../../../../base/common/observableInternal/observables/observableSignalFromEvent.js';
93
111
  import { getHighestPriorityPullRequestIcon } from '../../../../../workbench/common/chatPullRequest.js';
94
- import { constObservable } from '../../../../../base/common/observableInternal/observables/constObservable.js';
112
+ import { derived } from '../../../../../base/common/observableInternal/observables/derived.js';
113
+ import { observableFromEvent } from '../../../../../base/common/observableInternal/observables/observableFromEvent.js';
114
+ import { observableSignalFromEvent } from '../../../../../base/common/observableInternal/observables/observableSignalFromEvent.js';
95
115
 
96
116
  var SessionsList_1, SessionsFlatList_1;
97
117
  registerCss(sessionsList, 1);
98
118
  const $ = $$1;
119
+ const NEW_SESSION_SECTION_ID = "newSession";
99
120
  const AUTOMATIONS_SECTION_ID = "automations";
121
+ const CUSTOMIZATIONS_SECTION_ID = "customizations";
122
+ const EXTERNAL_SESSIONS_SECTION_ID = "external";
123
+ const SESSION_SHORTCUT_SECTION_TEMPLATE_ID = "session-shortcut-section";
124
+ const SESSION_SHORTCUT_ROW_HEIGHT = 28;
100
125
  const SESSION_SECTION_FOCUS_FROM_POINTER_CLASS = "session-section-focus-from-pointer";
101
126
  const SESSION_HEADER_DROP_TARGET_CLASS = "session-header-drop-target";
102
127
  const EMPTY_GUIDE_SESSION_IDS = ( new Set());
103
- const SessionItemToolbarMenuId = ( new MenuId("SessionItemToolbar"));
104
128
  const SessionItemContextMenuId = MenuId.SessionItemContextMenu;
105
129
  const SessionSectionToolbarMenuId = ( new MenuId("SessionSectionToolbar"));
106
130
  const SessionGroupToolbarMenuId = ( new MenuId("SessionGroupToolbar"));
107
131
  const NEW_SESSION_FOR_WORKSPACE_ACTION_ID = "sessionsView.sectionNewSession";
108
132
  const SESSIONS_LIST_SHOW_EMPTY_DEFAULT_GROUPS_SETTING = "sessions.list.showEmptyDefaultGroups";
133
+ const SESSIONS_LIST_SHOW_UNREAD_IN_COLLAPSED_SECTIONS_SETTING = "sessions.list.showUnreadInCollapsedSections";
134
+ const SESSIONS_LIST_SHOW_ARCHIVED_BY_DEFAULT_SETTING = "sessions.list.showArchivedByDefault";
109
135
  const IsSessionPinnedContext = new RawContextKey("sessionItem.isPinned", false);
110
- const SessionItemHasBranchNameContext = new RawContextKey("sessionItem.hasBranchName", false);
111
136
  const SessionItemStatusContext = new RawContextKey("sessionItem.status", SessionStatus.Completed);
112
137
  const SessionChatItemCanRenameContext = new RawContextKey("sessionChatItem.canRename", false);
138
+ const SessionChatItemCanArchiveContext = new RawContextKey("sessionChatItem.canArchive", false);
113
139
  const SessionChatItemCanDeleteContext = new RawContextKey("sessionChatItem.canDelete", false);
140
+ const SessionChatItemIsArchivedContext = new RawContextKey("sessionChatItem.isArchived", false);
114
141
  const SessionChatItemIsUntitledContext = new RawContextKey("sessionChatItem.isUntitled", false);
115
142
  const SessionsListFocusedChatItemContext = new RawContextKey("sessionsList.focusedChatItem", false);
116
143
  const SessionItemInGroupContext = new RawContextKey("sessionItem.inGroup", false);
144
+ const SessionItemInExternalSectionContext = new RawContextKey("sessionItem.inExternalSection", false);
145
+ const SessionItemCanImportContext = new RawContextKey("sessionItem.canImport", false);
117
146
  const SessionSectionTypeContext = new RawContextKey("sessionSection.type", "");
118
147
  const SessionSectionHasGitHubRepositoryContext = new RawContextKey("sessionSection.hasGitHubRepository", false);
119
148
  const SessionSectionHasNonCloudRepositoryContext = new RawContextKey("sessionSection.hasNonCloudRepository", false);
120
149
  const SessionGroupHasVisibleSessionsContext = new RawContextKey("sessionGroup.hasVisibleSessions", false);
121
150
  const SessionGroupIsEmptyContext = new RawContextKey("sessionGroup.isEmpty", false);
151
+ const SessionGroupIsComparisonContext = new RawContextKey("sessionGroup.isComparison", false);
122
152
  var SessionsGrouping;
123
153
  (function(SessionsGrouping) {
124
154
  SessionsGrouping["Workspace"] = "workspace";
@@ -134,32 +164,105 @@ function sortingToMode(sorting) {
134
164
  }
135
165
  const SORT_FALLBACK_STEP_MS = 60_000;
136
166
  class SessionChatItem {
137
- constructor(session, chat) {
167
+ constructor(session, chat, isLast) {
138
168
  this.session = session;
139
169
  this.chat = chat;
170
+ this.isLast = isLast;
140
171
  }
141
172
  }
142
173
  function isSessionChatItem(item) {
143
174
  return item instanceof SessionChatItem;
144
175
  }
145
176
  function getChatTitle(chat, reader) {
146
- return chat.title.read(reader).trim() || ( localize(4898, "Untitled Chat"));
177
+ if (chat.status.read(reader) === SessionStatus.Untitled) {
178
+ return getUntitledSessionTitle(false);
179
+ }
180
+ return chat.title.read(reader).trim() || ( localize(6110, "Untitled Chat"));
181
+ }
182
+ function formatSessionListTime(date) {
183
+ const seconds = Math.round((Date.now() - date.getTime()) / 1000);
184
+ return seconds < 60 ? ( localize(6111, "now")) : fromNow(date, true);
147
185
  }
148
- function getSessionListChats(session, reader) {
186
+ function getSessionListChats(session, reader, showArchived = false) {
149
187
  const mainChat = session.mainChat.read(reader);
150
188
  return session.chats.read(reader).filter(
151
- chat => !isEqual(chat.resource, mainChat.resource) && chat.origin?.kind !== ChatOriginKind.Tool && chat.origin?.kind !== ChatOriginKind.SideChat && chat.interactivity.read(reader) !== ChatInteractivity.Hidden
189
+ chat => !isEqual(chat.resource, mainChat.resource) && chat.origin?.kind !== ChatOriginKind.Tool && chat.origin?.kind !== ChatOriginKind.SideChat && (!chat.isArchived.read(reader) || showArchived) && chat.interactivity.read(reader) !== ChatInteractivity.Hidden
152
190
  );
153
191
  }
154
- function getSessionRowStatus(session, reader, deriveFromMainChat) {
192
+ function hasArchivedListContent(session) {
193
+ return session.isArchived.get() || ( getSessionListChats(session, undefined, true).some(chat => chat.isArchived.get()));
194
+ }
195
+ function getSessionListChatDiffStats(session, chat, activeSession, reader) {
196
+ const active = activeSession?.read(reader);
197
+ if (active?.sessionId === session.sessionId && isEqual(active.activeChat.read(reader).resource, chat.resource)) {
198
+ const chatStats = readChatChangesStats(chat, reader, BRANCH_CHANGES_CHANGESET_ID);
199
+ if (chatStats !== undefined) {
200
+ return chatStats.insertions > 0 || chatStats.deletions > 0 ? chatStats : undefined;
201
+ }
202
+ }
203
+ return getSessionDiffStats(session, reader);
204
+ }
205
+ function getChatListDiffStats(chat, reader) {
206
+ const summary = chat.changesSummary?.read(reader);
207
+ return summary && (summary.additions > 0 || summary.deletions > 0) ? {
208
+ files: summary.files,
209
+ insertions: summary.additions,
210
+ deletions: summary.deletions
211
+ } : undefined;
212
+ }
213
+ function getSessionRowStatus(session, reader, deriveFromMainChat, collapsed = true) {
155
214
  const sessionStatus = session.status.read(reader);
156
215
  if (!deriveFromMainChat) {
157
216
  return sessionStatus;
158
217
  }
159
- if (( session.chats.read(reader).some(chat => chat.status.read(reader) === SessionStatus.InProgress))) {
160
- return SessionStatus.InProgress;
218
+ let rowStatus = session.mainChat.read(reader).status.read(reader);
219
+ if (rowStatus === SessionStatus.NeedsInput) {
220
+ return rowStatus;
221
+ }
222
+ const chats = session.chats.read(reader);
223
+ let excludedSideChatInProgress = false;
224
+ for (const chat of chats) {
225
+ if (chat.origin?.kind !== ChatOriginKind.SideChat) {
226
+ continue;
227
+ }
228
+ if (chat.isArchived.read(reader) || chat.interactivity.read(reader) === ChatInteractivity.Hidden) {
229
+ excludedSideChatInProgress ||= collapsed && sessionStatus === SessionStatus.InProgress && chat.status.read(reader) === SessionStatus.InProgress;
230
+ continue;
231
+ }
232
+ const status = chat.status.read(reader);
233
+ if (status === SessionStatus.NeedsInput) {
234
+ return status;
235
+ }
236
+ if (status === SessionStatus.InProgress) {
237
+ rowStatus = status;
238
+ }
239
+ }
240
+ if (rowStatus === SessionStatus.InProgress) {
241
+ return rowStatus;
242
+ }
243
+ if (collapsed && sessionStatus === SessionStatus.InProgress) {
244
+ if (!excludedSideChatInProgress || ( chats.some(
245
+ chat => chat.origin?.kind !== ChatOriginKind.SideChat && chat.status.read(reader) === SessionStatus.InProgress
246
+ ))) {
247
+ return SessionStatus.InProgress;
248
+ }
161
249
  }
162
- return session.mainChat.read(reader).status.read(reader);
250
+ return rowStatus;
251
+ }
252
+ function getSessionRowIsRead(session, reader, deriveFromMainChat) {
253
+ return deriveFromMainChat ? session.mainChat.read(reader).isRead.read(reader) : session.isRead.read(reader);
254
+ }
255
+ function isSessionActive(session, reader) {
256
+ return isActiveSessionStatus(session.status.read(reader));
257
+ }
258
+ function getComparisonSessions(comparison, sessionsManagementService) {
259
+ return comparison.participants.flatMap(participant => {
260
+ if (!participant.sessionResource) {
261
+ return [];
262
+ }
263
+ const session = sessionsManagementService.getSession(participant.sessionResource);
264
+ return session ? [session] : [];
265
+ });
163
266
  }
164
267
  function isSessionGroupItem(item) {
165
268
  return "group" in item;
@@ -169,12 +272,18 @@ function isSessionSection(item) {
169
272
  }
170
273
  function getSessionSectionIcon(sectionId) {
171
274
  switch (sectionId) {
275
+ case NEW_SESSION_SECTION_ID:
276
+ return Codicon.plus;
172
277
  case QUICK_CHATS_SECTION_ID:
173
278
  return Codicon.commentDiscussion;
174
279
  case "pinned":
175
280
  return Codicon.pinned;
281
+ case EXTERNAL_SESSIONS_SECTION_ID:
282
+ return Codicon.chatImport;
176
283
  case AUTOMATIONS_SECTION_ID:
177
284
  return Codicon.calendar;
285
+ case CUSTOMIZATIONS_SECTION_ID:
286
+ return Codicon.extensions;
178
287
  case "archived":
179
288
  return Codicon.archive;
180
289
  case "recent":
@@ -185,6 +294,9 @@ function getSessionSectionIcon(sectionId) {
185
294
  return sectionId.startsWith("workspace:") ? Codicon.folder : undefined;
186
295
  }
187
296
  }
297
+ function isShortcutSection(sectionId) {
298
+ return sectionId === NEW_SESSION_SECTION_ID || sectionId === AUTOMATIONS_SECTION_ID || sectionId === CUSTOMIZATIONS_SECTION_ID;
299
+ }
188
300
  function isSessionShowMore(item) {
189
301
  return "showMore" in item && item.showMore === true;
190
302
  }
@@ -203,16 +315,25 @@ class SessionsTreeDelegate {
203
315
  this.ITEM_HEIGHT = 54;
204
316
  }
205
317
  static {
206
- this.ITEM_HEIGHT_QUICK_CHAT = 28;
318
+ this.ITEM_HEIGHT_COMPACT = 28;
207
319
  }
208
320
  static {
209
- this.CHAT_ITEM_HEIGHT = 28;
321
+ this.ITEM_HEIGHT_COMPARISON_ATTEMPT = 28;
322
+ }
323
+ static {
324
+ this.INPUT_NEEDED_ROW_HEIGHT = 32;
325
+ }
326
+ static {
327
+ this.ITEM_HEIGHT_QUICK_CHAT = 28;
210
328
  }
211
329
  static {
212
330
  this.CHAT_ITEM_HEIGHT_PHONE = 44;
213
331
  }
214
332
  static {
215
- this.CHAT_APPROVAL_BOTTOM_SLACK = 6;
333
+ this.CHAT_FOLDER_ROW_HEIGHT = 16;
334
+ }
335
+ static {
336
+ this.CHAT_APPROVAL_PHONE_BOTTOM_SLACK = 6;
216
337
  }
217
338
  static {
218
339
  this.ITEM_HEIGHT_PHONE = 76;
@@ -220,44 +341,52 @@ class SessionsTreeDelegate {
220
341
  static {
221
342
  this.SECTION_HEIGHT = 26;
222
343
  }
344
+ static {
345
+ this.COMPARISON_SECTION_HEIGHT = 44;
346
+ }
223
347
  static {
224
348
  this.SHOW_MORE_HEIGHT = 26;
225
349
  }
226
350
  static {
227
- this.PLACEHOLDER_HEIGHT = 26;
351
+ this.PLACEHOLDER_HEIGHT = SessionsTreeDelegate.ITEM_HEIGHT_QUICK_CHAT;
228
352
  }
229
353
  constructor(
230
354
  _approvalModel,
231
355
  _isPhone,
356
+ _isCompact,
357
+ _getSessionStatus,
232
358
  _approvalRowMaxLines = DEFAULT_APPROVAL_ROW_MAX_LINES,
233
359
  _ciFixModel = undefined,
234
360
  _useCompactQuickChatRows = true,
235
361
  _aggregateChatApprovals = false,
236
- _useInsetRowSpacing = false
362
+ _useInsetRowSpacing = false,
363
+ _isComparisonAttempt = () => false
237
364
  ) {
238
365
  this._approvalModel = _approvalModel;
239
366
  this._isPhone = _isPhone;
367
+ this._isCompact = _isCompact;
368
+ this._getSessionStatus = _getSessionStatus;
240
369
  this._approvalRowMaxLines = _approvalRowMaxLines;
241
370
  this._ciFixModel = _ciFixModel;
242
371
  this._useCompactQuickChatRows = _useCompactQuickChatRows;
243
372
  this._aggregateChatApprovals = _aggregateChatApprovals;
244
373
  this._useInsetRowSpacing = _useInsetRowSpacing;
374
+ this._isComparisonAttempt = _isComparisonAttempt;
245
375
  }
246
376
  withInsetRowSpacing(height) {
247
377
  return height + (this._useInsetRowSpacing ? INSET_ROW_GAP : 0);
248
378
  }
249
379
  getHeight(element) {
250
380
  if (isSessionChatItem(element)) {
251
- let chatHeight = this._isPhone() ? SessionsTreeDelegate.CHAT_ITEM_HEIGHT_PHONE : SessionsTreeDelegate.CHAT_ITEM_HEIGHT;
252
- if (this._approvalModel) {
253
- const approval = this._approvalModel.getApproval(element.chat.resource).get();
254
- if (approval) {
255
- chatHeight += SessionItemRenderer.getApprovalRowHeight(approval.label, this._approvalRowMaxLines) + SessionsTreeDelegate.CHAT_APPROVAL_BOTTOM_SLACK;
256
- }
257
- }
258
- return this.withInsetRowSpacing(chatHeight);
381
+ return this.withInsetRowSpacing(this.withChatApprovalHeight(element, this.getChatBaseHeight()));
382
+ }
383
+ if (isSessionGroupItem(element) && element.comparison) {
384
+ return SessionsTreeDelegate.COMPARISON_SECTION_HEIGHT;
385
+ }
386
+ if (isSessionSection(element)) {
387
+ return isShortcutSection(element.id) ? this.withInsetRowSpacing(SessionsTreeDelegate.SECTION_HEIGHT) : SessionsTreeDelegate.SECTION_HEIGHT;
259
388
  }
260
- if (isSessionSection(element) || isSessionGroupItem(element)) {
389
+ if (isSessionGroupItem(element)) {
261
390
  return SessionsTreeDelegate.SECTION_HEIGHT;
262
391
  }
263
392
  if (isSessionShowMore(element)) {
@@ -269,22 +398,50 @@ class SessionsTreeDelegate {
269
398
  let height;
270
399
  if (this._isPhone()) {
271
400
  height = SessionsTreeDelegate.ITEM_HEIGHT_PHONE;
401
+ } else if (this._isComparisonAttempt(element)) {
402
+ height = SessionsTreeDelegate.ITEM_HEIGHT_COMPARISON_ATTEMPT;
272
403
  } else if (this._useCompactQuickChatRows && isQuickChatSession(element)) {
273
404
  height = SessionsTreeDelegate.ITEM_HEIGHT_QUICK_CHAT;
405
+ } else if (this._isCompact()) {
406
+ height = SessionsTreeDelegate.ITEM_HEIGHT_COMPACT;
274
407
  } else {
275
408
  height = SessionsTreeDelegate.ITEM_HEIGHT;
276
409
  }
410
+ const session = element;
411
+ let approval;
277
412
  if (this._approvalModel) {
278
- const approval = getSessionRowApproval(this._approvalModel, element, undefined, this._aggregateChatApprovals);
413
+ approval = getSessionRowApproval(this._approvalModel, session, undefined, this._aggregateChatApprovals);
279
414
  if (approval) {
280
415
  height += SessionItemRenderer.getApprovalRowHeight(approval.label, this._approvalRowMaxLines);
281
416
  }
282
417
  }
418
+ if (!approval && this._isCompact() && this._getSessionStatus(session) === SessionStatus.NeedsInput) {
419
+ height += SessionsTreeDelegate.INPUT_NEEDED_ROW_HEIGHT;
420
+ }
283
421
  if (this._ciFixModel && this._ciFixModel.getCIFix(element).get()) {
284
422
  height += SessionItemRenderer.CI_ROW_HEIGHT;
285
423
  }
286
424
  return this.withInsetRowSpacing(height);
287
425
  }
426
+ getHeightWithoutChatWorkspace(element) {
427
+ return this.withInsetRowSpacing(this.withChatApprovalHeight(element, this.getChatBaseHeight()));
428
+ }
429
+ getChatBaseHeight() {
430
+ if (this._isPhone()) {
431
+ return SessionsTreeDelegate.CHAT_ITEM_HEIGHT_PHONE + (this._isCompact() ? 0 : SessionsTreeDelegate.CHAT_FOLDER_ROW_HEIGHT);
432
+ }
433
+ return this._isCompact() ? SessionsTreeDelegate.ITEM_HEIGHT_COMPACT : SessionsTreeDelegate.ITEM_HEIGHT;
434
+ }
435
+ withChatApprovalHeight(element, height) {
436
+ if (!this._approvalModel) {
437
+ return height;
438
+ }
439
+ const approval = this._approvalModel.getApproval(element.chat.resource).get();
440
+ if (!approval) {
441
+ return height;
442
+ }
443
+ return height + SessionItemRenderer.getApprovalRowHeight(approval.label, this._approvalRowMaxLines) + (this._isPhone() ? SessionsTreeDelegate.CHAT_APPROVAL_PHONE_BOTTOM_SLACK : 0);
444
+ }
288
445
  hasDynamicHeight(element) {
289
446
  if (isSessionChatItem(element)) {
290
447
  return !!this._approvalModel;
@@ -299,7 +456,7 @@ class SessionsTreeDelegate {
299
456
  return SessionGroupRenderer.TEMPLATE_ID;
300
457
  }
301
458
  if (isSessionSection(element)) {
302
- return SessionSectionRenderer.TEMPLATE_ID;
459
+ return isShortcutSection(element.id) ? SESSION_SHORTCUT_SECTION_TEMPLATE_ID : SessionSectionRenderer.TEMPLATE_ID;
303
460
  }
304
461
  if (isSessionShowMore(element)) {
305
462
  return SessionShowMoreRenderer.TEMPLATE_ID;
@@ -310,6 +467,46 @@ class SessionsTreeDelegate {
310
467
  return SessionItemRenderer.TEMPLATE_ID;
311
468
  }
312
469
  }
470
+ function withSessionsListHoverPresentation(hover) {
471
+ return {
472
+ ...hover,
473
+ appearance: {
474
+ showPointer: true
475
+ },
476
+ position: {
477
+ hoverPosition: HoverPosition.RIGHT,
478
+ forcePosition: true
479
+ },
480
+ persistence: {
481
+ hideOnHover: false
482
+ }
483
+ };
484
+ }
485
+ function getCreatorHoverData(
486
+ session,
487
+ sessionsManagementService,
488
+ agentHostConnectionsService,
489
+ openerService
490
+ ) {
491
+ const creationReference = session.createdBySession?.get();
492
+ if (!creationReference) {
493
+ return undefined;
494
+ }
495
+ const creator = sessionsManagementService.getSession(creationReference.session);
496
+ const resolved = agentHostConnectionsService.resolveSessionResource(creationReference.session);
497
+ if (!creator || !resolved) {
498
+ return undefined;
499
+ }
500
+ const target = buildOpenSessionLinkUri(
501
+ resolved.backendSession,
502
+ creationReference.chat?.fragment,
503
+ creationReference.turnId
504
+ );
505
+ return {
506
+ title: creator.title.get(),
507
+ onOpen: () => openerService.open(target).catch(onUnexpectedError)
508
+ };
509
+ }
313
510
  class SessionChatItemRenderer {
314
511
  static {
315
512
  this.TEMPLATE_ID = "session-chat-item";
@@ -317,16 +514,32 @@ class SessionChatItemRenderer {
317
514
  constructor(
318
515
  hoverService,
319
516
  instantiationService,
517
+ contextKeyService,
518
+ sessionsManagementService,
519
+ contextViewService,
320
520
  markdownRendererService,
321
521
  approvalModel,
322
522
  approvalRowMaxLines,
523
+ onDidDoubleClickRename,
524
+ onDidFinishRename,
525
+ getSummaryHoverOptions,
526
+ compact,
527
+ onDidChangeUpdatedAt,
323
528
  activeGuideSessionIds = constObservable(EMPTY_GUIDE_SESSION_IDS)
324
529
  ) {
325
530
  this.hoverService = hoverService;
326
531
  this.instantiationService = instantiationService;
532
+ this.contextKeyService = contextKeyService;
533
+ this.sessionsManagementService = sessionsManagementService;
534
+ this.contextViewService = contextViewService;
327
535
  this.markdownRendererService = markdownRendererService;
328
536
  this.approvalModel = approvalModel;
329
537
  this.approvalRowMaxLines = approvalRowMaxLines;
538
+ this.onDidDoubleClickRename = onDidDoubleClickRename;
539
+ this.onDidFinishRename = onDidFinishRename;
540
+ this.getSummaryHoverOptions = getSummaryHoverOptions;
541
+ this.compact = compact;
542
+ this.onDidChangeUpdatedAt = onDidChangeUpdatedAt;
330
543
  this.activeGuideSessionIds = activeGuideSessionIds;
331
544
  this.templateId = SessionChatItemRenderer.TEMPLATE_ID;
332
545
  this.rowClassName = "session-list-inset-row";
@@ -334,6 +547,7 @@ class SessionChatItemRenderer {
334
547
  this.onDidChangeItemHeight = this._onDidChangeItemHeight.event;
335
548
  this._onDidApproveSession = ( new Emitter());
336
549
  this.onDidApproveSession = this._onDidApproveSession.event;
550
+ this.editingChat = observableValue(this, undefined);
337
551
  }
338
552
  renderTemplate(container) {
339
553
  const disposables = ( new DisposableStore());
@@ -343,7 +557,40 @@ class SessionChatItemRenderer {
343
557
  const iconContainer = append(titleRow, $(".session-chat-icon"));
344
558
  iconContainer.setAttribute("aria-hidden", "true");
345
559
  const statusIcon = disposables.add(this.instantiationService.createInstance(SessionStatusIcon, iconContainer));
346
- const title = disposables.add(( new HighlightedLabel(append(titleRow, $(".session-chat-title")))));
560
+ const titleContainer = append(titleRow, $(".session-chat-title"));
561
+ const title = disposables.add(( new HighlightedLabel(titleContainer)));
562
+ const titleInputContainer = append(titleRow, $(".session-chat-title-input.session-inline-rename-input"));
563
+ const compactHoverDescription = append(titleRow, $(".session-compact-hover-description"));
564
+ const folderRow = append(container, $(".session-chat-folder-row"));
565
+ folderRow.setAttribute("aria-hidden", "true");
566
+ const titleToolbarContainer = append(titleRow, $(".session-title-toolbar"));
567
+ for (const eventType of ["pointerdown", "pointerup", "click", "dblclick"]) {
568
+ disposables.add(
569
+ addDisposableListener(titleInputContainer, eventType, e => e.stopPropagation())
570
+ );
571
+ disposables.add(
572
+ addDisposableListener(titleToolbarContainer, eventType, e => e.stopPropagation())
573
+ );
574
+ }
575
+ disposables.add(Gesture.ignoreTarget(titleInputContainer));
576
+ disposables.add(Gesture.ignoreTarget(titleToolbarContainer));
577
+ const contextKeyService = disposables.add(this.contextKeyService.createScoped(container));
578
+ const canArchiveContext = SessionChatItemCanArchiveContext.bindTo(contextKeyService);
579
+ const canDeleteContext = SessionChatItemCanDeleteContext.bindTo(contextKeyService);
580
+ const isUntitledContext = SessionChatItemIsUntitledContext.bindTo(contextKeyService);
581
+ const isArchivedContext = SessionChatItemIsArchivedContext.bindTo(contextKeyService);
582
+ const scopedInstantiationService = disposables.add(this.instantiationService.createChild(( new ServiceCollection([IContextKeyService, contextKeyService]))));
583
+ const titleToolbar = disposables.add(scopedInstantiationService.createInstance(
584
+ MenuWorkbenchToolBar,
585
+ titleToolbarContainer,
586
+ Menus.SessionChatItemToolbar,
587
+ {
588
+ menuOptions: {
589
+ shouldForwardArgs: true
590
+ },
591
+ telemetrySource: "sessionsList.chatRow"
592
+ }
593
+ ));
347
594
  const approvalRow = append(container, $(".session-approval-row"));
348
595
  const approvalLabel = append(approvalRow, $("span.session-approval-label"));
349
596
  const approvalButtonContainer = append(approvalRow, $(".session-approval-button"));
@@ -357,9 +604,18 @@ class SessionChatItemRenderer {
357
604
  container,
358
605
  statusIcon,
359
606
  title,
607
+ titleContainer,
608
+ titleInputContainer,
609
+ compactHoverDescription,
610
+ folderRow,
611
+ titleToolbar,
360
612
  approvalRow,
361
613
  approvalLabel,
362
614
  approvalButtonContainer,
615
+ canArchiveContext,
616
+ canDeleteContext,
617
+ isUntitledContext,
618
+ isArchivedContext,
363
619
  disposables,
364
620
  elementDisposables
365
621
  };
@@ -370,27 +626,218 @@ class SessionChatItemRenderer {
370
626
  return;
371
627
  }
372
628
  template.elementDisposables.clear();
373
- const chats = getSessionListChats(element.session);
374
- template.container.classList.toggle("last-chat", isEqual(chats.at(-1)?.resource, element.chat.resource));
629
+ template.titleToolbar.context = element;
630
+ template.elementDisposables.add(toDisposable(() => template.container.classList.remove("renaming")));
631
+ template.container.classList.toggle("last-chat", element.isLast);
375
632
  template.elementDisposables.add(autorun(reader => {
376
633
  template.title.set(getChatTitle(element.chat, reader), createMatches(node.filterData));
377
634
  const status = element.chat.status.read(reader);
378
- template.statusIcon.setStatus(status, true, false, undefined, element.chat.resource);
635
+ const isArchived = element.chat.isArchived.read(reader);
636
+ const isRead = element.chat.isRead.read(reader);
637
+ const completedStateIcon = (element.session.workspace.read(reader)?.folders.length ?? 0) > 1 ? getHighestPriorityPullRequestIcon(element.chat.workspace.read(reader)?.folders.flatMap(
638
+ folder => getGitHubPullRequestRefs(folder.gitRepository?.gitHubInfo.read(reader)).map(pullRequest => pullRequest.icon)
639
+ ) ?? []) : undefined;
640
+ const capabilities = getChatCapabilities(element.chat, element.session, reader);
641
+ template.canArchiveContext.set(capabilities.canArchive);
642
+ template.canDeleteContext.set(capabilities.canDelete);
643
+ template.isUntitledContext.set(status === SessionStatus.Untitled);
644
+ template.isArchivedContext.set(isArchived);
645
+ template.statusIcon.setStatus(status, isRead, isArchived, completedStateIcon, element.chat.resource);
646
+ template.container.classList.toggle("archived", isArchived);
647
+ template.container.classList.toggle("unread", !isRead && !isArchived);
379
648
  template.container.classList.toggle("needs-input", status === SessionStatus.NeedsInput);
380
649
  }));
650
+ const descriptionDisposable = template.elementDisposables.add(( new MutableDisposable()));
651
+ let previousUpdatedAtTimestamp = element.chat.updatedAt.get()?.getTime();
652
+ template.elementDisposables.add(autorun(reader => {
653
+ const sessionWorkspace = element.session.workspace.read(reader);
654
+ const chatWorkspace = element.chat.workspace.read(reader);
655
+ const folderLabel = getChatWorkspaceBadgeLabel(sessionWorkspace, chatWorkspace);
656
+ const status = element.chat.status.read(reader);
657
+ const statusMessage = getSessionStatusMessage(status, element.chat.description.read(reader));
658
+ const sortUpdatedAt = element.chat.updatedAt.read(reader);
659
+ const updatedAt = status === SessionStatus.InProgress ? undefined : sortUpdatedAt;
660
+ const updatedAtTimestamp = sortUpdatedAt?.getTime();
661
+ if (previousUpdatedAtTimestamp !== updatedAtTimestamp) {
662
+ previousUpdatedAtTimestamp = updatedAtTimestamp;
663
+ this.onDidChangeUpdatedAt();
664
+ }
665
+ template.container.classList.toggle("has-folder-label", !!folderLabel);
666
+ clearNode(template.compactHoverDescription);
667
+ if (folderLabel) {
668
+ const badge = append(
669
+ template.compactHoverDescription,
670
+ $("span.session-badge", undefined, folderLabel)
671
+ );
672
+ reader.store.add(this.hoverService.setupDelayedHover(badge, {
673
+ content: folderLabel
674
+ }, {
675
+ groupId: "sessions-list"
676
+ }));
677
+ }
678
+ const showDetailsRow = !this.compact();
679
+ const diffStats = status === SessionStatus.InProgress || status === SessionStatus.NeedsInput ? undefined : getChatListDiffStats(element.chat, reader);
680
+ template.folderRow.hidden = !showDetailsRow;
681
+ descriptionDisposable.clear();
682
+ clearNode(template.folderRow);
683
+ if (showDetailsRow && statusMessage !== undefined) {
684
+ const statusElement = append(template.folderRow, $("span.session-description"));
685
+ const statusDescription = typeof statusMessage === "string" ? statusMessage : renderAsPlaintext(statusMessage, {
686
+ omitMarkdownSyntax: true
687
+ });
688
+ if (typeof statusMessage === "string" || !this.markdownRendererService) {
689
+ statusElement.textContent = statusDescription;
690
+ } else {
691
+ descriptionDisposable.value = this.markdownRendererService.render(statusMessage, {
692
+ sanitizerConfig: {
693
+ replaceWithPlaintext: true
694
+ }
695
+ }, statusElement);
696
+ }
697
+ reader.store.add(this.hoverService.setupDelayedHover(statusElement, {
698
+ content: statusDescription
699
+ }, {
700
+ groupId: "sessions-list"
701
+ }));
702
+ } else if (showDetailsRow && folderLabel && chatWorkspace) {
703
+ const kind = getSessionWorkspaceKind(chatWorkspace, false);
704
+ const icon = kind === SessionWorkspaceKind.Worktree ? Codicon.worktreeCompact : Codicon.folderCompact;
705
+ const iconContainer = append(template.folderRow, $("span.session-chat-folder-icon"));
706
+ append(iconContainer, $(`span${ThemeIcon.asCSSSelector(icon)}`));
707
+ const label = append(
708
+ template.folderRow,
709
+ $("span.session-chat-folder-label", undefined, folderLabel)
710
+ );
711
+ reader.store.add(this.hoverService.setupDelayedHover(label, {
712
+ content: folderLabel
713
+ }, {
714
+ groupId: "sessions-list"
715
+ }));
716
+ }
717
+ const hasLeadingDetail = statusMessage !== undefined || !!folderLabel;
718
+ if (showDetailsRow && diffStats) {
719
+ if (hasLeadingDetail) {
720
+ append(template.folderRow, $("span.session-chat-separator", undefined, "·"));
721
+ }
722
+ const diffEl = append(template.folderRow, $("span.session-chat-diff"));
723
+ append(diffEl, $("span.session-chat-diff-added")).textContent = `+${diffStats.insertions}`;
724
+ append(diffEl, $("span.session-chat-diff-removed")).textContent = `-${diffStats.deletions}`;
725
+ }
726
+ if (showDetailsRow && updatedAt) {
727
+ if (hasLeadingDetail || diffStats) {
728
+ append(template.folderRow, $("span.session-chat-separator", undefined, "·"));
729
+ }
730
+ const time = append(template.folderRow, $("span.session-chat-time"));
731
+ time.textContent = formatSessionListTime(updatedAt);
732
+ const targetWindow = getWindow(time);
733
+ const interval = targetWindow.setInterval(() => time.textContent = formatSessionListTime(updatedAt), 60_000);
734
+ reader.store.add(toDisposable(() => targetWindow.clearInterval(interval)));
735
+ }
736
+ }));
381
737
  template.elementDisposables.add(autorun(reader => {
382
738
  const showGuides = ( this.activeGuideSessionIds.read(reader).has(element.session.sessionId));
383
739
  template.container.classList.toggle("session-hierarchy-guides-visible", showGuides);
384
740
  }));
385
- template.elementDisposables.add(this.hoverService.setupDelayedHover(template.title.element, () => ({
386
- content: getChatTitle(element.chat)
387
- }), {
388
- groupId: "sessions-list"
741
+ template.elementDisposables.add(
742
+ this.hoverService.setupDelayedHover(template.container, () => this.getSummaryHoverOptions(element), {
743
+ groupId: "sessions-list"
744
+ })
745
+ );
746
+ template.elementDisposables.add(
747
+ addDisposableListener(template.titleContainer, EventType.DBLCLICK, event => {
748
+ if (event.button !== 0 || event.altKey || event.ctrlKey || event.metaKey || event.shiftKey || !this.canRename(element)) {
749
+ return;
750
+ }
751
+ event.preventDefault();
752
+ event.stopPropagation();
753
+ if (this.beginRename(element)) {
754
+ this.onDidDoubleClickRename(element);
755
+ }
756
+ })
757
+ );
758
+ template.elementDisposables.add(autorun(reader => {
759
+ const editing = this.editingChat.read(reader);
760
+ const isEditing = !!editing && this.isSameChat(editing, element);
761
+ template.container.classList.toggle("renaming", isEditing);
762
+ if (isEditing) {
763
+ this.renderRenameInput(element, template, reader.store);
764
+ }
389
765
  }));
390
766
  if (this.approvalModel) {
391
767
  this.renderApprovalRow(element, template);
392
768
  }
393
769
  }
770
+ beginRename(item) {
771
+ const target = this.resolveRenameTarget(item);
772
+ if (!target) {
773
+ return false;
774
+ }
775
+ if (this.activeRenameInput && this.isSameChat(this.activeRenameInput.item, target)) {
776
+ this.activeRenameInput.input.focus();
777
+ this.activeRenameInput.input.select();
778
+ return true;
779
+ }
780
+ if (!this.renameState || !this.isSameChat(this.renameState.item, target)) {
781
+ const initialValue = getChatTitle(target.chat);
782
+ this.renameState = {
783
+ item: target,
784
+ initialValue,
785
+ value: initialValue
786
+ };
787
+ }
788
+ this.editingChat.set(target, undefined);
789
+ return true;
790
+ }
791
+ canRename(item) {
792
+ return !!this.resolveRenameTarget(item);
793
+ }
794
+ isSameChat(first, second) {
795
+ return isEqual(first.session.resource, second.session.resource) && isEqual(first.chat.resource, second.chat.resource);
796
+ }
797
+ resolveRenameTarget(item) {
798
+ const session = this.sessionsManagementService.getSessions().find(session => isEqual(session.resource, item.session.resource));
799
+ const chat = session?.chats.get().find(chat => isEqual(chat.resource, item.chat.resource));
800
+ if (!session || !chat || isEqual(chat.resource, session.mainChat.get().resource) || chat.status.get() === SessionStatus.Untitled || !getChatCapabilities(chat, session, undefined).canRename) {
801
+ return undefined;
802
+ }
803
+ return {
804
+ session,
805
+ chat
806
+ };
807
+ }
808
+ renderRenameInput(item, template, disposables) {
809
+ const renameState = this.renameState;
810
+ if (!renameState || !this.isSameChat(renameState.item, item)) {
811
+ return;
812
+ }
813
+ const input = renderInlineRenameInput(
814
+ template.titleInputContainer,
815
+ this.contextViewService,
816
+ renameState,
817
+ ( localize(6112, "Rename chat. Press Enter to confirm or Escape to cancel.")),
818
+ disposables,
819
+ (title, restoreListFocus) => {
820
+ this.editingChat.set(undefined, undefined);
821
+ this.renameState = undefined;
822
+ if (restoreListFocus) {
823
+ this.onDidFinishRename();
824
+ }
825
+ const target = this.resolveRenameTarget(item);
826
+ if (title && target) {
827
+ this.sessionsManagementService.renameChat(target.session, target.chat.resource, title).catch(onUnexpectedError);
828
+ }
829
+ }
830
+ );
831
+ this.activeRenameInput = {
832
+ item,
833
+ input
834
+ };
835
+ disposables.add(toDisposable(() => {
836
+ if (this.activeRenameInput?.input === input) {
837
+ this.activeRenameInput = undefined;
838
+ }
839
+ }));
840
+ }
394
841
  renderApprovalRow(element, template) {
395
842
  if (!this.approvalModel || !this.markdownRendererService) {
396
843
  return;
@@ -424,7 +871,11 @@ class SessionChatItemRenderer {
424
871
  }
425
872
  }));
426
873
  }
427
- disposeElement(_node, _index, template) {
874
+ disposeElement(node, _index, template) {
875
+ if (isSessionChatItem(node.element) && this.renameState && this.isSameChat(this.renameState.item, node.element) && !this.resolveRenameTarget(node.element)) {
876
+ this.editingChat.set(undefined, undefined);
877
+ this.renameState = undefined;
878
+ }
428
879
  template.elementDisposables.clear();
429
880
  }
430
881
  disposeTemplate(template) {
@@ -434,6 +885,19 @@ class SessionChatItemRenderer {
434
885
  function approvalRowHeightFor(info, maxLines) {
435
886
  return info ? SessionItemRenderer.getApprovalRowHeight(info.label, maxLines) : 0;
436
887
  }
888
+ function getCompactInputNeededMessage(session, reader, options, approvalModel) {
889
+ if (!options.compact?.()) {
890
+ return undefined;
891
+ }
892
+ const sessionStatus = getSessionRowStatus(
893
+ session,
894
+ reader,
895
+ !!options.deriveStatusFromMainChat,
896
+ options.collapsedSessionIds?.read(reader).has(session.sessionId) ?? true
897
+ );
898
+ const approval = approvalModel ? getSessionRowApproval(approvalModel, session, reader, options.aggregateChatApprovals ?? false) : undefined;
899
+ return sessionStatus === SessionStatus.NeedsInput && !approval ? getSessionStatusMessage(sessionStatus, session.description.read(reader)) : undefined;
900
+ }
437
901
  function renderApprovalRowContent(
438
902
  info,
439
903
  elements,
@@ -468,12 +932,12 @@ function renderApprovalRowContent(
468
932
  }
469
933
  elements.buttonContainer.textContent = "";
470
934
  const button = store.add(( new Button(elements.buttonContainer, {
471
- title: ( localize(4899, "Allow once")),
472
- ariaLabel: ( localize(4900, "Allow once: {0}", info.label)),
935
+ title: ( localize(6113, "Allow once")),
936
+ ariaLabel: ( localize(6114, "Allow once: {0}", info.label)),
473
937
  secondary: true,
474
938
  ...defaultButtonStyles
475
939
  })));
476
- button.label = ( localize(4901, "Allow"));
940
+ button.label = ( localize(6115, "Allow"));
477
941
  store.add(button.onDidClick(() => {
478
942
  const approvalId = agentSessionApprovalId(info);
479
943
  info.confirm();
@@ -500,6 +964,82 @@ class SessionItemActionRunner extends ActionRunner {
500
964
  const SESSION_TITLE_SHIMMER_ANIMATION_NAME = "session-title-shimmer";
501
965
  const SESSION_TITLE_SHIMMER_ANIMATION_NAMES = ( new Set([SESSION_TITLE_SHIMMER_ANIMATION_NAME]));
502
966
  const SESSION_TITLE_SHIMMER_PAUSED_CLASS = "session-title-shimmer-paused";
967
+ function renderInlineRenameInput(container, contextViewService, state, ariaLabel, disposables, onFinish) {
968
+ clearNode(container);
969
+ const input = ( new InputBox(container, contextViewService, {
970
+ inputBoxStyles: defaultInputBoxStyles,
971
+ ariaLabel,
972
+ validationOptions: {
973
+ validation: value => value.trim() ? null : {
974
+ content: ( localize(6116, "Title cannot be empty")),
975
+ type: MessageType.ERROR
976
+ }
977
+ }
978
+ }));
979
+ disposables.add(toDisposable(() => {
980
+ state.selection = {
981
+ start: input.inputElement.selectionStart ?? input.value.length,
982
+ end: input.inputElement.selectionEnd ?? input.value.length,
983
+ direction: input.inputElement.selectionDirection ?? "none"
984
+ };
985
+ state.wasFocused = isActiveElement(input.inputElement);
986
+ input.hideMessage();
987
+ input.dispose();
988
+ }));
989
+ input.value = state.value;
990
+ if (state.selection) {
991
+ if (state.wasFocused) {
992
+ input.focus();
993
+ }
994
+ input.inputElement.setSelectionRange(state.selection.start, state.selection.end, state.selection.direction);
995
+ } else {
996
+ input.focus();
997
+ input.select();
998
+ }
999
+ let done = false;
1000
+ const finish = (commit, restoreListFocus) => {
1001
+ if (done) {
1002
+ return;
1003
+ }
1004
+ const title = input.value.trim();
1005
+ if (commit && !title) {
1006
+ if (restoreListFocus) {
1007
+ input.validate();
1008
+ input.focus();
1009
+ return;
1010
+ }
1011
+ commit = false;
1012
+ }
1013
+ done = true;
1014
+ input.hideMessage();
1015
+ onFinish(
1016
+ commit && title !== state.initialValue.trim() ? title : undefined,
1017
+ restoreListFocus
1018
+ );
1019
+ };
1020
+ disposables.add(
1021
+ addDisposableListener(input.inputElement, EventType.INPUT, () => state.value = input.value)
1022
+ );
1023
+ disposables.add(
1024
+ addStandardDisposableListener(input.inputElement, EventType.KEY_DOWN, event => {
1025
+ if (event.equals(KeyCode.Enter)) {
1026
+ event.preventDefault();
1027
+ event.stopPropagation();
1028
+ finish(true, true);
1029
+ } else if (event.equals(KeyCode.Escape)) {
1030
+ event.preventDefault();
1031
+ event.stopPropagation();
1032
+ finish(false, true);
1033
+ }
1034
+ })
1035
+ );
1036
+ disposables.add(
1037
+ addDisposableListener(input.inputElement, EventType.BLUR, () => finish(true, false))
1038
+ );
1039
+ disposables.add(toDisposable(() => clearNode(container)));
1040
+ return input;
1041
+ }
1042
+ const SESSION_EXTERNAL_APPLICATION_BADGE_HOVERED_CLASS = "external-application-badge-hovered";
503
1043
  class SessionItemRenderer {
504
1044
  static {
505
1045
  this.TEMPLATE_ID = "session-item";
@@ -557,30 +1097,12 @@ class SessionItemRenderer {
557
1097
  this.onDidChangeItemHeight = this._onDidChangeItemHeight.event;
558
1098
  this._onDidApproveSession = ( new Emitter());
559
1099
  this.onDidApproveSession = this._onDidApproveSession.event;
560
- }
561
- getCreatorHoverData(session) {
562
- const creationReference = session.createdBySession?.get();
563
- if (!creationReference) {
564
- return undefined;
565
- }
566
- const creator = this.sessionsManagementService.getSession(creationReference.session);
567
- const resolved = this.agentHostConnectionsService.resolveSessionResource(creationReference.session);
568
- if (!creator || !resolved) {
569
- return undefined;
570
- }
571
- const target = buildOpenSessionLinkUri(
572
- resolved.backendSession,
573
- creationReference.chat?.fragment,
574
- creationReference.turnId
575
- );
576
- return {
577
- title: creator.title.get(),
578
- onOpen: () => this.openerService.open(target).catch(onUnexpectedError)
579
- };
1100
+ this.editingSession = observableValue(this, undefined);
580
1101
  }
581
1102
  renderTemplate(container) {
582
1103
  const disposables = ( new DisposableStore());
583
1104
  const elementDisposables = disposables.add(( new DisposableStore()));
1105
+ const renderedSession = observableValue("renderedSession", undefined);
584
1106
  container.classList.add("session-item");
585
1107
  const iconContainer = append(container, $(".session-icon"));
586
1108
  const statusIcon = disposables.add(this.instantiationService.createInstance(SessionStatusIcon, iconContainer));
@@ -588,6 +1110,31 @@ class SessionItemRenderer {
588
1110
  const titleRow = append(mainCol, $(".session-title-row"));
589
1111
  const titleContainer = append(titleRow, $(".session-title"));
590
1112
  const title = disposables.add(( new HighlightedLabel(titleContainer)));
1113
+ const externalApplicationBadge = append(titleRow, $(
1114
+ "span.session-external-application-badge.session-external-application-badge-title"
1115
+ ));
1116
+ externalApplicationBadge.setAttribute("aria-hidden", "true");
1117
+ const externalApplicationBadgeLabel = append(
1118
+ externalApplicationBadge,
1119
+ $("span.session-external-application-badge-label")
1120
+ );
1121
+ disposables.add(
1122
+ addDisposableListener(externalApplicationBadge, EventType.MOUSE_ENTER, () => {
1123
+ externalApplicationBadge.closest(".monaco-list-row")?.classList.add(SESSION_EXTERNAL_APPLICATION_BADGE_HOVERED_CLASS);
1124
+ })
1125
+ );
1126
+ disposables.add(
1127
+ addDisposableListener(externalApplicationBadge, EventType.MOUSE_LEAVE, () => {
1128
+ externalApplicationBadge.closest(".monaco-list-row")?.classList.remove(SESSION_EXTERNAL_APPLICATION_BADGE_HOVERED_CLASS);
1129
+ })
1130
+ );
1131
+ const titleInputContainer = append(titleRow, $(".session-title-input.session-inline-rename-input"));
1132
+ for (const eventType of ["pointerdown", "pointerup", "click", "dblclick"]) {
1133
+ disposables.add(
1134
+ addDisposableListener(titleInputContainer, eventType, e => e.stopPropagation())
1135
+ );
1136
+ }
1137
+ disposables.add(Gesture.ignoreTarget(titleInputContainer));
591
1138
  disposables.add(
592
1139
  addDisposableListener(titleContainer, EventType.ANIMATION_START, e => {
593
1140
  if (e.target === titleContainer && e.animationName === SESSION_TITLE_SHIMMER_ANIMATION_NAME) {
@@ -601,8 +1148,13 @@ class SessionItemRenderer {
601
1148
  pausedClass: SESSION_TITLE_SHIMMER_PAUSED_CLASS,
602
1149
  animationNames: SESSION_TITLE_SHIMMER_ANIMATION_NAMES
603
1150
  }));
1151
+ const compactHoverDescription = append(titleRow, $(".session-compact-hover-description"));
604
1152
  const titleToolbarContainer = append(titleRow, $(".session-title-toolbar"));
605
1153
  const pendingVoiceIndicator = append(titleRow, $(".session-pending-voice-indicator"));
1154
+ const comparisonAttemptStatus = append(titleRow, $("span.session-comparison-attempt-status"));
1155
+ const comparisonAttemptStatusIcon = append(comparisonAttemptStatus, $("span.session-comparison-attempt-status-icon"));
1156
+ comparisonAttemptStatusIcon.setAttribute("aria-hidden", "true");
1157
+ const comparisonAttemptStatusLabel = append(comparisonAttemptStatus, $("span.session-comparison-attempt-status-label"));
606
1158
  for (const eventType of ["pointerdown", "pointerup", "click", "dblclick"]) {
607
1159
  disposables.add(
608
1160
  addDisposableListener(titleToolbarContainer, eventType, e => e.stopPropagation())
@@ -613,6 +1165,9 @@ class SessionItemRenderer {
613
1165
  const approvalRow = append(mainCol, $(".session-approval-row"));
614
1166
  const approvalLabel = append(approvalRow, $("span.session-approval-label"));
615
1167
  const approvalButtonContainer = append(approvalRow, $(".session-approval-button"));
1168
+ const inputNeededRow = append(mainCol, $(".session-input-needed-row.session-approval-row"));
1169
+ inputNeededRow.setAttribute("aria-hidden", "true");
1170
+ const inputNeededLabel = append(inputNeededRow, $("span.session-input-needed-label"));
616
1171
  const ciRow = append(mainCol, $(".session-ci-row"));
617
1172
  const ciLabel = append(ciRow, $("span.session-ci-label"));
618
1173
  const ciButtonContainer = append(ciRow, $(".session-ci-button"));
@@ -624,10 +1179,11 @@ class SessionItemRenderer {
624
1179
  const statusContext = SessionItemStatusContext.bindTo(contextKeyService);
625
1180
  const isReadContext = SessionIsReadContext.bindTo(contextKeyService);
626
1181
  const isArchivedContext = SessionIsArchivedContext.bindTo(contextKeyService);
1182
+ const isQuickChatContext = IsQuickChatSessionContext.bindTo(contextKeyService);
1183
+ const supportsMultipleChatsContext = SessionSupportsMultipleChatsContext.bindTo(contextKeyService);
627
1184
  const supportsDeleteContext = SessionSupportsDeleteContext.bindTo(contextKeyService);
628
1185
  const scopedInstantiationService = disposables.add(this.instantiationService.createChild(( new ServiceCollection([IContextKeyService, contextKeyService]))));
629
1186
  let titleToolbar;
630
- const renderedSession = observableValue("renderedSession", undefined);
631
1187
  if (this.options.toolbarMenuId) {
632
1188
  const actionRunner = disposables.add(( new SessionItemActionRunner(this.options.getMultiSelectedSessions, this.options.handleToolbarAction)));
633
1189
  const actionViewItemProvider = createSessionActionViewItemProvider(scopedInstantiationService, this.configurationService);
@@ -637,11 +1193,12 @@ class SessionItemRenderer {
637
1193
  shouldForwardArgs: true
638
1194
  },
639
1195
  actionRunner,
1196
+ telemetrySource: this.options.toolbarTelemetrySource,
640
1197
  actionViewItemProvider: (action, options) => {
641
- if (action.id !== ARCHIVE_SESSION_COMMAND_ID || !(action instanceof MenuItemAction) || !this.options.archiveOnboardingSession) {
1198
+ if (action.id !== ARCHIVE_SESSION_COMMAND_ID || !(action instanceof MenuItemAction) || !this.options.onboardingTarget) {
642
1199
  return actionViewItemProvider(action, options);
643
1200
  }
644
- return scopedInstantiationService.createInstance(class extends MenuEntryActionViewItem {
1201
+ return scopedInstantiationService.createInstance(class extends SessionArchiveActionViewItem {
645
1202
  render(container) {
646
1203
  super.render(container);
647
1204
  this._register(autorun(reader => {
@@ -662,14 +1219,24 @@ class SessionItemRenderer {
662
1219
  container,
663
1220
  statusIcon,
664
1221
  title,
1222
+ titleRow,
665
1223
  titleContainer,
1224
+ externalApplicationBadge,
1225
+ externalApplicationBadgeLabel,
1226
+ titleInputContainer,
1227
+ compactHoverDescription,
666
1228
  titleToolbar,
667
1229
  renderedSession,
668
1230
  pendingVoiceIndicator,
1231
+ comparisonAttemptStatus,
1232
+ comparisonAttemptStatusIcon,
1233
+ comparisonAttemptStatusLabel,
669
1234
  detailsRow,
670
1235
  approvalRow,
671
1236
  approvalLabel,
672
1237
  approvalButtonContainer,
1238
+ inputNeededRow,
1239
+ inputNeededLabel,
673
1240
  ciRow,
674
1241
  ciLabel,
675
1242
  ciButtonContainer,
@@ -677,6 +1244,8 @@ class SessionItemRenderer {
677
1244
  statusContext,
678
1245
  isReadContext,
679
1246
  isArchivedContext,
1247
+ isQuickChatContext,
1248
+ supportsMultipleChatsContext,
680
1249
  supportsDeleteContext,
681
1250
  disposables,
682
1251
  elementDisposables
@@ -691,62 +1260,75 @@ class SessionItemRenderer {
691
1260
  }
692
1261
  renderSession(element, template, matches) {
693
1262
  template.elementDisposables.clear();
1263
+ template.container.closest(".monaco-list-row")?.classList.remove(SESSION_EXTERNAL_APPLICATION_BADGE_HOVERED_CLASS);
694
1264
  template.renderedSession.set(element, undefined);
695
1265
  template.elementDisposables.add(toDisposable(() => {
696
1266
  template.renderedSession.set(undefined, undefined);
697
- template.container.classList.remove("archive-onboarding");
1267
+ template.container.classList.remove("archive-onboarding", "renaming");
698
1268
  }));
699
- if (this.options.archiveOnboardingSession) {
1269
+ if (this.options.onboardingTarget) {
700
1270
  template.elementDisposables.add(autorun(reader => {
701
- template.container.classList.toggle(
702
- "archive-onboarding",
703
- this.options.archiveOnboardingSession?.read(reader)?.sessionId === element.sessionId
704
- );
1271
+ const target = this.options.onboardingTarget?.read(reader);
1272
+ const isTarget = target?.session.sessionId === element.sessionId;
1273
+ template.container.classList.toggle("archive-onboarding", isTarget && target.archiveAction);
1274
+ if (isTarget && !target.archiveAction) {
1275
+ reader.store.add(
1276
+ markOnboardingTarget(template.container, getSessionOnboardingTargetId(element))
1277
+ );
1278
+ }
705
1279
  }));
706
1280
  }
707
- if (this.options.onDidRequestRename) {
1281
+ const groupConnectorPosition = this.options.getGroupConnectorPosition?.(element);
1282
+ const comparisonAttemptLabel = this.options.getComparisonAttemptLabel?.(element);
1283
+ template.container.classList.toggle("session-comparison-attempt", comparisonAttemptLabel !== undefined);
1284
+ if (groupConnectorPosition) {
1285
+ template.container.dataset.sessionGroupConnector = groupConnectorPosition;
1286
+ } else {
1287
+ delete template.container.dataset.sessionGroupConnector;
1288
+ }
1289
+ if (this.options.inlineRename) {
708
1290
  template.elementDisposables.add(
709
- addDisposableListener(template.title.element, EventType.DBLCLICK, event => {
1291
+ addDisposableListener(template.titleRow, EventType.DBLCLICK, event => {
710
1292
  if (event.button !== 0 || event.altKey || event.ctrlKey || event.metaKey || event.shiftKey || !element.capabilities.get().supportsRename) {
711
1293
  return;
712
1294
  }
713
1295
  event.preventDefault();
714
1296
  event.stopPropagation();
715
- this.options.onDidRequestRename?.(element);
1297
+ if (this.beginRename(element)) {
1298
+ this.options.onDidDoubleClickRename?.(element);
1299
+ }
716
1300
  })
717
1301
  );
718
1302
  }
719
1303
  this.agentSessionsService.model.observeSession(element.resource);
720
1304
  if (this.options.showHover) {
721
- template.elementDisposables.add(this.hoverService.setupDelayedHover(template.container, () => ({
722
- content: ( new SessionSummaryHoverWidget(getSessionSummaryHoverData(
1305
+ template.elementDisposables.add(this.hoverService.setupDelayedHover(
1306
+ template.container,
1307
+ () => withSessionsListHoverPresentation(createSessionSummaryHover(element, getSessionSummaryHoverData(
723
1308
  element,
724
1309
  this.sessionsProvidersService,
725
1310
  this.openerService,
726
1311
  this.labelService,
727
1312
  this.preferencesService,
728
- this.getCreatorHoverData(element)
729
- ))).domNode,
730
- appearance: {
731
- showPointer: true
732
- },
733
- position: {
734
- hoverPosition: HoverPosition.RIGHT,
735
- forcePosition: true
736
- },
737
- persistence: {
738
- hideOnHover: false
1313
+ getCreatorHoverData(
1314
+ element,
1315
+ this.sessionsManagementService,
1316
+ this.agentHostConnectionsService,
1317
+ this.openerService
1318
+ ),
1319
+ this.options.compact()
1320
+ ), this.preferencesService)),
1321
+ {
1322
+ groupId: "sessions-list"
739
1323
  }
740
- }), {
741
- groupId: "sessions-list"
742
- }));
1324
+ ));
743
1325
  }
744
1326
  const pendingVoiceResource = element.resource;
745
1327
  template.pendingVoiceIndicator.className = "session-pending-voice-indicator " + ThemeIcon.asClassName(Codicon.unmute);
746
1328
  template.elementDisposables.add(this.hoverService.setupManagedHover(
747
1329
  getDefaultHoverDelegate("mouse"),
748
1330
  template.pendingVoiceIndicator,
749
- ( localize(4902, "Voice response ready"))
1331
+ ( localize(6117, "Voice response ready"))
750
1332
  ));
751
1333
  template.elementDisposables.add(autorun(reader => {
752
1334
  this._voicePlaybackService.pendingResponseVersion.read(reader);
@@ -760,7 +1342,8 @@ class SessionItemRenderer {
760
1342
  }
761
1343
  const isPinned = this.options.isPinned(element);
762
1344
  IsSessionPinnedContext.bindTo(template.contextKeyService).set(isPinned);
763
- SessionItemHasBranchNameContext.bindTo(template.contextKeyService).set(!!element.workspace.get()?.folders[0]?.gitRepository?.branchName?.trim());
1345
+ SessionItemInExternalSectionContext.bindTo(template.contextKeyService).set(this.options.isRenderedInExternalSection?.(element) ?? false);
1346
+ const canImportContext = SessionItemCanImportContext.bindTo(template.contextKeyService);
764
1347
  template.elementDisposables.add(autorun(reader => {
765
1348
  const isArchived = element.isArchived.read(reader);
766
1349
  template.container.classList.toggle("archived", isArchived);
@@ -777,16 +1360,22 @@ class SessionItemRenderer {
777
1360
  }));
778
1361
  let agentMergeConfiguration;
779
1362
  template.elementDisposables.add(autorun(reader => {
780
- const sessionStatus = getSessionRowStatus(element, reader, !!this.options.deriveStatusFromMainChat);
1363
+ const collapsed = this.options.collapsedSessionIds?.read(reader).has(element.sessionId) ?? true;
1364
+ const sessionStatus = getSessionRowStatus(element, reader, !!this.options.deriveStatusFromMainChat, collapsed);
781
1365
  template.statusContext.set(sessionStatus);
782
- const isRead = element.isRead.read(reader);
783
- template.isReadContext.set(isRead);
1366
+ const isRead = getSessionRowIsRead(element, reader, !!this.options.deriveStatusFromMainChat);
1367
+ template.isReadContext.set(element.mainChat.read(reader).isRead.read(reader));
784
1368
  const isArchived = element.isArchived.read(reader);
785
1369
  template.isArchivedContext.set(isArchived);
1370
+ const isQuickChat = element.isQuickChat?.read(reader) ?? false;
786
1371
  const capabilities = element.capabilities.read(reader);
1372
+ canImportContext.set(
1373
+ element.isExternal?.read(reader) === true && capabilities.supportsImport === true
1374
+ );
1375
+ template.isQuickChatContext.set(isQuickChat);
1376
+ template.supportsMultipleChatsContext.set(capabilities.supportsMultipleChats);
787
1377
  template.supportsDeleteContext.set(capabilities.supportsDelete === true);
788
1378
  const gitHubInfo = element.workspace.read(reader)?.folders[0]?.gitRepository?.gitHubInfo.read(reader);
789
- const isQuickChat = element.isQuickChat?.read(reader) ?? false;
790
1379
  let completedStateIcon = element.completedStateIcon?.read(reader) ?? getHighestPriorityPullRequestIcon(getGitHubPullRequestRefs(gitHubInfo).map(pullRequest => pullRequest.icon));
791
1380
  if (completedStateIcon && isAgentMergePullRequestIcon(completedStateIcon)) {
792
1381
  agentMergeConfiguration ??= getSessionAgentMergeConfigurationObservable(element, this.sessionsProvidersService, this.configurationService);
@@ -797,32 +1386,126 @@ class SessionItemRenderer {
797
1386
  template.container.classList.toggle("needs-input", sessionStatus === SessionStatus.NeedsInput);
798
1387
  template.container.classList.toggle("unread", !isRead && !isArchived);
799
1388
  template.container.classList.toggle("quick-chat", isQuickChat && this.options.useCompactQuickChatRows);
1389
+ let showComparisonAttemptStatus = comparisonAttemptLabel !== undefined && (this.options.shouldShowComparisonAttemptStatus?.(element, reader) ?? true);
1390
+ template.comparisonAttemptStatusIcon.className = "session-comparison-attempt-status-icon";
1391
+ switch (sessionStatus) {
1392
+ case SessionStatus.InProgress:
1393
+ template.comparisonAttemptStatusIcon.classList.add(...ThemeIcon.asClassNameArray(Codicon.loading), "codicon-modifier-spin");
1394
+ template.comparisonAttemptStatusLabel.textContent = "";
1395
+ break;
1396
+ case SessionStatus.NeedsInput:
1397
+ template.comparisonAttemptStatusLabel.textContent = ( localize(6118, "Attention needed"));
1398
+ break;
1399
+ case SessionStatus.Completed:
1400
+ template.comparisonAttemptStatusLabel.textContent = "";
1401
+ showComparisonAttemptStatus = false;
1402
+ break;
1403
+ case SessionStatus.Error:
1404
+ template.comparisonAttemptStatusLabel.textContent = ( localize(6119, "Failed"));
1405
+ break;
1406
+ default:
1407
+ template.comparisonAttemptStatusLabel.textContent = ( localize(6120, "Pending"));
1408
+ }
1409
+ template.comparisonAttemptStatus.classList.toggle("visible", showComparisonAttemptStatus);
800
1410
  }));
801
1411
  template.elementDisposables.add(autorun(reader => {
802
- const titleText = element.title.read(reader);
1412
+ const titleText = comparisonAttemptLabel ?? element.title.read(reader);
803
1413
  template.title.set(titleText, matches);
804
1414
  }));
1415
+ template.elementDisposables.add(autorun(reader => {
1416
+ const eligible = isExternalApplicationBadgeEligible(element, reader);
1417
+ if (!eligible) {
1418
+ template.externalApplicationBadge.classList.remove("visible");
1419
+ return;
1420
+ }
1421
+ this.options.reportExternalApplicationBadgeModeExperimentTrigger?.();
1422
+ const mode = this.options.externalApplicationBadgeMode?.read(reader) ?? ExternalSessionApplicationBadgeMode.Off;
1423
+ if (eligible && mode !== ExternalSessionApplicationBadgeMode.Off) {
1424
+ this.options.reportExternalApplicationBadgeShowFromExperimentTrigger?.();
1425
+ }
1426
+ template.externalApplicationBadge.classList.toggle("visible", eligible && mode === ExternalSessionApplicationBadgeMode.Title);
1427
+ const badgeLabel = getExternalApplicationBadgeLabel(
1428
+ element.application.read(reader).label,
1429
+ this.options.externalApplicationBadgeShowFrom?.read(reader) ?? true
1430
+ );
1431
+ template.externalApplicationBadgeLabel.textContent = badgeLabel;
1432
+ if (mode === ExternalSessionApplicationBadgeMode.Title) {
1433
+ reader.store.add(this.hoverService.setupDelayedHover(template.externalApplicationBadge, {
1434
+ content: badgeLabel
1435
+ }, {
1436
+ groupId: "sessions-list"
1437
+ }));
1438
+ }
1439
+ }));
1440
+ template.elementDisposables.add(autorun(reader => {
1441
+ const editingSession = this.editingSession.read(reader);
1442
+ const editing = !!editingSession && isEqual(editingSession.resource, element.resource);
1443
+ template.container.classList.toggle("renaming", editing);
1444
+ if (editing) {
1445
+ this.renderRenameInput(element, template, reader.store);
1446
+ }
1447
+ }));
805
1448
  const timeDisposable = template.elementDisposables.add(( new MutableDisposable()));
806
1449
  const descriptionDisposable = template.elementDisposables.add(( new MutableDisposable()));
807
1450
  template.elementDisposables.add(autorun(reader => {
808
- const sessionStatus = getSessionRowStatus(element, reader, !!this.options.deriveStatusFromMainChat);
1451
+ const sessionStatus = getSessionRowStatus(
1452
+ element,
1453
+ reader,
1454
+ !!this.options.deriveStatusFromMainChat,
1455
+ this.options.collapsedSessionIds?.read(reader).has(element.sessionId) ?? true
1456
+ );
809
1457
  const workspace = element.workspace.read(reader);
810
1458
  const description = element.description.read(reader);
811
1459
  const isQuickChat = element.isQuickChat?.read(reader) ?? false;
1460
+ const eligible = isExternalApplicationBadgeEligible(element, reader);
812
1461
  clearNode(template.detailsRow);
813
- if (isQuickChat && this.options.useCompactQuickChatRows) {
1462
+ clearNode(template.compactHoverDescription);
1463
+ if (comparisonAttemptLabel !== undefined || (isQuickChat && this.options.useCompactQuickChatRows)) {
814
1464
  descriptionDisposable.clear();
815
1465
  timeDisposable.clear();
816
1466
  return;
817
1467
  }
818
- const diffStats = getSessionDiffStats(element, reader);
819
- let timeDate;
820
- const hideDetails = sessionStatus === SessionStatus.InProgress || sessionStatus === SessionStatus.NeedsInput;
821
- if (!hideDetails) {
822
- timeDate = element.updatedAt.read(reader);
1468
+ const workspaceBadgeLabel = workspace && (this.options.grouping() !== SessionsGrouping.Workspace || this.options.isPinned(element) || element.isArchived.read(reader) || this.options.isRenderedInCustomGroup?.(element) || this.options.isRenderedInExternalSection?.(element)) ? getWorkspaceBadgeLabel(workspace) : undefined;
1469
+ if (this.options.compact()) {
1470
+ descriptionDisposable.clear();
1471
+ timeDisposable.clear();
1472
+ if (workspaceBadgeLabel) {
1473
+ append(
1474
+ template.compactHoverDescription,
1475
+ $("span.session-badge", undefined, workspaceBadgeLabel)
1476
+ );
1477
+ }
1478
+ return;
823
1479
  }
1480
+ const diffStats = this.options.deriveStatusFromMainChat && (workspace?.folders.length ?? 0) > 1 ? getSessionListChatDiffStats(element, element.mainChat.read(reader), this.options.activeSession, reader) : getSessionDiffStats(element, reader);
1481
+ const hideDetails = sessionStatus === SessionStatus.InProgress || sessionStatus === SessionStatus.NeedsInput;
1482
+ const mainChat = element.mainChat.read(reader);
1483
+ const timeDate = mainChat.status.read(reader) === SessionStatus.InProgress ? undefined : mainChat.updatedAt.read(reader);
824
1484
  const parts = [];
1485
+ if (eligible && this.options.externalApplicationBadgeMode?.read(reader) === ExternalSessionApplicationBadgeMode.Details) {
1486
+ const badgeEl = append(template.detailsRow, $(
1487
+ "span.session-external-application-badge.session-external-application-badge-details"
1488
+ ));
1489
+ const badgeLabel = getExternalApplicationBadgeLabel(
1490
+ element.application.read(reader).label,
1491
+ this.options.externalApplicationBadgeShowFrom?.read(reader) ?? true
1492
+ );
1493
+ append(
1494
+ badgeEl,
1495
+ $("span.session-external-application-badge-label", undefined, badgeLabel)
1496
+ );
1497
+ reader.store.add(this.hoverService.setupDelayedHover(badgeEl, {
1498
+ content: badgeLabel
1499
+ }, {
1500
+ groupId: "sessions-list"
1501
+ }));
1502
+ parts.push(badgeEl);
1503
+ }
1504
+ const statusMessage = getSessionStatusMessage(sessionStatus, description);
825
1505
  if (sessionStatus !== SessionStatus.InProgress) {
1506
+ if (parts.length > 0) {
1507
+ append(template.detailsRow, $("span.session-separator.has-separator"));
1508
+ }
826
1509
  let icon;
827
1510
  if (isQuickChat) {
828
1511
  icon = Codicon.commentDiscussion;
@@ -835,7 +1518,7 @@ class SessionItemRenderer {
835
1518
  parts.push(typeIconEl);
836
1519
  }
837
1520
  if (!hideDetails) {
838
- const badgeLabel = isQuickChat ? ( localize(4903, "No workspace")) : workspace && (this.options.grouping() !== SessionsGrouping.Workspace || this.options.isPinned(element) || element.isArchived.read(reader) || this.options.isRenderedInCustomGroup?.(element)) ? getWorkspaceBadgeLabel(workspace) : undefined;
1521
+ const badgeLabel = isQuickChat ? ( localize(6121, "No workspace")) : workspaceBadgeLabel;
839
1522
  if (badgeLabel) {
840
1523
  const badgeEl = append(template.detailsRow, $("span.session-badge"));
841
1524
  badgeEl.textContent = badgeLabel;
@@ -851,7 +1534,6 @@ class SessionItemRenderer {
851
1534
  append(diffEl, $("span.session-diff-removed")).textContent = `-${diffStats.deletions}`;
852
1535
  parts.push(diffEl);
853
1536
  }
854
- const statusMessage = getSessionStatusMessage(sessionStatus, description);
855
1537
  if (statusMessage !== undefined) {
856
1538
  if (parts.length > 0) {
857
1539
  append(template.detailsRow, $("span.session-separator.has-separator"));
@@ -871,16 +1553,13 @@ class SessionItemRenderer {
871
1553
  } else {
872
1554
  descriptionDisposable.clear();
873
1555
  }
874
- if (!hideDetails && timeDate) {
1556
+ if (timeDate) {
875
1557
  if (parts.length > 0) {
876
1558
  append(template.detailsRow, $("span.session-separator.has-separator"));
877
1559
  }
878
1560
  const timeEl = append(template.detailsRow, $("span.session-time"));
879
1561
  const definiteTimeDate = timeDate;
880
- const formatTime = () => {
881
- const seconds = Math.round((Date.now() - definiteTimeDate.getTime()) / 1000);
882
- return seconds < 60 ? ( localize(4904, "now")) : fromNow(definiteTimeDate, true);
883
- };
1562
+ const formatTime = () => formatSessionListTime(definiteTimeDate);
884
1563
  timeEl.textContent = formatTime();
885
1564
  const targetWindow = getWindow(timeEl);
886
1565
  const interval = targetWindow.setInterval(() => {
@@ -894,10 +1573,47 @@ class SessionItemRenderer {
894
1573
  if (this.approvalModel) {
895
1574
  this.renderApprovalRow(element, template);
896
1575
  }
1576
+ this.renderCompactInputNeededRow(element, template);
897
1577
  if (this.ciFixModel) {
898
1578
  this.renderCIRow(element, template);
899
1579
  }
900
1580
  }
1581
+ renderCompactInputNeededRow(element, template) {
1582
+ const contentStore = template.elementDisposables.add(( new DisposableStore()));
1583
+ let wasVisible = !!getCompactInputNeededMessage(element, undefined, this.options, this.approvalModel);
1584
+ template.inputNeededRow.classList.toggle("visible", wasVisible);
1585
+ template.elementDisposables.add(autorun(reader => {
1586
+ contentStore.clear();
1587
+ const message = getCompactInputNeededMessage(element, reader, this.options, this.approvalModel);
1588
+ const visible = !!message;
1589
+ template.inputNeededRow.classList.toggle("visible", visible);
1590
+ template.inputNeededLabel.textContent = "";
1591
+ if (message) {
1592
+ if (typeof message === "string") {
1593
+ template.inputNeededLabel.textContent = message;
1594
+ } else {
1595
+ contentStore.add(this.markdownRendererService.render(message, {
1596
+ sanitizerConfig: {
1597
+ replaceWithPlaintext: true
1598
+ }
1599
+ }, template.inputNeededLabel));
1600
+ }
1601
+ if (this.options.showHover) {
1602
+ contentStore.add(this.hoverService.setupDelayedHover(template.inputNeededLabel, {
1603
+ content: message,
1604
+ style: HoverStyle.Pointer,
1605
+ position: {
1606
+ hoverPosition: HoverPosition.BELOW
1607
+ }
1608
+ }));
1609
+ }
1610
+ }
1611
+ if (wasVisible !== visible) {
1612
+ wasVisible = visible;
1613
+ this._onDidChangeItemHeight.fire(element);
1614
+ }
1615
+ }));
1616
+ }
901
1617
  renderApprovalRow(element, template) {
902
1618
  if (!this.approvalModel) {
903
1619
  return;
@@ -946,16 +1662,16 @@ class SessionItemRenderer {
946
1662
  const visible = !!state;
947
1663
  template.ciRow.classList.toggle("visible", visible);
948
1664
  if (state) {
949
- template.ciLabel.textContent = ( localize(4905, "{0} checks failed, {1} pending", state.failed, state.pending));
1665
+ template.ciLabel.textContent = ( localize(6122, "{0} checks failed, {1} pending", state.failed, state.pending));
950
1666
  template.ciButtonContainer.textContent = "";
951
1667
  const button = buttonStore.add(( new Button(template.ciButtonContainer, {
952
- title: ( localize(4906, "Fix failing CI checks")),
1668
+ title: ( localize(6123, "Fix failing CI checks")),
953
1669
  ...defaultButtonStyles,
954
1670
  buttonBackground: asCssVariable(chartsOrange),
955
1671
  buttonHoverBackground: `color-mix(in srgb, ${asCssVariable(chartsOrange)} 88%, black)`,
956
1672
  buttonBorder: asCssVariable(chartsOrange)
957
1673
  })));
958
- button.label = ( localize(4907, "Fix CI"));
1674
+ button.label = ( localize(6124, "Fix CI"));
959
1675
  buttonStore.add(button.onDidClick(() => ciFixModel.fixCI(element)));
960
1676
  }
961
1677
  if (wasVisible !== visible) {
@@ -964,7 +1680,75 @@ class SessionItemRenderer {
964
1680
  }
965
1681
  }));
966
1682
  }
967
- disposeElement(_node, _index, template) {
1683
+ beginRename(session) {
1684
+ const target = this.resolveRenameTarget(session);
1685
+ if (!target) {
1686
+ return false;
1687
+ }
1688
+ if (this.activeRenameInput && isEqual(this.activeRenameInput.session.resource, target.resource)) {
1689
+ this.activeRenameInput.input.focus();
1690
+ this.activeRenameInput.input.select();
1691
+ return true;
1692
+ }
1693
+ if (!this.renameState || !isEqual(this.renameState.session.resource, target.resource)) {
1694
+ const initialValue = target.title.get();
1695
+ this.renameState = {
1696
+ session: target,
1697
+ initialValue,
1698
+ value: initialValue
1699
+ };
1700
+ }
1701
+ this.editingSession.set(target, undefined);
1702
+ return true;
1703
+ }
1704
+ renderRenameInput(session, template, disposables) {
1705
+ const renameState = this.renameState;
1706
+ if (!renameState || !isEqual(renameState.session.resource, session.resource)) {
1707
+ return;
1708
+ }
1709
+ if (!this.options.contextViewService) {
1710
+ throw ( new Error("Inline rename requires a context view service"));
1711
+ }
1712
+ const input = renderInlineRenameInput(
1713
+ template.titleInputContainer,
1714
+ this.options.contextViewService,
1715
+ renameState,
1716
+ ( localize(6125, "Rename session. Press Enter to confirm or Escape to cancel.")),
1717
+ disposables,
1718
+ (title, restoreListFocus) => {
1719
+ this.editingSession.set(undefined, undefined);
1720
+ this.renameState = undefined;
1721
+ if (restoreListFocus) {
1722
+ this.options.onDidFinishRename?.();
1723
+ }
1724
+ const target = this.resolveRenameTarget(session);
1725
+ if (title && target) {
1726
+ this.sessionsManagementService.renameSession(target, title).catch(onUnexpectedError);
1727
+ }
1728
+ }
1729
+ );
1730
+ this.activeRenameInput = {
1731
+ session,
1732
+ input
1733
+ };
1734
+ disposables.add(toDisposable(() => {
1735
+ if (this.activeRenameInput?.input === input) {
1736
+ this.activeRenameInput = undefined;
1737
+ }
1738
+ }));
1739
+ }
1740
+ resolveRenameTarget(session) {
1741
+ if (!this.options.inlineRename) {
1742
+ return undefined;
1743
+ }
1744
+ const target = this.sessionsManagementService.getSessions().find(candidate => isEqual(candidate.resource, session.resource));
1745
+ return target?.capabilities.get().supportsRename ? target : undefined;
1746
+ }
1747
+ disposeElement(node, _index, template) {
1748
+ if (isSessionItem(node.element) && this.renameState && isEqual(this.renameState.session.resource, node.element.resource) && !this.resolveRenameTarget(node.element)) {
1749
+ this.editingSession.set(undefined, undefined);
1750
+ this.renameState = undefined;
1751
+ }
968
1752
  template.elementDisposables.clear();
969
1753
  }
970
1754
  disposeTemplate(template) {
@@ -974,6 +1758,16 @@ class SessionItemRenderer {
974
1758
  function getSessionArchiveOnboardingTargetId(session) {
975
1759
  return `sessions.archiveAction.${session.sessionId}`;
976
1760
  }
1761
+ function getSessionOnboardingTargetId(session) {
1762
+ return `sessions.session.${session.sessionId}`;
1763
+ }
1764
+ function getChatWorkspaceBadgeLabel(sessionWorkspace, chatWorkspace) {
1765
+ const firstSessionFolder = sessionWorkspace?.folders[0];
1766
+ if (!firstSessionFolder || !( sessionWorkspace.folders.some(folder => !isEqual(folder.root, firstSessionFolder.root))) || chatWorkspace?.folders.length !== 1) {
1767
+ return undefined;
1768
+ }
1769
+ return chatWorkspace.folders[0].name;
1770
+ }
977
1771
  function getWorkspaceBadgeLabel(workspace) {
978
1772
  const folder = workspace.folders[0];
979
1773
  if (folder?.root.scheme === GITHUB_REMOTE_FILE_SCHEME) {
@@ -982,7 +1776,98 @@ function getWorkspaceBadgeLabel(workspace) {
982
1776
  return `${parts[0]}/${parts[1]}`;
983
1777
  }
984
1778
  }
985
- return workspace.label;
1779
+ return workspace.label;
1780
+ }
1781
+ function isExternalApplicationBadgeEligible(session, reader) {
1782
+ const application = session.isExternal?.read(reader) === true ? session.application?.read(reader) : undefined;
1783
+ return application !== undefined && application.id !== "vscode";
1784
+ }
1785
+ function getExternalApplicationBadgeLabel(applicationLabel, showFrom) {
1786
+ return showFrom ? ( localize(6126, "From {0}", applicationLabel)) : applicationLabel;
1787
+ }
1788
+ function logDefaultSettingExperimentTrigger(configurationService, telemetryService, settingId) {
1789
+ const inspected = configurationService.inspect(settingId);
1790
+ if (!isConfigured(inspected) && inspected.memoryValue === undefined && inspected.policyValue === undefined) {
1791
+ logSettingExperimentTrigger(telemetryService, settingId);
1792
+ }
1793
+ }
1794
+ var SessionHeaderStatus;
1795
+ (function(SessionHeaderStatus) {
1796
+ SessionHeaderStatus[SessionHeaderStatus["NeedsInput"] = 0] = "NeedsInput";
1797
+ SessionHeaderStatus[SessionHeaderStatus["FailingCI"] = 1] = "FailingCI";
1798
+ SessionHeaderStatus[SessionHeaderStatus["Unread"] = 2] = "Unread";
1799
+ })(SessionHeaderStatus || (SessionHeaderStatus = {}));
1800
+ function hasUnreadSessionListChat(session, reader) {
1801
+ if (!session.mainChat.read(reader).isRead.read(reader)) {
1802
+ return true;
1803
+ }
1804
+ return ( getSessionListChats(session, reader).some(chat => !chat.isRead.read(reader)));
1805
+ }
1806
+ function getSessionHeaderStatus(sessions, reader, sessionsWithFailingCI) {
1807
+ let hasFailingCI = false;
1808
+ let hasUnread = false;
1809
+ for (const session of sessions) {
1810
+ if (session.isArchived.read(reader)) {
1811
+ continue;
1812
+ }
1813
+ const status = session.status.read(reader);
1814
+ if (status === SessionStatus.NeedsInput) {
1815
+ return SessionHeaderStatus.NeedsInput;
1816
+ }
1817
+ hasFailingCI ||= status !== SessionStatus.InProgress && sessionsWithFailingCI?.has(session.sessionId) === true;
1818
+ hasUnread ||= hasUnreadSessionListChat(session, reader);
1819
+ }
1820
+ return hasFailingCI ? SessionHeaderStatus.FailingCI : hasUnread ? SessionHeaderStatus.Unread : undefined;
1821
+ }
1822
+ function couldShowSessionHeaderStatus(sessions, reader) {
1823
+ return ( sessions.some(session => {
1824
+ if (session.isArchived.read(reader)) {
1825
+ return false;
1826
+ }
1827
+ const status = session.status.read(reader);
1828
+ return status === SessionStatus.NeedsInput || hasUnreadSessionListChat(session, reader) || (status !== SessionStatus.InProgress && !!session.workspace.read(reader)?.folders[0]?.gitRepository?.gitHubInfo.read(reader)?.pullRequest);
1829
+ }));
1830
+ }
1831
+ function renderSessionHeaderIcon(
1832
+ template,
1833
+ sessions,
1834
+ icon,
1835
+ showUnreadInCollapsedSections,
1836
+ sessionsWithFailingCI,
1837
+ statusTrigger,
1838
+ instantiationService,
1839
+ iconOverride
1840
+ ) {
1841
+ template.elementDisposables.add(autorun(reader => {
1842
+ if (statusTrigger.pending.read(reader) && (template.collapsed.read(reader) || statusTrigger.includeExpanded.read(reader)) && couldShowSessionHeaderStatus(sessions, reader)) {
1843
+ statusTrigger.report();
1844
+ }
1845
+ }));
1846
+ const headerStatus = derived(
1847
+ reader => template.collapsed.read(reader) && showUnreadInCollapsedSections.read(reader) ? getSessionHeaderStatus(sessions, reader, sessionsWithFailingCI.read(reader)) : undefined
1848
+ );
1849
+ template.elementDisposables.add(autorun(reader => {
1850
+ const status = headerStatus.read(reader);
1851
+ const renderedIcon = iconOverride?.read(reader) ?? icon;
1852
+ clearNode(template.icon);
1853
+ template.icon.className = "session-section-icon";
1854
+ template.icon.style.color = renderedIcon?.color ? asCssVariable(renderedIcon.color.id) : "";
1855
+ template.icon.style.display = status !== undefined || renderedIcon ? "" : "none";
1856
+ if (status !== undefined) {
1857
+ const statusIcon = reader.store.add(instantiationService.createInstance(SessionStatusIcon, template.icon));
1858
+ statusIcon.setStatus(
1859
+ status === SessionHeaderStatus.NeedsInput ? SessionStatus.NeedsInput : SessionStatus.Completed,
1860
+ status !== SessionHeaderStatus.Unread,
1861
+ false,
1862
+ status === SessionHeaderStatus.FailingCI ? {
1863
+ ...Codicon.circleFilled,
1864
+ color: themeColorFromId("list.warningForeground")
1865
+ } : undefined
1866
+ );
1867
+ } else if (renderedIcon) {
1868
+ template.icon.classList.add(...ThemeIcon.asClassNameArray(renderedIcon));
1869
+ }
1870
+ }));
986
1871
  }
987
1872
  function renderSessionHeaderToolbar(template, element, select) {
988
1873
  template.elementDisposables.add(addDisposableListener(
@@ -1000,26 +1885,45 @@ class SessionSectionRenderer {
1000
1885
  constructor(
1001
1886
  hideSectionCount,
1002
1887
  select,
1888
+ showUnreadInCollapsedSections,
1889
+ sessionsWithFailingCI,
1890
+ headerStatusTrigger,
1003
1891
  instantiationService,
1892
+ hoverService,
1004
1893
  contextKeyService,
1005
1894
  automationService,
1006
1895
  automationSessions,
1007
- automationNewBadgePresentation,
1008
1896
  uriIdentityService,
1009
1897
  customViewService,
1010
- menuService
1898
+ menuService,
1899
+ keybindingService,
1900
+ customizationsActive = constObservable(false),
1901
+ customizationMigrationsAvailable = constObservable(false),
1902
+ templateId = SessionSectionRenderer.TEMPLATE_ID,
1903
+ rowClassName,
1904
+ onboardingOptions = {
1905
+ onDidActivateNewSession: Event.None
1906
+ }
1011
1907
  ) {
1012
1908
  this.hideSectionCount = hideSectionCount;
1013
1909
  this.select = select;
1910
+ this.showUnreadInCollapsedSections = showUnreadInCollapsedSections;
1911
+ this.sessionsWithFailingCI = sessionsWithFailingCI;
1912
+ this.headerStatusTrigger = headerStatusTrigger;
1014
1913
  this.instantiationService = instantiationService;
1914
+ this.hoverService = hoverService;
1015
1915
  this.contextKeyService = contextKeyService;
1016
1916
  this.automationService = automationService;
1017
1917
  this.automationSessions = automationSessions;
1018
- this.automationNewBadgePresentation = automationNewBadgePresentation;
1019
1918
  this.uriIdentityService = uriIdentityService;
1020
1919
  this.customViewService = customViewService;
1021
1920
  this.menuService = menuService;
1022
- this.templateId = SessionSectionRenderer.TEMPLATE_ID;
1921
+ this.keybindingService = keybindingService;
1922
+ this.customizationsActive = customizationsActive;
1923
+ this.customizationMigrationsAvailable = customizationMigrationsAvailable;
1924
+ this.templateId = templateId;
1925
+ this.rowClassName = rowClassName;
1926
+ this.onboardingOptions = onboardingOptions;
1023
1927
  this.templatesByElement = ( new WeakMap());
1024
1928
  this.templatesById = ( new Map());
1025
1929
  this.automationStatus = derived(this, reader => {
@@ -1055,22 +1959,31 @@ class SessionSectionRenderer {
1055
1959
  }
1056
1960
  return undefined;
1057
1961
  });
1962
+ this.customizationsIcon = derived(this, reader => this.customizationMigrationsAvailable.read(reader) ? {
1963
+ ...Codicon.circleFilled,
1964
+ color: themeColorFromId("activityWarningBadge.background")
1965
+ } : undefined);
1058
1966
  }
1059
1967
  renderTemplate(container) {
1060
1968
  const disposables = ( new DisposableStore());
1061
1969
  const elementDisposables = disposables.add(( new DisposableStore()));
1062
1970
  const actionViewItemDisposables = disposables.add(( new DisposableStore()));
1063
- const dropdownAction = disposables.add(( new Action("sessionsView.sectionNewSession.moreActions", ( localize(4908, "More Actions")))));
1971
+ const dropdownAction = disposables.add(( new Action("sessionsView.sectionNewSession.moreActions", ( localize(6127, "More Actions")))));
1064
1972
  container.classList.add("session-section");
1065
1973
  const chevron = append(container, $("span.session-section-chevron"));
1066
1974
  chevron.setAttribute("aria-hidden", "true");
1067
1975
  const icon = append(container, $("span.session-section-icon"));
1068
1976
  icon.setAttribute("aria-hidden", "true");
1069
- const label = append(container, $("span.session-section-label"));
1977
+ const labelContainer = append(container, $("span.session-section-label-container"));
1978
+ const label = append(labelContainer, $("span.session-section-label"));
1070
1979
  const count = append(container, $("span.session-section-count"));
1071
- const newBadge = append(container, $("span.session-section-new-badge"));
1072
- newBadge.setAttribute("aria-hidden", "true");
1073
- newBadge.textContent = ( localize(4909, "New"));
1980
+ const countLabel = append(count, $("span.session-section-count-label"));
1981
+ const keybindingHint = append(container, $("span.session-section-keybinding"));
1982
+ keybindingHint.setAttribute("aria-hidden", "true");
1983
+ const keybindingLabel = disposables.add(( new KeybindingLabel(keybindingHint, OS, {
1984
+ ...defaultKeybindingLabelStyles,
1985
+ disableTitle: true
1986
+ })));
1074
1987
  const toolbarContainer = append(container, $(".session-section-toolbar"));
1075
1988
  const contextKeyService = disposables.add(this.contextKeyService.createScoped(container));
1076
1989
  const scopedInstantiationService = disposables.add(this.instantiationService.createChild(( new ServiceCollection([IContextKeyService, contextKeyService]))));
@@ -1079,7 +1992,14 @@ class SessionSectionRenderer {
1079
1992
  menuOptions: {
1080
1993
  shouldForwardArgs: true
1081
1994
  },
1995
+ telemetrySource: "sessionsList.section",
1082
1996
  actionViewItemProvider: (action, options) => {
1997
+ if (action instanceof SubmenuItemAction) {
1998
+ return createActionViewItem(scopedInstantiationService, action, {
1999
+ ...options,
2000
+ skipTelemetry: true
2001
+ });
2002
+ }
1083
2003
  if (action.id !== NEW_SESSION_FOR_WORKSPACE_ACTION_ID || !(action instanceof MenuItemAction)) {
1084
2004
  return undefined;
1085
2005
  }
@@ -1100,7 +2020,8 @@ class SessionSectionRenderer {
1100
2020
  "",
1101
2021
  {
1102
2022
  hoverDelegate: options.hoverDelegate,
1103
- menuAsChild: false
2023
+ menuAsChild: false,
2024
+ skipTelemetry: true
1104
2025
  }
1105
2026
  );
1106
2027
  actionViewItemDisposables.add(
@@ -1114,9 +2035,12 @@ class SessionSectionRenderer {
1114
2035
  return {
1115
2036
  container,
1116
2037
  icon,
2038
+ collapsed: observableValue(this, false),
1117
2039
  label,
1118
2040
  count,
1119
- newBadge,
2041
+ countLabel,
2042
+ keybindingHint,
2043
+ keybindingLabel,
1120
2044
  toolbarContainer,
1121
2045
  toolbar,
1122
2046
  chevron,
@@ -1126,43 +2050,81 @@ class SessionSectionRenderer {
1126
2050
  };
1127
2051
  }
1128
2052
  renderElement(node, _index, template) {
1129
- template.elementDisposables.clear();
1130
2053
  const element = node.element;
1131
2054
  if (!isSessionSection(element)) {
1132
2055
  return;
1133
2056
  }
1134
- renderSessionHeaderToolbar(template, element, this.select);
2057
+ this.renderSection(element, node.collapsible, node.collapsed, template);
2058
+ }
2059
+ renderShortcut(element, template) {
2060
+ template.container.closest(".monaco-list-row")?.classList.add("session-list-shortcut-row");
2061
+ this.renderSection(element, false, false, template);
2062
+ }
2063
+ renderSection(element, collapsible, collapsed, template) {
2064
+ template.elementDisposables.clear();
1135
2065
  this.templatesByElement.set(element, template);
1136
2066
  this.templatesById.set(element.id, template);
1137
2067
  template.container.classList.remove(SESSION_HEADER_DROP_TARGET_CLASS);
1138
2068
  template.container.classList.remove("session-section-shortcut");
1139
- template.newBadge.style.display = "none";
1140
- template.newBadge.classList.remove(
1141
- "session-section-new-badge-accent",
1142
- "session-section-new-badge-soft",
1143
- "session-section-new-badge-outline"
1144
- );
1145
- if (element.id === AUTOMATIONS_SECTION_ID) {
2069
+ template.container.classList.remove("session-section-new-session");
2070
+ template.container.classList.remove("session-section-customizations");
2071
+ template.container.classList.remove("active");
2072
+ template.container.closest(".monaco-list-row")?.removeAttribute("aria-current");
2073
+ template.keybindingHint.classList.remove("visible");
2074
+ template.keybindingLabel.set(undefined);
2075
+ const shortcut = isShortcutSection(element.id);
2076
+ template.toolbarContainer.style.display = shortcut ? "none" : "";
2077
+ if (shortcut) {
1146
2078
  template.container.classList.add("session-section-shortcut");
2079
+ template.toolbar.context = undefined;
2080
+ } else {
2081
+ renderSessionHeaderToolbar(template, element, this.select);
1147
2082
  }
1148
- clearNode(template.icon);
1149
- const sectionIcon = getSessionSectionIcon(element.id);
1150
- template.icon.className = sectionIcon ? `session-section-icon ${ThemeIcon.asClassName(sectionIcon)}` : "session-section-icon";
1151
- template.icon.style.display = sectionIcon ? "" : "none";
2083
+ if (element.id === NEW_SESSION_SECTION_ID) {
2084
+ template.container.classList.add("session-section-new-session");
2085
+ template.elementDisposables.add(markOnboardingTarget(template.container, "sessions.newSession.button", {
2086
+ onDidActivate: this.onboardingOptions.onDidActivateNewSession,
2087
+ focusTarget: this.onboardingOptions.getNewSessionFocusTarget?.()
2088
+ }));
2089
+ template.keybindingHint.classList.add("visible");
2090
+ const updateKeybinding = () => template.keybindingLabel.set(
2091
+ this.keybindingService.lookupKeybinding(NEW_SESSION_ACTION_ID, this.contextKeyService)
2092
+ );
2093
+ updateKeybinding();
2094
+ template.elementDisposables.add(this.keybindingService.onDidUpdateKeybindings(updateKeybinding));
2095
+ }
2096
+ if (element.id === CUSTOMIZATIONS_SECTION_ID) {
2097
+ template.container.classList.add("session-section-customizations");
2098
+ template.elementDisposables.add(
2099
+ this.hoverService.setupDelayedHover(template.container, () => withSessionsListHoverPresentation({
2100
+ content: this.customizationMigrationsAvailable.get() ? ( localize(6128, "Some customizations need an update to keep working.")) : element.label
2101
+ }))
2102
+ );
2103
+ template.elementDisposables.add(autorun(reader => {
2104
+ const active = this.customizationsActive.read(reader);
2105
+ template.container.classList.toggle("active", active);
2106
+ const row = template.container.closest(".monaco-list-row");
2107
+ if (active) {
2108
+ row?.setAttribute("aria-current", "page");
2109
+ } else {
2110
+ row?.removeAttribute("aria-current");
2111
+ }
2112
+ }));
2113
+ }
2114
+ this.updateChevron(template, collapsible, collapsed);
1152
2115
  if (element.id === AUTOMATIONS_SECTION_ID) {
2116
+ clearNode(template.icon);
2117
+ template.icon.style.display = "";
1153
2118
  template.elementDisposables.add(autorun(reader => {
1154
2119
  const activeCustomView = this.customViewService.activeCustomView.read(reader);
1155
- template.container.classList.toggle("active", activeCustomView?.id === AUTOMATIONS_CUSTOM_VIEW_ID);
1156
- const badgeStyle = this.automationNewBadgePresentation.read(reader);
1157
- template.newBadge.style.display = badgeStyle && badgeStyle !== "unread" ? "inline-flex" : "none";
1158
- template.newBadge.classList.toggle("session-section-new-badge-accent", badgeStyle === "accent");
1159
- template.newBadge.classList.toggle("session-section-new-badge-soft", badgeStyle === "soft");
1160
- template.newBadge.classList.toggle("session-section-new-badge-outline", badgeStyle === "outline");
2120
+ template.container.classList.toggle(
2121
+ "active",
2122
+ activeCustomView?.id === AUTOMATIONS_CUSTOM_VIEW_ID && !this.customizationsActive.read(reader)
2123
+ );
1161
2124
  }));
1162
2125
  const statusIcon = template.elementDisposables.add(this.instantiationService.createInstance(SessionStatusIcon, template.icon));
1163
2126
  template.elementDisposables.add(autorun(reader => {
1164
2127
  const automationStatus = this.automationStatus.read(reader);
1165
- const badgeStyle = this.automationNewBadgePresentation.read(reader);
1166
2128
  if (automationStatus === SessionStatus.NeedsInput) {
1167
2129
  template.icon.className = "session-section-icon";
1168
2130
  statusIcon.setStatus(SessionStatus.NeedsInput, true, false);
@@ -1172,25 +2134,32 @@ class SessionSectionRenderer {
1172
2134
  } else if (automationStatus === SessionStatus.Completed) {
1173
2135
  template.icon.className = "session-section-icon";
1174
2136
  statusIcon.setStatus(SessionStatus.Completed, false, false);
1175
- } else if (badgeStyle === "unread") {
1176
- template.icon.className = "session-section-icon";
1177
- statusIcon.setStatus(SessionStatus.Completed, false, false);
1178
2137
  } else {
1179
2138
  statusIcon.reset();
1180
2139
  template.icon.className = `session-section-icon ${ThemeIcon.asClassName(Codicon.calendar)}`;
1181
2140
  }
1182
2141
  }));
2142
+ } else {
2143
+ renderSessionHeaderIcon(
2144
+ template,
2145
+ element.sessions,
2146
+ getSessionSectionIcon(element.id),
2147
+ this.showUnreadInCollapsedSections,
2148
+ this.sessionsWithFailingCI,
2149
+ this.headerStatusTrigger,
2150
+ this.instantiationService,
2151
+ element.id === CUSTOMIZATIONS_SECTION_ID ? this.customizationsIcon : undefined
2152
+ );
1183
2153
  }
1184
2154
  template.label.textContent = element.label;
1185
- if (this.hideSectionCount || element.id === AUTOMATIONS_SECTION_ID) {
1186
- template.count.textContent = "";
2155
+ template.countLabel.style.display = "";
2156
+ if (this.hideSectionCount || shortcut) {
2157
+ template.countLabel.textContent = "";
1187
2158
  template.count.style.display = "none";
1188
2159
  } else {
1189
- template.count.textContent = String(element.sessions.length);
2160
+ template.countLabel.textContent = String(element.sessions.length);
1190
2161
  template.count.style.display = "";
1191
2162
  }
1192
- this.updateChevron(template, node.collapsible, node.collapsed);
1193
- template.chevron.classList.toggle("collapsible", node.collapsible);
1194
2163
  const sectionType = element.id.startsWith("workspace:") ? "workspace" : element.id;
1195
2164
  SessionSectionTypeContext.bindTo(template.contextKeyService).set(sectionType);
1196
2165
  const hasGitHubRepository = SessionSectionHasGitHubRepositoryContext.bindTo(template.contextKeyService);
@@ -1221,6 +2190,7 @@ class SessionSectionRenderer {
1221
2190
  template?.container.classList.toggle(SESSION_HEADER_DROP_TARGET_CLASS, active);
1222
2191
  }
1223
2192
  updateChevron(template, collapsible, collapsed) {
2193
+ template.collapsed.set(collapsible && collapsed, undefined);
1224
2194
  template.chevron.className = "session-section-chevron";
1225
2195
  if (collapsible) {
1226
2196
  template.chevron.classList.add("collapsible");
@@ -1235,19 +2205,61 @@ class SessionSectionRenderer {
1235
2205
  this.templatesById.delete(node.element.id);
1236
2206
  }
1237
2207
  }
2208
+ disposeShortcut(element, template) {
2209
+ template.elementDisposables.clear();
2210
+ this.templatesByElement.delete(element);
2211
+ this.templatesById.delete(element.id);
2212
+ }
1238
2213
  disposeTemplate(template) {
1239
2214
  template.disposables.dispose();
1240
2215
  }
1241
2216
  }
2217
+ class SessionShortcutListDelegate {
2218
+ getHeight() {
2219
+ return SESSION_SHORTCUT_ROW_HEIGHT;
2220
+ }
2221
+ getTemplateId() {
2222
+ return SESSION_SHORTCUT_SECTION_TEMPLATE_ID;
2223
+ }
2224
+ }
2225
+ class SessionShortcutListRenderer {
2226
+ constructor(renderer) {
2227
+ this.renderer = renderer;
2228
+ this.templateId = SESSION_SHORTCUT_SECTION_TEMPLATE_ID;
2229
+ }
2230
+ renderTemplate(container) {
2231
+ return this.renderer.renderTemplate(container);
2232
+ }
2233
+ renderElement(element, _index, template) {
2234
+ this.renderer.renderShortcut(element, template);
2235
+ }
2236
+ disposeElement(element, _index, template) {
2237
+ this.renderer.disposeShortcut(element, template);
2238
+ }
2239
+ disposeTemplate(template) {
2240
+ this.renderer.disposeTemplate(template);
2241
+ }
2242
+ }
1242
2243
  class SessionGroupRenderer {
1243
2244
  static {
1244
2245
  this.TEMPLATE_ID = "session-group";
1245
2246
  }
1246
- constructor(delegate, instantiationService, contextKeyService) {
2247
+ constructor(
2248
+ delegate,
2249
+ showUnreadInCollapsedSections,
2250
+ sessionsWithFailingCI,
2251
+ headerStatusTrigger,
2252
+ instantiationService,
2253
+ contextKeyService
2254
+ ) {
1247
2255
  this.delegate = delegate;
2256
+ this.showUnreadInCollapsedSections = showUnreadInCollapsedSections;
2257
+ this.sessionsWithFailingCI = sessionsWithFailingCI;
2258
+ this.headerStatusTrigger = headerStatusTrigger;
1248
2259
  this.instantiationService = instantiationService;
1249
2260
  this.contextKeyService = contextKeyService;
1250
2261
  this.templateId = SessionGroupRenderer.TEMPLATE_ID;
2262
+ this.rowClassName = "session-list-section-row";
1251
2263
  this.templatesByElement = ( new WeakMap());
1252
2264
  this.templatesById = ( new Map());
1253
2265
  }
@@ -1257,9 +2269,10 @@ class SessionGroupRenderer {
1257
2269
  const chevron = append(container, $("span.session-section-chevron"));
1258
2270
  chevron.setAttribute("aria-hidden", "true");
1259
2271
  const icon = append(container, $("span.session-section-icon"));
1260
- icon.classList.add(...ThemeIcon.asClassNameArray(Codicon.folderLibrary));
1261
2272
  icon.setAttribute("aria-hidden", "true");
1262
- const label = append(container, $("span.session-section-label"));
2273
+ const labelContainer = append(container, $(".session-section-label-container.session-group-labels"));
2274
+ const label = append(labelContainer, $("span.session-section-label"));
2275
+ const description = append(labelContainer, $("span.session-group-description"));
1263
2276
  const inputContainer = append(container, $(".session-group-input"));
1264
2277
  const toolbarContainer = append(container, $(".session-section-toolbar"));
1265
2278
  const contextKeyService = disposables.add(this.contextKeyService.createScoped(container));
@@ -1268,12 +2281,17 @@ class SessionGroupRenderer {
1268
2281
  scopedInstantiationService.createInstance(MenuWorkbenchToolBar, toolbarContainer, SessionGroupToolbarMenuId, {
1269
2282
  menuOptions: {
1270
2283
  shouldForwardArgs: true
1271
- }
2284
+ },
2285
+ telemetrySource: "sessionsList.group"
1272
2286
  })
1273
2287
  );
1274
2288
  return {
1275
2289
  container,
2290
+ icon,
2291
+ collapsed: observableValue(this, false),
2292
+ labelContainer,
1276
2293
  label,
2294
+ description,
1277
2295
  inputContainer,
1278
2296
  toolbarContainer,
1279
2297
  toolbar,
@@ -1293,25 +2311,62 @@ class SessionGroupRenderer {
1293
2311
  this.templatesByElement.set(element, template);
1294
2312
  this.templatesById.set(element.group.id, template);
1295
2313
  template.container.classList.remove(SESSION_HEADER_DROP_TARGET_CLASS);
1296
- template.label.textContent = element.group.name;
2314
+ const isComparison = element.comparison !== undefined;
2315
+ template.container.classList.toggle("session-comparison-group", isComparison);
2316
+ template.icon.className = "session-section-icon";
2317
+ template.icon.classList.add(
2318
+ ...ThemeIcon.asClassNameArray(isComparison ? Codicon.layers : Codicon.folderLibrary)
2319
+ );
2320
+ template.label.textContent = element.comparison?.title ?? element.group.name;
2321
+ const comparison = element.comparison;
2322
+ if (comparison) {
2323
+ template.elementDisposables.add(autorun(reader => {
2324
+ template.description.textContent = comparison.summary(reader);
2325
+ }));
2326
+ } else {
2327
+ template.description.textContent = "";
2328
+ }
2329
+ template.description.classList.toggle("visible", isComparison);
1297
2330
  this.updateChevron(template, node.collapsible, node.collapsed);
1298
- SessionGroupHasVisibleSessionsContext.bindTo(template.contextKeyService).set(element.sessions.length > 0);
2331
+ renderSessionHeaderIcon(
2332
+ template,
2333
+ element.sessions,
2334
+ isComparison ? Codicon.layers : Codicon.folderLibrary,
2335
+ this.showUnreadInCollapsedSections,
2336
+ this.sessionsWithFailingCI,
2337
+ this.headerStatusTrigger,
2338
+ this.instantiationService
2339
+ );
2340
+ if (isComparison) {
2341
+ for (const eventType of ["pointerdown", "pointerup", "click", "dblclick"]) {
2342
+ template.elementDisposables.add(addDisposableListener(template.chevron, eventType, event => {
2343
+ event.preventDefault();
2344
+ event.stopPropagation();
2345
+ if (eventType === "click") {
2346
+ this.delegate.toggleCollapsed(element);
2347
+ }
2348
+ }));
2349
+ }
2350
+ template.elementDisposables.add(Gesture.ignoreTarget(template.chevron));
2351
+ }
2352
+ SessionGroupHasVisibleSessionsContext.bindTo(template.contextKeyService).set(element.sessions.length > 0 && comparison?.launching !== true);
1299
2353
  SessionGroupIsEmptyContext.bindTo(template.contextKeyService).set(element.isEmpty);
2354
+ SessionGroupIsComparisonContext.bindTo(template.contextKeyService).set(isComparison);
1300
2355
  template.container.classList.toggle("session-group-editing", element.editing);
1301
2356
  if (element.editing) {
1302
2357
  this.renderInput(element, template);
1303
2358
  } else {
1304
2359
  template.inputContainer.style.display = "none";
1305
- template.label.style.display = "";
2360
+ template.labelContainer.style.display = "";
1306
2361
  }
1307
2362
  }
1308
2363
  renderInput(element, template) {
1309
- template.label.style.display = "none";
2364
+ template.labelContainer.style.display = "none";
1310
2365
  template.inputContainer.style.display = "";
1311
2366
  clearNode(template.inputContainer);
1312
2367
  const input = template.elementDisposables.add(( new InputBox(template.inputContainer, undefined, {
1313
2368
  inputBoxStyles: defaultInputBoxStyles,
1314
- ariaLabel: ( localize(4910, "Group name"))
2369
+ ariaLabel: ( localize(6129, "Group name"))
1315
2370
  })));
1316
2371
  input.value = element.group.name;
1317
2372
  input.focus();
@@ -1359,6 +2414,7 @@ class SessionGroupRenderer {
1359
2414
  template?.container.classList.toggle(SESSION_HEADER_DROP_TARGET_CLASS, active);
1360
2415
  }
1361
2416
  updateChevron(template, collapsible, collapsed) {
2417
+ template.collapsed.set(collapsible && collapsed, undefined);
1362
2418
  template.chevron.className = "session-section-chevron";
1363
2419
  if (collapsible) {
1364
2420
  template.chevron.classList.add("collapsible");
@@ -1397,9 +2453,9 @@ class SessionShowMoreRenderer {
1397
2453
  const container = template.parentElement;
1398
2454
  container?.classList.toggle("session-show-more-folders", element.kind === "folders");
1399
2455
  if (element.mode === "less") {
1400
- template.textContent = element.kind === "folders" ? ( localize(4911, "Show fewer workspaces")) : ( localize(4912, "Show less"));
2456
+ template.textContent = element.kind === "folders" ? ( localize(6130, "Show fewer workspaces")) : ( localize(6131, "Show less"));
1401
2457
  } else {
1402
- template.textContent = element.kind === "folders" ? element.remainingCount === 1 ? ( localize(4913, "+{0} more workspace", element.remainingCount)) : ( localize(4914, "+{0} more workspaces", element.remainingCount)) : ( localize(4915, "+{0} more", element.remainingCount));
2458
+ template.textContent = element.kind === "folders" ? element.remainingCount === 1 ? ( localize(6132, "+{0} more workspace", element.remainingCount)) : ( localize(6133, "+{0} more workspaces", element.remainingCount)) : ( localize(6134, "+{0} more", element.remainingCount));
1403
2459
  }
1404
2460
  }
1405
2461
  disposeTemplate(_template) {}
@@ -1438,73 +2494,177 @@ class SessionsAccessibilityProvider {
1438
2494
  this.options = options;
1439
2495
  }
1440
2496
  getWidgetAriaLabel() {
1441
- return localize(4916, "Sessions");
2497
+ return this.options?.widgetAriaLabel ?? ( localize(6135, "Sessions"));
1442
2498
  }
1443
2499
  getAriaLabel(element) {
1444
2500
  if (isSessionChatItem(element)) {
1445
- return derived(this, reader => ( localize(
1446
- 4917,
1447
- "{0}, chat, updated {1}, {2}",
1448
- getChatTitle(element.chat, reader),
1449
- fromNow(element.chat.updatedAt.read(reader), true),
1450
- getSessionConversationStatusAriaLabel(element.chat.status.read(reader))
1451
- )));
2501
+ return derived(this, reader => {
2502
+ const title = getChatTitle(element.chat, reader);
2503
+ const chatStatus = element.chat.status.read(reader);
2504
+ const updatedAt = chatStatus === SessionStatus.InProgress ? undefined : element.chat.updatedAt.read(reader);
2505
+ const status = getSessionConversationStatusAriaLabel(chatStatus);
2506
+ const chatDescription = element.chat.description.read(reader);
2507
+ const statusMessage = getSessionStatusMessage(chatStatus, chatDescription);
2508
+ const folderLabel = getChatWorkspaceBadgeLabel(
2509
+ element.session.workspace.read(reader),
2510
+ element.chat.workspace.read(reader)
2511
+ );
2512
+ let label = updatedAt ? folderLabel ? ( localize(
2513
+ 6136,
2514
+ "{0}, chat in folder {1}, updated {2}, {3}",
2515
+ title,
2516
+ folderLabel,
2517
+ fromNow(updatedAt, true),
2518
+ status
2519
+ )) : ( localize(
2520
+ 6137,
2521
+ "{0}, chat, updated {1}, {2}",
2522
+ title,
2523
+ fromNow(updatedAt, true),
2524
+ status
2525
+ )) : folderLabel ? ( localize(6138, "{0}, chat in folder {1}, {2}", title, folderLabel, status)) : ( localize(6139, "{0}, chat, {1}", title, status));
2526
+ if (statusMessage !== undefined && (chatStatus === SessionStatus.InProgress || chatDescription !== undefined)) {
2527
+ const statusMessageText = typeof statusMessage === "string" ? statusMessage : renderAsPlaintext(statusMessage, {
2528
+ omitMarkdownSyntax: true
2529
+ });
2530
+ label = ( localize(6140, "{0}, {1}", label, statusMessageText));
2531
+ }
2532
+ const diffStats = chatStatus === SessionStatus.InProgress || chatStatus === SessionStatus.NeedsInput ? undefined : getChatListDiffStats(element.chat, reader);
2533
+ if (diffStats) {
2534
+ label = ( localize(
2535
+ 6141,
2536
+ "{0}, {1} lines added, {2} lines removed",
2537
+ label,
2538
+ diffStats.insertions,
2539
+ diffStats.deletions
2540
+ ));
2541
+ }
2542
+ const isArchived = element.chat.isArchived.read(reader);
2543
+ const readLabel = !isArchived && !element.chat.isRead.read(reader) ? ( localize(6142, "{0}, unread", label)) : label;
2544
+ return isArchived ? ( localize(6143, "{0}, archived", label)) : readLabel;
2545
+ });
1452
2546
  }
1453
2547
  if (isSessionGroupItem(element)) {
1454
- return `${element.group.name}, ${element.sessions.length}`;
2548
+ return element.comparison ? derived(this, reader => ( localize(
2549
+ 6144,
2550
+ "{0}, {1}",
2551
+ element.comparison.title,
2552
+ element.comparison.summary(reader)
2553
+ ))) : this.getSectionAriaLabel(element.group.name, element.sessions);
1455
2554
  }
1456
2555
  if (isSessionSection(element)) {
2556
+ if (element.id === NEW_SESSION_SECTION_ID) {
2557
+ return derived(this, reader => {
2558
+ const keybindingAriaLabel = this.options?.newSessionKeybindingAriaLabel?.read(reader);
2559
+ return keybindingAriaLabel ? ( localize(6145, "New Session ({0})", keybindingAriaLabel)) : ( localize(6146, "New Session"));
2560
+ });
2561
+ }
1457
2562
  if (element.id === AUTOMATIONS_SECTION_ID) {
1458
2563
  return derived(this, reader => {
1459
2564
  let label = element.label;
1460
2565
  switch (this.automationStatus?.read(reader)) {
1461
2566
  case SessionStatus.NeedsInput:
1462
- label = ( localize(4918, "{0}, run needs input", element.label));
2567
+ label = ( localize(6147, "{0}, run needs attention", element.label));
1463
2568
  break;
1464
2569
  case SessionStatus.InProgress:
1465
- label = ( localize(4919, "{0}, run in progress", element.label));
2570
+ label = ( localize(6148, "{0}, run in progress", element.label));
1466
2571
  break;
1467
2572
  case SessionStatus.Completed:
1468
- label = ( localize(4920, "{0}, unread run", element.label));
2573
+ label = ( localize(6149, "{0}, unread run", element.label));
1469
2574
  break;
1470
2575
  }
1471
- return this.options?.automationNewBadgeVisible?.read(reader) ? ( localize(4921, "{0}, new feature", label)) : label;
2576
+ return label;
1472
2577
  });
1473
2578
  }
1474
- return `${element.label}, ${element.sessions.length}`;
2579
+ if (element.id === CUSTOMIZATIONS_SECTION_ID) {
2580
+ return derived(this, reader => {
2581
+ const count = this.options?.customizationsCount?.read(reader) ?? 0;
2582
+ const countLabel = count === 1 ? ( localize(6150, "1 customization")) : ( localize(6151, "{0} customizations", count));
2583
+ return this.options?.customizationMigrationsAvailable?.read(reader) ? ( localize(
2584
+ 6152,
2585
+ "{0}, {1}, customization migrations available",
2586
+ element.label,
2587
+ countLabel
2588
+ )) : ( localize(6153, "{0}, {1}", element.label, countLabel));
2589
+ });
2590
+ }
2591
+ if (isShortcutSection(element.id)) {
2592
+ return element.label;
2593
+ }
2594
+ return this.getSectionAriaLabel(element.label, element.sessions);
1475
2595
  }
1476
2596
  if (isSessionShowMore(element)) {
1477
2597
  if (element.mode === "less") {
1478
- return element.kind === "folders" ? ( localize(4922, "Show fewer workspaces")) : ( localize(4923, "Show fewer sessions"));
2598
+ return element.kind === "folders" ? ( localize(6154, "Show fewer workspaces")) : ( localize(6155, "Show fewer sessions"));
1479
2599
  }
1480
- return element.kind === "folders" ? element.remainingCount === 1 ? ( localize(4924, "Show {0} more workspace", element.remainingCount)) : ( localize(4925, "Show {0} more workspaces", element.remainingCount)) : ( localize(4926, "Show {0} more sessions", element.remainingCount));
2600
+ return element.kind === "folders" ? element.remainingCount === 1 ? ( localize(6156, "Show {0} more workspace", element.remainingCount)) : ( localize(6157, "Show {0} more workspaces", element.remainingCount)) : ( localize(6158, "Show {0} more sessions", element.remainingCount));
1481
2601
  }
1482
2602
  if (isSessionPlaceholder(element)) {
1483
- return element.hover ? ( localize(4927, "{0}. {1}", element.label, element.hover)) : element.label;
2603
+ return element.hover ? ( localize(6159, "{0}. {1}", element.label, element.hover)) : element.label;
1484
2604
  }
1485
2605
  return derived(this, reader => {
1486
- const title = element.title.read(reader);
1487
- const updated = fromNow(element.updatedAt.read(reader), true);
2606
+ const title = this.options?.getComparisonAttemptLabel?.(element) ?? element.title.read(reader);
2607
+ const mainChat = element.mainChat.read(reader);
2608
+ const updatedAt = mainChat.status.read(reader) === SessionStatus.InProgress ? undefined : mainChat.updatedAt.read(reader);
1488
2609
  let label;
1489
2610
  if (this.options?.includeQuickChatInAriaLabel && element.isQuickChat?.read(reader)) {
1490
- label = ( localize(4928, "{0}, chat, updated {1}", title, updated));
2611
+ label = updatedAt ? ( localize(6160, "{0}, chat, updated {1}", title, fromNow(updatedAt, true))) : ( localize(6161, "{0}, chat", title));
1491
2612
  } else if (element.worktreePending?.read(reader)) {
1492
- label = ( localize(4929, "{0}, creating worktree, updated {1}", title, updated));
2613
+ label = updatedAt ? ( localize(
2614
+ 6162,
2615
+ "{0}, creating worktree, updated {1}",
2616
+ title,
2617
+ fromNow(updatedAt, true)
2618
+ )) : ( localize(6163, "{0}, creating worktree", title));
1493
2619
  } else {
1494
- label = ( localize(4930, "{0}, updated {1}", title, updated));
2620
+ label = updatedAt ? ( localize(6164, "{0}, updated {1}", title, fromNow(updatedAt, true))) : title;
1495
2621
  }
1496
- const status = getSessionRowStatus(element, reader, !!this.options?.deriveStatusFromMainChat);
2622
+ const collapsed = this.options?.collapsedSessionIds?.read(reader).has(element.sessionId) ?? true;
2623
+ const status = getSessionRowStatus(element, reader, !!this.options?.deriveStatusFromMainChat, collapsed);
1497
2624
  if (this.options?.deriveStatusFromMainChat) {
1498
- label = ( localize(4931, "{0}, {1}", label, getSessionConversationStatusAriaLabel(status)));
2625
+ label = ( localize(6165, "{0}, {1}", label, getSessionConversationStatusAriaLabel(status)));
2626
+ }
2627
+ const eligible = isExternalApplicationBadgeEligible(element, reader);
2628
+ if (eligible) {
2629
+ this.options?.reportExternalApplicationBadgeModeExperimentTrigger?.();
2630
+ }
2631
+ const badgeMode = this.options?.externalApplicationBadgeMode?.read(reader) ?? ExternalSessionApplicationBadgeMode.Off;
2632
+ if (eligible && badgeMode !== ExternalSessionApplicationBadgeMode.Off) {
2633
+ this.options?.reportExternalApplicationBadgeShowFromExperimentTrigger?.();
2634
+ label = ( localize(6166, "{0}, created in {1}", label, element.application.read(reader).label));
2635
+ }
2636
+ if (!element.isArchived.read(reader) && !getSessionRowIsRead(element, reader, !!this.options?.deriveStatusFromMainChat)) {
2637
+ label = ( localize(6167, "{0}, unread", label));
2638
+ }
2639
+ const inputNeededMessage = this.options ? getCompactInputNeededMessage(element, reader, this.options, this.options.approvalModel) : undefined;
2640
+ if (inputNeededMessage) {
2641
+ label = ( localize(6168, "{0}, {1}", label, renderAsPlaintext(inputNeededMessage, {
2642
+ omitMarkdownSyntax: true
2643
+ })));
1499
2644
  }
1500
2645
  const workspace = element.workspace.read(reader);
1501
2646
  const workspaceLabel = workspace ? getWorkspaceBadgeLabel(workspace) : undefined;
1502
- if (this.options && status !== SessionStatus.InProgress && status !== SessionStatus.NeedsInput && workspaceLabel && (this.options.grouping() !== SessionsGrouping.Workspace || this.options.isPinned(element) || element.isArchived.read(reader) || this.options.isRenderedInCustomGroup?.(element))) {
1503
- label = ( localize(4932, "{0}, in {1}", label, workspaceLabel));
2647
+ if (this.options && status !== SessionStatus.InProgress && status !== SessionStatus.NeedsInput && workspaceLabel && (this.options.grouping() !== SessionsGrouping.Workspace || this.options.isPinned(element) || element.isArchived.read(reader) || this.options.isRenderedInCustomGroup?.(element) || this.options.isRenderedInExternalSection?.(element))) {
2648
+ label = ( localize(6169, "{0}, in {1}", label, workspaceLabel));
1504
2649
  }
1505
2650
  return label;
1506
2651
  });
1507
2652
  }
2653
+ getSectionAriaLabel(label, sessions) {
2654
+ return derived(this, reader => {
2655
+ const status = this.options?.showUnreadInCollapsedSections?.read(reader) ? getSessionHeaderStatus(sessions, reader, this.options.sessionsWithFailingCI?.read(reader)) : undefined;
2656
+ switch (status) {
2657
+ case SessionHeaderStatus.NeedsInput:
2658
+ return localize(6170, "{0}, {1}, session needs attention", label, sessions.length);
2659
+ case SessionHeaderStatus.FailingCI:
2660
+ return localize(6171, "{0}, {1}, session has failing CI checks", label, sessions.length);
2661
+ case SessionHeaderStatus.Unread:
2662
+ return localize(6172, "{0}, {1}, contains unread sessions", label, sessions.length);
2663
+ default:
2664
+ return localize(6173, "{0}, {1}", label, sessions.length);
2665
+ }
2666
+ });
2667
+ }
1508
2668
  }
1509
2669
  class SessionsListDragAndDrop extends Disposable {
1510
2670
  constructor(delegate) {
@@ -1550,7 +2710,7 @@ class SessionsListDragAndDrop extends Disposable {
1550
2710
  if (sessions.length === 1) {
1551
2711
  return sessions[0].title.get();
1552
2712
  }
1553
- return localize(4933, "{0} sessions", sessions.length);
2713
+ return localize(6174, "{0} sessions", sessions.length);
1554
2714
  }
1555
2715
  onDragStart(data, originalEvent) {
1556
2716
  const elements = data instanceof ElementsDragAndDropData ? data.elements : [];
@@ -1757,9 +2917,9 @@ class SessionsListDragAndDrop extends Disposable {
1757
2917
  let sectionId;
1758
2918
  let target;
1759
2919
  if (isSessionSection(targetElement)) {
1760
- sectionId = targetElement.id.startsWith("workspace:") ? targetElement.id : undefined;
2920
+ sectionId = targetElement.id.startsWith("workspace:") || targetElement.id === EXTERNAL_SESSIONS_SECTION_ID ? targetElement.id : undefined;
1761
2921
  } else if (isSessionItem(targetElement) && this.delegate.getGroupIdOfSession(targetElement) === undefined) {
1762
- sectionId = this.delegate.getWorkspaceSectionIdOfSession(targetElement);
2922
+ sectionId = this.delegate.getUngroupedSectionIdOfSession(targetElement);
1763
2923
  target = sectionId === undefined ? undefined : targetElement;
1764
2924
  }
1765
2925
  if (sectionId === undefined) {
@@ -1767,7 +2927,7 @@ class SessionsListDragAndDrop extends Disposable {
1767
2927
  }
1768
2928
  const dragged = this.draggedSessions(data);
1769
2929
  const canRemove = dragged.every(
1770
- session => this.delegate.getGroupIdOfSession(session) !== undefined && this.delegate.getWorkspaceSectionIdOfSession(session) === sectionId
2930
+ session => this.delegate.getGroupIdOfSession(session) !== undefined && this.delegate.getUngroupedSectionIdOfSession(session) === sectionId
1771
2931
  );
1772
2932
  if (dragged.length === 0 || !canRemove) {
1773
2933
  return undefined;
@@ -1864,6 +3024,9 @@ let SessionsList = class SessionsList extends Disposable {
1864
3024
  static {
1865
3025
  this.SECTION_COLLAPSE_STATE_KEY = "sessionsListControl.sectionCollapseState";
1866
3026
  }
3027
+ static {
3028
+ this.SESSION_COLLAPSE_STATE_KEY = "sessionsListControl.sessionCollapseState";
3029
+ }
1867
3030
  static {
1868
3031
  this.EXCLUDED_TYPES_KEY = "sessionsListControl.excludedSessionTypes";
1869
3032
  }
@@ -1876,6 +3039,9 @@ let SessionsList = class SessionsList extends Disposable {
1876
3039
  static {
1877
3040
  this.EXCLUDE_READ_KEY = "sessionsListControl.excludeRead";
1878
3041
  }
3042
+ static {
3043
+ this.SHOW_EMPTY_GROUPS_KEY = "sessionsListControl.showEmptyGroups";
3044
+ }
1879
3045
  static {
1880
3046
  this.WORKSPACE_GROUP_CAPPED_KEY = "sessionsListControl.workspaceGroupCapped";
1881
3047
  }
@@ -1888,11 +3054,8 @@ let SessionsList = class SessionsList extends Disposable {
1888
3054
  get element() {
1889
3055
  return this.listContainer;
1890
3056
  }
1891
- async resetAutomationsNewBadge() {
1892
- if (this.customViewService.activeCustomView.get()?.id === AUTOMATIONS_CUSTOM_VIEW_ID) {
1893
- this.customViewService.hideCustomView();
1894
- }
1895
- await this.automationsNewBadgeState.reset();
3057
+ isCompact() {
3058
+ return (this.options.compact?.() ?? false) && !IsPhoneLayoutContext.getValue(this.contextKeyService);
1896
3059
  }
1897
3060
  constructor(
1898
3061
  container,
@@ -1902,12 +3065,14 @@ let SessionsList = class SessionsList extends Disposable {
1902
3065
  customViewService,
1903
3066
  _sessionsListModelService,
1904
3067
  _sessionGroupsService,
3068
+ sessionComparisonService,
1905
3069
  _sessionSectionOrderService,
1906
3070
  _agentHostFilterService,
1907
3071
  instantiationService,
1908
3072
  contextKeyService,
1909
3073
  storageService,
1910
3074
  contextMenuService,
3075
+ contextViewService,
1911
3076
  menuService,
1912
3077
  keybindingService,
1913
3078
  commandService,
@@ -1919,7 +3084,10 @@ let SessionsList = class SessionsList extends Disposable {
1919
3084
  agentHostConnectionsService,
1920
3085
  openerService,
1921
3086
  labelService,
1922
- preferencesService
3087
+ preferencesService,
3088
+ editorService,
3089
+ telemetryService,
3090
+ accessibilityService
1923
3091
  ) {
1924
3092
  super();
1925
3093
  this.options = options;
@@ -1928,11 +3096,13 @@ let SessionsList = class SessionsList extends Disposable {
1928
3096
  this.customViewService = customViewService;
1929
3097
  this._sessionsListModelService = _sessionsListModelService;
1930
3098
  this._sessionGroupsService = _sessionGroupsService;
3099
+ this.sessionComparisonService = sessionComparisonService;
1931
3100
  this._sessionSectionOrderService = _sessionSectionOrderService;
1932
3101
  this._agentHostFilterService = _agentHostFilterService;
1933
3102
  this.contextKeyService = contextKeyService;
1934
3103
  this.storageService = storageService;
1935
3104
  this.contextMenuService = contextMenuService;
3105
+ this.contextViewService = contextViewService;
1936
3106
  this.menuService = menuService;
1937
3107
  this.keybindingService = keybindingService;
1938
3108
  this.commandService = commandService;
@@ -1945,11 +3115,16 @@ let SessionsList = class SessionsList extends Disposable {
1945
3115
  this.openerService = openerService;
1946
3116
  this.labelService = labelService;
1947
3117
  this.preferencesService = preferencesService;
3118
+ this.telemetryService = telemetryService;
3119
+ this.navigationSections = [];
1948
3120
  this.sessions = [];
1949
3121
  this.sessionChatsObserver = this._register(( new MutableDisposable()));
1950
3122
  this.activeSessionUpdate = this._register(( new MutableDisposable()));
1951
- this.chatApprovalHeightReconcile = this._register(( new MutableDisposable()));
3123
+ this.nestedSessionOrderUpdate = this._register(( new MutableDisposable()));
3124
+ this.nestedSessionResources = ( new Set());
3125
+ this.chatRowHeightReconcile = this._register(( new MutableDisposable()));
1952
3126
  this.automationSessions = observableValue(this, []);
3127
+ this.collapsedSessionIds = observableValue(this, ( new Set()));
1953
3128
  this.hoveredGuideSessionId = observableValue(this, undefined);
1954
3129
  this.selectedGuideSessionIds = observableValue(this, EMPTY_GUIDE_SESSION_IDS);
1955
3130
  this.focusedGuideSessionIds = observableValue(this, EMPTY_GUIDE_SESSION_IDS);
@@ -1970,32 +3145,51 @@ let SessionsList = class SessionsList extends Disposable {
1970
3145
  return ids;
1971
3146
  });
1972
3147
  this.visible = true;
1973
- this.archiveOnboardingSession = observableValue(this, undefined);
3148
+ this.onboardingTarget = observableValue(this, undefined);
3149
+ this._sessionContextMenuDisposables = this._register(( new MutableDisposable()));
1974
3150
  this.sessionGroupLimit = observableValue(this, SessionsList_1.DEFAULT_SESSION_GROUP_LIMIT);
1975
3151
  this.expandedSessionGroups = ( new Set());
3152
+ this.renderedComparisonAttemptConnectorPositions = ( new Map());
3153
+ this.renderedComparisonAttemptLabels = ( new Map());
1976
3154
  this.expandedMoreFolders = false;
1977
3155
  this.hasFindPattern = false;
1978
3156
  this.suspendCollapseStatePersistence = false;
3157
+ this.findOpen = observableValue(this, false);
1979
3158
  this._topLevelOrder = [];
1980
3159
  this._onDidUpdate = this._register(( new Emitter()));
1981
3160
  this.onDidUpdate = this._onDidUpdate.event;
3161
+ this._onDidOpenSession = this._register(( new Emitter()));
3162
+ this.onDidOpenSession = this._onDidOpenSession.event;
3163
+ this._onDidActivateNewSession = this._register(( new Emitter()));
1982
3164
  this._onDidChangeFindOpenState = this._register(( new Emitter()));
1983
3165
  this.onDidChangeFindOpenState = this._onDidChangeFindOpenState.event;
1984
- this.automationsNewBadgeState = this._register(instantiationService.createInstance(AutomationsNewBadgeState));
1985
- this.excludedSessionTypes = this.loadExcludedSessionTypes();
1986
- this.excludedStatuses = this.loadExcludedStatuses();
1987
- this._excludeArchived = this.storageService.getBoolean(SessionsList_1.EXCLUDE_ARCHIVED_KEY, StorageScope.PROFILE, true);
1988
- this._excludeRead = this.storageService.getBoolean(SessionsList_1.EXCLUDE_READ_KEY, StorageScope.PROFILE, false);
3166
+ this.filters = this._register(instantiationService.createInstance(SessionsListFilters));
3167
+ for (const key of [
3168
+ SessionsList_1.EXCLUDED_TYPES_KEY,
3169
+ SessionsList_1.EXCLUDED_STATUSES_KEY,
3170
+ SessionsList_1.EXCLUDE_READ_KEY,
3171
+ SessionsList_1.SHOW_EMPTY_GROUPS_KEY
3172
+ ]) {
3173
+ this.storageService.remove(key, StorageScope.PROFILE);
3174
+ }
3175
+ const storedExcludeArchived = this.storageService.get(SessionsList_1.EXCLUDE_ARCHIVED_KEY, StorageScope.PROFILE);
3176
+ this._excludeArchivedIsDefault = storedExcludeArchived === undefined;
3177
+ this._excludeArchived = storedExcludeArchived === undefined ? this.configurationService.getValue(SESSIONS_LIST_SHOW_ARCHIVED_BY_DEFAULT_SETTING) !== true : this.storageService.getBoolean(SessionsList_1.EXCLUDE_ARCHIVED_KEY, StorageScope.PROFILE, true);
1989
3178
  this.workspaceGroupCapped = this.storageService.getBoolean(SessionsList_1.WORKSPACE_GROUP_CAPPED_KEY, StorageScope.PROFILE, true);
3179
+ this.collapsedSessionResources = this.loadCollapsedSessionResources();
1990
3180
  this.listContainer = append(container, $(".sessions-list-control.session-list-row-spacing"));
1991
- this._register(
1992
- addDisposableListener(this.listContainer, EventType.POINTER_DOWN, () => {
1993
- this.listContainer.classList.add(SESSION_SECTION_FOCUS_FROM_POINTER_CLASS);
1994
- })
1995
- );
3181
+ this.listContainer.classList.toggle("compact", this.isCompact());
3182
+ const markSectionFocusFromPointer = element => this._register(addDisposableListener(element, EventType.POINTER_DOWN, () => {
3183
+ element.classList.add(SESSION_SECTION_FOCUS_FROM_POINTER_CLASS);
3184
+ }));
3185
+ markSectionFocusFromPointer(this.listContainer);
3186
+ if (this.options.navigationContainer) {
3187
+ markSectionFocusFromPointer(this.options.navigationContainer);
3188
+ }
1996
3189
  this._register(
1997
3190
  addDisposableListener(this.listContainer.ownerDocument, EventType.KEY_DOWN, () => {
1998
3191
  this.listContainer.classList.remove(SESSION_SECTION_FOCUS_FROM_POINTER_CLASS);
3192
+ this.options.navigationContainer?.classList.remove(SESSION_SECTION_FOCUS_FROM_POINTER_CLASS);
1999
3193
  }, true)
2000
3194
  );
2001
3195
  const approvalModel = this.options.approvalModel ?? this._register(instantiationService.createInstance(AgentSessionApprovalModel));
@@ -2019,78 +3213,234 @@ let SessionsList = class SessionsList extends Disposable {
2019
3213
  this.update();
2020
3214
  }));
2021
3215
  this._register(this.configurationService.onDidChangeConfiguration(e => {
2022
- if (e.affectsConfiguration(SESSIONS_LIST_SHOW_EMPTY_DEFAULT_GROUPS_SETTING) || e.affectsConfiguration(ChatSessionArchiveActionWordingSettingId)) {
3216
+ if (e.affectsConfiguration(SESSIONS_LIST_SHOW_EMPTY_DEFAULT_GROUPS_SETTING) || e.affectsConfiguration(SESSIONS_LIST_GROUP_EXTERNAL_SESSIONS_SETTING) || e.affectsConfiguration(ChatSessionArchiveActionWordingSettingId)) {
2023
3217
  this.update();
2024
3218
  }
2025
3219
  }));
2026
3220
  const agentSessionsService = instantiationService.invokeFunction(accessor => accessor.get(IAgentSessionsService));
2027
3221
  const voicePlaybackService = instantiationService.invokeFunction(accessor => accessor.get(IVoicePlaybackService));
3222
+ const externalApplicationBadgeMode = observableConfigValue(
3223
+ SESSIONS_LIST_EXTERNAL_APPLICATION_BADGE_SETTING,
3224
+ ExternalSessionApplicationBadgeMode.Off,
3225
+ this.configurationService
3226
+ );
3227
+ const externalApplicationBadgeShowFrom = observableConfigValue(
3228
+ SESSIONS_LIST_EXTERNAL_APPLICATION_BADGE_SHOW_FROM_SETTING,
3229
+ true,
3230
+ this.configurationService
3231
+ );
3232
+ const reportExternalApplicationBadgeModeExperimentTrigger = () => logDefaultSettingExperimentTrigger(
3233
+ this.configurationService,
3234
+ this.telemetryService,
3235
+ SESSIONS_LIST_EXTERNAL_APPLICATION_BADGE_SETTING
3236
+ );
3237
+ const reportExternalApplicationBadgeShowFromExperimentTrigger = () => logDefaultSettingExperimentTrigger(
3238
+ this.configurationService,
3239
+ this.telemetryService,
3240
+ SESSIONS_LIST_EXTERNAL_APPLICATION_BADGE_SHOW_FROM_SETTING
3241
+ );
2028
3242
  const sessionRenderer = ( new SessionItemRenderer({
2029
3243
  grouping: this.options.grouping,
2030
3244
  isPinned: s => this.isSessionPinned(s),
2031
3245
  isRenderedInCustomGroup: s => this.isRenderedInCustomGroup(s),
3246
+ getGroupConnectorPosition: s => this.renderedComparisonAttemptConnectorPositions.get(s.sessionId),
3247
+ getComparisonAttemptLabel: s => this.renderedComparisonAttemptLabels.get(s.sessionId),
3248
+ shouldShowComparisonAttemptStatus: (s, reader) => this.shouldShowComparisonAttemptStatus(s, reader),
3249
+ isRenderedInExternalSection: s => this.isRenderedInExternalSection(s),
2032
3250
  visibleSessions: this._sessionsService.visibleSessions,
2033
3251
  getMultiSelectedSessions: s => this.getMultiSelectedSessions(s),
2034
3252
  showHover: true,
2035
3253
  useCompactQuickChatRows: true,
3254
+ compact: () => this.isCompact(),
2036
3255
  approvalRowMaxLines: DEFAULT_APPROVAL_ROW_MAX_LINES,
2037
3256
  aggregateChatApprovals: false,
2038
- toolbarMenuId: SessionItemToolbarMenuId,
2039
- onDidRequestRename: session => {
2040
- this.commandService.executeCommand(RENAME_SESSION_COMMAND_ID, session).catch(onUnexpectedError);
2041
- },
3257
+ toolbarMenuId: Menus.SessionItemToolbar,
3258
+ toolbarTelemetrySource: "sessionsList.row",
3259
+ inlineRename: true,
3260
+ contextViewService: this.contextViewService,
3261
+ onDidDoubleClickRename: session => this.preservePendingOpenFocus(session),
3262
+ onDidFinishRename: () => this.tree.domFocus(),
2042
3263
  activeGuideSessionIds: this.activeGuideSessionIds,
2043
3264
  deriveStatusFromMainChat: true,
2044
- archiveOnboardingSession: this.archiveOnboardingSession
3265
+ activeSession: this._sessionsService.activeSession,
3266
+ externalApplicationBadgeMode,
3267
+ externalApplicationBadgeShowFrom,
3268
+ reportExternalApplicationBadgeModeExperimentTrigger,
3269
+ reportExternalApplicationBadgeShowFromExperimentTrigger,
3270
+ collapsedSessionIds: this.collapsedSessionIds,
3271
+ onboardingTarget: this.onboardingTarget
2045
3272
  }, approvalModel, undefined, instantiationService, contextKeyService, this.configurationService, markdownRendererService, hoverService, sessionsProvidersService, this._sessionsManagementService, this.agentHostConnectionsService, this.openerService, this.labelService, this.preferencesService, agentSessionsService, voicePlaybackService));
3273
+ this._sessionRenderer = sessionRenderer;
2046
3274
  const showMoreRenderer = ( new SessionShowMoreRenderer());
2047
3275
  const placeholderRenderer = ( new SessionPlaceholderRenderer(hoverService));
2048
3276
  const chatRenderer = ( new SessionChatItemRenderer(
2049
3277
  hoverService,
2050
3278
  instantiationService,
3279
+ this.contextKeyService,
3280
+ this._sessionsManagementService,
3281
+ this.contextViewService,
2051
3282
  markdownRendererService,
2052
3283
  approvalModel,
2053
3284
  DEFAULT_APPROVAL_ROW_MAX_LINES,
3285
+ item => this.preservePendingOpenFocus(item.session, item.chat),
3286
+ () => this.tree.domFocus(),
3287
+ item => withSessionsListHoverPresentation(createSessionSummaryHover(item.session, getChatSummaryHoverData(
3288
+ item.session,
3289
+ item.chat,
3290
+ sessionsProvidersService,
3291
+ this.openerService,
3292
+ this.labelService,
3293
+ this.preferencesService,
3294
+ getCreatorHoverData(
3295
+ item.session,
3296
+ this._sessionsManagementService,
3297
+ this.agentHostConnectionsService,
3298
+ this.openerService
3299
+ ),
3300
+ this.isCompact()
3301
+ ), this.preferencesService)),
3302
+ () => this.isCompact(),
3303
+ () => {
3304
+ if (this.options.sorting() === SessionsSorting.Updated) {
3305
+ this.nestedSessionOrderUpdate.value = scheduleAtNextAnimationFrame(getWindow(this.listContainer), () => {
3306
+ if (this.visible) {
3307
+ this.update();
3308
+ }
3309
+ });
3310
+ }
3311
+ },
2054
3312
  this.activeGuideSessionIds
2055
3313
  ));
3314
+ this._chatRenderer = chatRenderer;
2056
3315
  const selectHeader = (element, event) => {
2057
3316
  this.tree.setFocus([element], event);
2058
3317
  this.tree.setSelection([element], event);
2059
3318
  };
2060
- const sectionRenderer = ( new SessionSectionRenderer(
3319
+ const showUnreadInCollapsedSections = observableConfigValue(
3320
+ SESSIONS_LIST_SHOW_UNREAD_IN_COLLAPSED_SECTIONS_SETTING,
3321
+ false,
3322
+ this.configurationService
3323
+ );
3324
+ const headerStatusTriggerPending = observableValue(this, true);
3325
+ const headerStatusTrigger = {
3326
+ pending: headerStatusTriggerPending,
3327
+ includeExpanded: observableFromEvent(
3328
+ this,
3329
+ accessibilityService.onDidChangeScreenReaderOptimized,
3330
+ () => accessibilityService.isScreenReaderOptimized()
3331
+ ),
3332
+ report: () => {
3333
+ logSettingExperimentTrigger(
3334
+ this.telemetryService,
3335
+ SESSIONS_LIST_SHOW_UNREAD_IN_COLLAPSED_SECTIONS_SETTING
3336
+ );
3337
+ headerStatusTriggerPending.set(false, undefined);
3338
+ }
3339
+ };
3340
+ const blockedSessions = derived(
3341
+ this,
3342
+ reader => showUnreadInCollapsedSections.read(reader) ? reader.store.add(instantiationService.createInstance(BlockedSessions)) : undefined
3343
+ );
3344
+ const sessionsWithFailingCI = derived(this, reader => ( new Set(
3345
+ blockedSessions.read(reader)?.blockedSessionsWithReasons.read(reader).filter(blocked => blocked.reason === BlockedSessionReason.FailingCI).map(blocked => blocked.session.sessionId)
3346
+ )));
3347
+ const customizationsActive = observableFromEvent(
3348
+ this,
3349
+ editorService.onDidActiveEditorChange,
3350
+ () => editorService.activeEditor instanceof AICustomizationManagementEditorInput
3351
+ );
3352
+ const newSessionKeybindingAriaLabel = observableFromEvent(
3353
+ this,
3354
+ keybindingService.onDidUpdateKeybindings,
3355
+ () => keybindingService.lookupKeybinding(NEW_SESSION_ACTION_ID, this.contextKeyService)?.getAriaLabel() ?? undefined
3356
+ );
3357
+ const customizationsCount = this.options.customizationsCount ?? constObservable(0);
3358
+ const customizationMigrationsAvailable = this.options.customizationMigrationsAvailable ?? constObservable(false);
3359
+ const createSectionRenderer = (templateId, rowClassName) => ( new SessionSectionRenderer(
2061
3360
  true ,
2062
3361
  selectHeader,
3362
+ showUnreadInCollapsedSections,
3363
+ sessionsWithFailingCI,
3364
+ headerStatusTrigger,
2063
3365
  instantiationService,
3366
+ hoverService,
2064
3367
  contextKeyService,
2065
3368
  this.automationService,
2066
3369
  this.automationSessions,
2067
- this.automationsNewBadgeState.presentation,
2068
3370
  this.uriIdentityService,
2069
3371
  this.customViewService,
2070
- this.menuService
3372
+ this.menuService,
3373
+ this.keybindingService,
3374
+ customizationsActive,
3375
+ customizationMigrationsAvailable,
3376
+ templateId,
3377
+ rowClassName,
3378
+ {
3379
+ onDidActivateNewSession: this._onDidActivateNewSession.event,
3380
+ getNewSessionFocusTarget: () => this.navigationList ? {
3381
+ element: this.navigationList.getHTMLElement(),
3382
+ focus: () => this.focusNavigationSection(NEW_SESSION_SECTION_ID)
3383
+ } : undefined
3384
+ }
2071
3385
  ));
3386
+ const sectionRenderer = createSectionRenderer(undefined, "session-list-section-row");
3387
+ const shortcutSectionRenderer = createSectionRenderer(SESSION_SHORTCUT_SECTION_TEMPLATE_ID, "session-list-shortcut-row");
2072
3388
  this._sectionRenderer = sectionRenderer;
2073
3389
  const groupRenderer = ( new SessionGroupRenderer({
2074
3390
  commitEdit: (group, name) => this.commitGroupEdit(group, name),
2075
3391
  cancelEdit: group => this.cancelGroupEdit(group),
2076
- select: selectHeader
2077
- }, instantiationService, contextKeyService));
3392
+ select: selectHeader,
3393
+ toggleCollapsed: element => this.tree.toggleCollapsed(element)
3394
+ }, showUnreadInCollapsedSections, sessionsWithFailingCI, headerStatusTrigger, instantiationService, contextKeyService));
2078
3395
  this._groupRenderer = groupRenderer;
2079
3396
  const delegate = ( new SessionsTreeDelegate(
2080
3397
  approvalModel,
2081
3398
  () => !!IsPhoneLayoutContext.getValue(contextKeyService),
3399
+ () => this.isCompact(),
3400
+ session => getSessionRowStatus(session, undefined, true, ( this.collapsedSessionIds.get().has(session.sessionId))),
2082
3401
  DEFAULT_APPROVAL_ROW_MAX_LINES,
2083
3402
  undefined,
2084
3403
  true ,
2085
3404
  false ,
2086
- true
3405
+ true ,
3406
+ session => ( this.renderedComparisonAttemptLabels.has(session.sessionId))
2087
3407
  ));
2088
3408
  this._delegate = delegate;
3409
+ this.options.navigationContainer?.classList.add("empty");
3410
+ this.navigationList = this.options.navigationContainer ? this._register(instantiationService.createInstance(
3411
+ WorkbenchList,
3412
+ "SessionsNavigationList",
3413
+ this.options.navigationContainer,
3414
+ ( new SessionShortcutListDelegate()),
3415
+ [( new SessionShortcutListRenderer(shortcutSectionRenderer))],
3416
+ {
3417
+ accessibilityProvider: ( new SessionsAccessibilityProvider(shortcutSectionRenderer.automationStatus, {
3418
+ grouping: this.options.grouping,
3419
+ isPinned: session => this.isSessionPinned(session),
3420
+ widgetAriaLabel: ( localize(6175, "Sessions Navigation")),
3421
+ customizationsCount,
3422
+ customizationMigrationsAvailable,
3423
+ newSessionKeybindingAriaLabel
3424
+ })),
3425
+ keyboardNavigationLabelProvider: {
3426
+ getKeyboardNavigationLabel: section => section.label
3427
+ },
3428
+ multipleSelectionSupport: false,
3429
+ openOnSingleClick: true,
3430
+ overrideStyles: this.options.overrideStyles
3431
+ }
3432
+ )) : undefined;
3433
+ if (this.navigationList) {
3434
+ this._register(
3435
+ this.navigationList.onDidOpen(e => this.openNavigationSection(e.element, e.sideBySide))
3436
+ );
3437
+ }
2089
3438
  this.tree = this._register(
2090
3439
  instantiationService.createInstance(WorkbenchObjectTree, "SessionsListTree", this.listContainer, delegate, [
2091
3440
  sessionRenderer,
2092
3441
  chatRenderer,
2093
3442
  sectionRenderer,
3443
+ shortcutSectionRenderer,
2094
3444
  groupRenderer,
2095
3445
  showMoreRenderer,
2096
3446
  placeholderRenderer
@@ -2099,8 +3449,18 @@ let SessionsList = class SessionsList extends Disposable {
2099
3449
  grouping: this.options.grouping,
2100
3450
  isPinned: session => this.isSessionPinned(session),
2101
3451
  isRenderedInCustomGroup: session => this.isRenderedInCustomGroup(session),
3452
+ getComparisonAttemptLabel: session => this.renderedComparisonAttemptLabels.get(session.sessionId),
3453
+ isRenderedInExternalSection: session => this.isRenderedInExternalSection(session),
3454
+ compact: () => this.isCompact(),
3455
+ approvalModel,
3456
+ aggregateChatApprovals: false,
2102
3457
  deriveStatusFromMainChat: true,
2103
- automationNewBadgeVisible: this.automationsNewBadgeState.showNewBadge
3458
+ collapsedSessionIds: this.collapsedSessionIds,
3459
+ showUnreadInCollapsedSections,
3460
+ sessionsWithFailingCI,
3461
+ externalApplicationBadgeMode,
3462
+ reportExternalApplicationBadgeModeExperimentTrigger,
3463
+ reportExternalApplicationBadgeShowFromExperimentTrigger
2104
3464
  })),
2105
3465
  dnd: this._register(( new SessionsListDragAndDrop({
2106
3466
  isReorderable: session => this.isReorderable(session),
@@ -2108,7 +3468,7 @@ let SessionsList = class SessionsList extends Disposable {
2108
3468
  canDropOn: (dragged, target) => this.canReorderOnto(dragged, target),
2109
3469
  reorder: (dragged, target, position) => this.reorderSessions(dragged, target, position),
2110
3470
  getGroupIdOfSession: session => this._sessionGroupsService.getGroupOfSession(session.sessionId),
2111
- getWorkspaceSectionIdOfSession: session => this.getWorkspaceSectionIdOfSession(session),
3471
+ getUngroupedSectionIdOfSession: session => this.getUngroupedSectionIdOfSession(session),
2112
3472
  addSessionsToGroup: (sessions, groupId, target, position) => this.addSessionsToGroup(sessions, groupId, target, position),
2113
3473
  removeSessionsFromGroup: (sessions, target, position) => this.removeSessionsFromGroup(sessions, target, position),
2114
3474
  pinSessions: (sessions, target, position) => this.pinSessions(sessions, target, position),
@@ -2154,8 +3514,11 @@ let SessionsList = class SessionsList extends Disposable {
2154
3514
  }
2155
3515
  },
2156
3516
  horizontalScrolling: false,
3517
+ transformOptimization: false,
2157
3518
  multipleSelectionSupport: true,
2158
- expandOnlyOnTwistieClick: element => isSessionItem(element),
3519
+ allowNonCollapsibleParents: true,
3520
+ enableStickyScroll: true,
3521
+ expandOnlyOnTwistieClick: element => isSessionItem(element) || (isSessionGroupItem(element) && element.comparison !== undefined),
2159
3522
  findWidgetEnabled: true,
2160
3523
  defaultFindMode: TreeFindMode.Filter,
2161
3524
  findWidgetContainer: this.options.findWidgetContainer,
@@ -2169,7 +3532,7 @@ let SessionsList = class SessionsList extends Disposable {
2169
3532
  keyboardNavigationLabelProvider: {
2170
3533
  getKeyboardNavigationLabel: element => {
2171
3534
  if (isSessionGroupItem(element)) {
2172
- return element.group.name;
3535
+ return element.comparison?.title ?? element.group.name;
2173
3536
  }
2174
3537
  if (isSessionSection(element)) {
2175
3538
  return element.label;
@@ -2188,7 +3551,7 @@ let SessionsList = class SessionsList extends Disposable {
2188
3551
  },
2189
3552
  overrideStyles: this.options.overrideStyles,
2190
3553
  renderIndentGuides: RenderIndentGuides.None,
2191
- twistieAdditionalCssClass: element => isSessionItem(element) && getSessionListChats(element).length > 0 ? "session-chat-twistie" : "force-no-twistie"
3554
+ twistieAdditionalCssClass: element => isSessionItem(element) && getSessionListChats(element, undefined, !this._excludeArchived).length > 0 ? "session-chat-twistie" : "force-no-twistie"
2192
3555
  })
2193
3556
  );
2194
3557
  const focusedChatItemContext = SessionsListFocusedChatItemContext.bindTo(this.tree.contextKeyService);
@@ -2197,6 +3560,9 @@ let SessionsList = class SessionsList extends Disposable {
2197
3560
  defaultIndent: 0,
2198
3561
  expandOnDoubleClick: false
2199
3562
  });
3563
+ if (this.options.onDidScroll) {
3564
+ this._register(this.tree.onDidScroll(() => this.options.onDidScroll?.()));
3565
+ }
2200
3566
  const guideOwnerSessionId = element => {
2201
3567
  if (element && isSessionItem(element)) {
2202
3568
  return element.sessionId;
@@ -2224,6 +3590,11 @@ let SessionsList = class SessionsList extends Disposable {
2224
3590
  this.hoveredGuideSessionId.set(undefined, undefined);
2225
3591
  }
2226
3592
  }));
3593
+ this._register(this.tree.onMouseClick(e => {
3594
+ if (e.element && isSessionGroupItem(e.element) && e.element.comparison && e.browserEvent.button === 0) {
3595
+ this.commandService.executeCommand(OPEN_SESSION_COMPARISON_COMMAND_ID, e.element.comparison.id);
3596
+ }
3597
+ }));
2227
3598
  this._register(this.tree.onDidChangeSelection(() => {
2228
3599
  this.selectedGuideSessionIds.set(guideOwnerSessionIds(this.tree.getSelection()), undefined);
2229
3600
  }));
@@ -2242,6 +3613,10 @@ let SessionsList = class SessionsList extends Disposable {
2242
3613
  if (!element) {
2243
3614
  return;
2244
3615
  }
3616
+ if (isSessionSection(element) && element.id === AUTOMATIONS_SECTION_ID) {
3617
+ await this.commandService.executeCommand("sessionsView.manageAutomations");
3618
+ return;
3619
+ }
2245
3620
  if (isSessionShowMore(element)) {
2246
3621
  if (element.kind === "folders") {
2247
3622
  this.expandedMoreFolders = element.mode === "more";
@@ -2259,34 +3634,23 @@ let SessionsList = class SessionsList extends Disposable {
2259
3634
  return;
2260
3635
  }
2261
3636
  if (isSessionChatItem(element)) {
2262
- if (this.options.canOpenSession && !(await this.options.canOpenSession(element.session))) {
2263
- return;
2264
- }
2265
- this.markRead(element.session);
2266
3637
  const isLeftClick = isMouseEvent(e.browserEvent) && e.browserEvent.button === 0;
2267
3638
  const preserveFocus = isLeftClick ? false : (e.editorOptions.preserveFocus ?? false);
2268
- if (this.options.onChatOpen) {
2269
- this.options.onChatOpen(element.session, element.chat, preserveFocus, e.sideBySide);
2270
- } else {
2271
- this._sessionsService.openChat(element.session, element.chat.resource, {
2272
- preserveFocus
2273
- }).catch(onUnexpectedError);
2274
- }
3639
+ await this.beginOpenRequest(element.session, element.chat, preserveFocus, e.sideBySide);
2275
3640
  return;
2276
3641
  }
2277
- if (isSessionSection(element) && element.id === AUTOMATIONS_SECTION_ID) {
2278
- this.tree.setSelection([]);
2279
- this.commandService.executeCommand("sessionsView.manageAutomations");
3642
+ if (isSessionGroupItem(element) && element.comparison) {
3643
+ if (!isMouseEvent(e.browserEvent) || e.browserEvent.button !== 0) {
3644
+ this.commandService.executeCommand(OPEN_SESSION_COMPARISON_COMMAND_ID, element.comparison.id);
3645
+ }
2280
3646
  return;
2281
3647
  }
2282
3648
  if (!isSessionSection(element) && !isSessionGroupItem(element)) {
2283
- if (this.options.canOpenSession && !(await this.options.canOpenSession(element))) {
2284
- return;
2285
- }
2286
- this.markRead(element);
2287
3649
  const isLeftClick = isMouseEvent(e.browserEvent) && e.browserEvent.button === 0;
2288
3650
  const preserveFocus = isLeftClick ? false : (e.editorOptions.preserveFocus ?? false);
2289
- this.options.onSessionOpen(element.resource, preserveFocus, e.sideBySide);
3651
+ if (!(await this.beginOpenRequest(element, undefined, preserveFocus, e.sideBySide))) {
3652
+ return;
3653
+ }
2290
3654
  if (this._listVoicePlaybackService.hasPendingResponse(element.resource)) {
2291
3655
  this.commandService.executeCommand("_chat.voice.activateSession", ( element.resource.toString()));
2292
3656
  }
@@ -2311,15 +3675,7 @@ let SessionsList = class SessionsList extends Disposable {
2311
3675
  if (!e.affectsSome(phoneKeys)) {
2312
3676
  return;
2313
3677
  }
2314
- const updateNodeHeights = node => {
2315
- if (node.element && (isSessionItem(node.element) || isSessionChatItem(node.element))) {
2316
- this.tree.updateElementHeight(node.element, delegate.getHeight(node.element));
2317
- }
2318
- for (const child of node.children) {
2319
- updateNodeHeights(child);
2320
- }
2321
- };
2322
- updateNodeHeights(this.tree.getNode());
3678
+ this.setCompact();
2323
3679
  }));
2324
3680
  this._register(this.tree.onContextMenu(e => this.onContextMenu(e)));
2325
3681
  this._register(this.tree.onDidChangeCollapseState(e => {
@@ -2332,7 +3688,12 @@ let SessionsList = class SessionsList extends Disposable {
2332
3688
  } else if (element && isSessionSection(element)) {
2333
3689
  sectionRenderer.updateCollapseState(element, e.node.collapsed);
2334
3690
  if (!this.suspendCollapseStatePersistence) {
2335
- this.saveSectionCollapseState(element.id, e.node.collapsed);
3691
+ this.saveSectionCollapseState(element.collapseStateId ?? element.id, e.node.collapsed);
3692
+ }
3693
+ } else if (element && isSessionItem(element)) {
3694
+ this.syncCollapsedSessionIds();
3695
+ if (!this.suspendCollapseStatePersistence) {
3696
+ this.saveSessionCollapseState(element, e.node.collapsed);
2336
3697
  }
2337
3698
  }
2338
3699
  }));
@@ -2347,6 +3708,7 @@ let SessionsList = class SessionsList extends Disposable {
2347
3708
  };
2348
3709
  this._register(this.tree.onDidChangeFindOpenState(open => {
2349
3710
  isFindOpen = open;
3711
+ this.findOpen.set(open, undefined);
2350
3712
  this._onDidChangeFindOpenState.fire(open);
2351
3713
  updateFindPatternState();
2352
3714
  }));
@@ -2385,6 +3747,7 @@ let SessionsList = class SessionsList extends Disposable {
2385
3747
  this.update();
2386
3748
  }
2387
3749
  }));
3750
+ this._register(this.filters.onDidChange(() => this.update()));
2388
3751
  this._register(autorun(reader => {
2389
3752
  const activeSession = this._sessionsService.activeSession.read(reader);
2390
3753
  activeSession?.activeChat.read(reader);
@@ -2419,7 +3782,9 @@ let SessionsList = class SessionsList extends Disposable {
2419
3782
  let initialized = false;
2420
3783
  this.sessionChatsObserver.value = autorun(reader => {
2421
3784
  for (const session of this.sessions) {
2422
- getSessionListChats(session, reader);
3785
+ getSessionListChats(session, reader, !this._excludeArchived);
3786
+ session.isExternal?.read(reader);
3787
+ session.application.read(reader);
2423
3788
  }
2424
3789
  if (initialized && this.visible) {
2425
3790
  this.update();
@@ -2434,26 +3799,24 @@ let SessionsList = class SessionsList extends Disposable {
2434
3799
  }
2435
3800
  update(expandAll) {
2436
3801
  const activeSession = this._sessionsService.activeSession.get();
2437
- const archiveOnboardingSession = this.archiveOnboardingSession.get();
3802
+ const onboardingSession = this.onboardingTarget.get()?.session;
3803
+ const nextNestedSessionResources = ( new Set(
3804
+ this.sessions.filter(session => getSessionListChats(session).length > 0).map(session => ( session.resource.toString()))
3805
+ ));
2438
3806
  let filtered = this.sessions.filter(session => !isAutomationSession(session));
2439
3807
  const scopedProviderIds = this._agentHostFilterService.selectedHost?.providerIds;
2440
3808
  if (scopedProviderIds) {
2441
3809
  const scoped = ( new Set(scopedProviderIds));
2442
3810
  filtered = filtered.filter(s => ( scoped.has(s.providerId)));
2443
3811
  }
2444
- if (this.excludedSessionTypes.size > 0) {
2445
- filtered = filtered.filter(s => !( this.excludedSessionTypes.has(s.sessionType)));
2446
- }
2447
- if (this.excludedStatuses.size > 0) {
2448
- filtered = filtered.filter(s => !( this.excludedStatuses.has(s.status.get())));
3812
+ filtered = filtered.filter(session => this.filters.matches(session));
3813
+ if (this._excludeArchivedIsDefault && ( filtered.some(session => hasArchivedListContent(session)))) {
3814
+ logSettingExperimentTrigger(this.telemetryService, SESSIONS_LIST_SHOW_ARCHIVED_BY_DEFAULT_SETTING);
2449
3815
  }
2450
3816
  if (this._excludeArchived) {
2451
3817
  filtered = filtered.filter(s => !s.isArchived.get());
2452
3818
  }
2453
- if (this._excludeRead) {
2454
- filtered = filtered.filter(s => !s.isRead.get());
2455
- }
2456
- for (const revealedSession of [activeSession, archiveOnboardingSession]) {
3819
+ for (const revealedSession of [activeSession, onboardingSession]) {
2457
3820
  if (revealedSession && !( filtered.some(s => s.sessionId === revealedSession.sessionId))) {
2458
3821
  const match = this.sessions.find(s => s.sessionId === revealedSession.sessionId && !isAutomationSession(s));
2459
3822
  if (match) {
@@ -2461,6 +3824,10 @@ let SessionsList = class SessionsList extends Disposable {
2461
3824
  }
2462
3825
  }
2463
3826
  }
3827
+ filtered = filtered.filter(session => {
3828
+ const comparison = this.sessionComparisonService.getComparisonForSession(session.resource);
3829
+ return !comparison || !isComparisonLaunchPending(comparison);
3830
+ });
2464
3831
  const grouping = this.options.grouping();
2465
3832
  const sorting = this.options.sorting();
2466
3833
  const sortKeyForGrouping = (s, srt) => this._sessionsListModelService.getSortKey(s, sortingToMode(srt));
@@ -2479,15 +3846,43 @@ let SessionsList = class SessionsList extends Disposable {
2479
3846
  }
2480
3847
  }
2481
3848
  const forSections = groupedRegularIds.size > 0 ? filtered.filter(s => !( groupedRegularIds.has(s.sessionId))) : filtered;
3849
+ if (( forSections.some(
3850
+ session => session.isExternal?.get() && !session.isArchived.get() && !this.isSessionPinned(session)
3851
+ ))) {
3852
+ logSettingExperimentTrigger(this.telemetryService, SESSIONS_LIST_GROUP_EXTERNAL_SESSIONS_SETTING);
3853
+ }
2482
3854
  const groupItemsById = ( new Map());
3855
+ const comparisonsByGroupId = ( new Map(
3856
+ this.sessionComparisonService.comparisons.get().map(comparison => [comparison.groupId, comparison])
3857
+ ));
3858
+ this.renderedComparisonAttemptConnectorPositions.clear();
3859
+ this.renderedComparisonAttemptLabels.clear();
2483
3860
  for (const group of this._sessionGroupsService.getGroups()) {
2484
3861
  const members = groupedMembers.get(group.id) ?? [];
2485
- const sortedMembers = sortSessions(members, sorting, sortKeyForGrouping);
3862
+ const comparison = comparisonsByGroupId.get(group.id);
3863
+ const sortedMembers = comparison ? sortComparisonGroupMembers(comparison, members, sorting, sortKeyForGrouping) : sortSessions(members, sorting, sortKeyForGrouping);
3864
+ if (comparison) {
3865
+ const attempts = comparison.participants.filter(
3866
+ participant => participant.role === SessionComparisonParticipantRole.Attempt
3867
+ );
3868
+ for (const participant of attempts) {
3869
+ const session = participant.sessionResource ? members.find(member => isEqual(member.resource, participant.sessionResource)) : undefined;
3870
+ if (session) {
3871
+ this.renderedComparisonAttemptLabels.set(session.sessionId, getSessionComparisonHarnessLabel(participant));
3872
+ }
3873
+ }
3874
+ }
2486
3875
  groupItemsById.set(group.id, {
2487
3876
  group,
2488
3877
  sessions: sortedMembers,
2489
3878
  isEmpty: this._sessionGroupsService.getSessionIdsInGroup(group.id).length === 0,
2490
- editing: group.id === this._editingGroupId
3879
+ editing: group.id === this._editingGroupId,
3880
+ comparison: comparison ? {
3881
+ id: comparison.id,
3882
+ title: comparison.title,
3883
+ launching: comparison.launching === true,
3884
+ summary: reader => getComparisonGroupSummary(comparison, this.sessions, reader)
3885
+ } : undefined
2491
3886
  });
2492
3887
  }
2493
3888
  const defaultGroupIds = [...( groupItemsById.values())].sort((a, b) => b.group.createdAt - a.group.createdAt).map(item => `group:${item.group.id}`);
@@ -2497,14 +3892,15 @@ let SessionsList = class SessionsList extends Disposable {
2497
3892
  sorting,
2498
3893
  session => this.isSessionPinned(session),
2499
3894
  (s, srt) => this._sessionsListModelService.getSortKey(s, sortingToMode(srt)),
2500
- getChatSessionArchivedSectionLabel(getChatSessionArchiveActionWording(this.configurationService))
3895
+ getChatSessionArchivedSectionLabel(getChatSessionArchiveActionWording(this.configurationService)),
3896
+ this.groupExternalSessions
2501
3897
  );
2502
3898
  const hasRecentSessions = ( sections.some(s => s.id === "recent" && s.sessions.length > 0));
2503
3899
  const showEmptyDefaultGroups = this.configurationService.getValue(SESSIONS_LIST_SHOW_EMPTY_DEFAULT_GROUPS_SETTING);
2504
3900
  if (showEmptyDefaultGroups && this._someProviderSupportsQuickChats() && !( sections.some(s => s.id === QUICK_CHATS_SECTION_ID))) {
2505
3901
  sections.push({
2506
3902
  id: QUICK_CHATS_SECTION_ID,
2507
- label: ( localize(4934, "Chats")),
3903
+ label: ( localize(6176, "Chats")),
2508
3904
  sessions: []
2509
3905
  });
2510
3906
  }
@@ -2538,7 +3934,7 @@ let SessionsList = class SessionsList extends Disposable {
2538
3934
  }
2539
3935
  }
2540
3936
  for (const section of workspaceSections) {
2541
- if (!meetsCriteria(section) && section.id !== fallbackId && !this._sessionSectionOrderService.isPromoted(section.id) && !( section.sessions.some(session => session.sessionId === archiveOnboardingSession?.sessionId))) {
3937
+ if (!meetsCriteria(section) && section.id !== fallbackId && !this._sessionSectionOrderService.isPromoted(section.id) && !( section.sessions.some(session => session.sessionId === onboardingSession?.sessionId))) {
2542
3938
  moreFolderSectionIds.add(section.id);
2543
3939
  }
2544
3940
  }
@@ -2547,13 +3943,16 @@ let SessionsList = class SessionsList extends Disposable {
2547
3943
  const children = [];
2548
3944
  const sessionGroupLimit = this.sessionGroupLimit.get();
2549
3945
  const toSessionChildren = sessions => sessions.map(session => {
2550
- const chats = getSessionListChats(session);
3946
+ const chats = sortSessionListChats(getSessionListChats(session, undefined, !this._excludeArchived), sorting);
3947
+ const resource = ( session.resource.toString());
3948
+ const wasNested = ( this.nestedSessionResources.has(resource));
3949
+ const persistedCollapsed = ( this.collapsedSessionResources.has(resource));
2551
3950
  return {
2552
3951
  element: session,
2553
3952
  collapsible: chats.length > 0,
2554
- collapsed: ObjectTreeElementCollapseState.PreserveOrExpanded,
2555
- children: chats.length > 0 ? chats.map(chat => ({
2556
- element: ( new SessionChatItem(session, chat))
3953
+ collapsed: wasNested ? persistedCollapsed ? ObjectTreeElementCollapseState.PreserveOrCollapsed : ObjectTreeElementCollapseState.PreserveOrExpanded : persistedCollapsed ? ObjectTreeElementCollapseState.Collapsed : ObjectTreeElementCollapseState.Expanded,
3954
+ children: chats.length > 0 ? chats.map((chat, index) => ({
3955
+ element: ( new SessionChatItem(session, chat, index === chats.length - 1))
2557
3956
  })) : undefined
2558
3957
  };
2559
3958
  });
@@ -2563,7 +3962,7 @@ let SessionsList = class SessionsList extends Disposable {
2563
3962
  expanded: ( this.expandedSessionGroups.has(sectionId)),
2564
3963
  sectionId,
2565
3964
  sectionLabel,
2566
- revealSessionId: archiveOnboardingSession?.sessionId
3965
+ revealSessionId: onboardingSession?.sessionId
2567
3966
  });
2568
3967
  const children = toSessionChildren(limited.sessions);
2569
3968
  if (limited.showMore) {
@@ -2574,7 +3973,7 @@ let SessionsList = class SessionsList extends Disposable {
2574
3973
  return children;
2575
3974
  };
2576
3975
  const renderSection = section => {
2577
- if (section.id === AUTOMATIONS_SECTION_ID) {
3976
+ if (isShortcutSection(section.id)) {
2578
3977
  return {
2579
3978
  element: section,
2580
3979
  children: [],
@@ -2589,7 +3988,7 @@ let SessionsList = class SessionsList extends Disposable {
2589
3988
  element: {
2590
3989
  placeholder: true,
2591
3990
  sectionId: section.id,
2592
- label: ( localize(4935, "No chats"))
3991
+ label: ( localize(6177, "No chats"))
2593
3992
  }
2594
3993
  }];
2595
3994
  }
@@ -2609,7 +4008,10 @@ let SessionsList = class SessionsList extends Disposable {
2609
4008
  return {
2610
4009
  element: section,
2611
4010
  collapsible: true,
2612
- collapsed: this.getSavedCollapseState(section.id) ?? defaultCollapsed,
4011
+ collapsed: this.getSavedCollapseState(
4012
+ section.collapseStateId ?? section.id,
4013
+ section.collapseStateId ? section.id : undefined
4014
+ ) ?? defaultCollapsed,
2613
4015
  children: sectionChildren
2614
4016
  };
2615
4017
  };
@@ -2619,9 +4021,9 @@ let SessionsList = class SessionsList extends Disposable {
2619
4021
  element: {
2620
4022
  placeholder: true,
2621
4023
  sectionId,
2622
- label: ( localize(4936, "No session")),
4024
+ label: ( localize(6178, "No session")),
2623
4025
  hover: ( localize(
2624
- 4937,
4026
+ 6179,
2625
4027
  "Use Add to Group from a session's context menu, or drag it into this group."
2626
4028
  ))
2627
4029
  }
@@ -2631,6 +4033,16 @@ let SessionsList = class SessionsList extends Disposable {
2631
4033
  groupItem.group.name,
2632
4034
  !this.hasFindPattern && this.workspaceGroupCapped
2633
4035
  );
4036
+ const visibleGroupSessions = groupChildren.map(child => child.element).filter(isSessionItem);
4037
+ const connectorSessions = groupItem.comparison ? visibleGroupSessions.filter(session => ( this.renderedComparisonAttemptLabels.has(session.sessionId))) : [];
4038
+ if (connectorSessions.length > 1) {
4039
+ for (let index = 0; index < connectorSessions.length; index++) {
4040
+ this.renderedComparisonAttemptConnectorPositions.set(
4041
+ connectorSessions[index].sessionId,
4042
+ index === 0 ? "first" : index === connectorSessions.length - 1 ? "last" : "middle"
4043
+ );
4044
+ }
4045
+ }
2634
4046
  return {
2635
4047
  element: groupItem,
2636
4048
  collapsible: true,
@@ -2638,14 +4050,35 @@ let SessionsList = class SessionsList extends Disposable {
2638
4050
  children: groupChildren
2639
4051
  };
2640
4052
  };
4053
+ const navigationSections = [];
4054
+ const showNavigationShortcuts = this.options.showNavigationShortcuts?.() === true;
4055
+ if (showNavigationShortcuts) {
4056
+ navigationSections.push({
4057
+ id: NEW_SESSION_SECTION_ID,
4058
+ label: ( localize(6180, "New Session")),
4059
+ sessions: []
4060
+ });
4061
+ }
2641
4062
  if (this.contextKeyService.getContextKeyValue(ChatAutomationsEnabledContext.key)) {
2642
- void this.automationsNewBadgeState.initialize().catch(onUnexpectedError);
2643
- children.push(renderSection({
4063
+ const automationsSection = {
2644
4064
  id: AUTOMATIONS_SECTION_ID,
2645
- label: ( localize(4938, "Automations")),
4065
+ label: ( localize(6181, "Automations")),
2646
4066
  sessions: []
2647
- }));
4067
+ };
4068
+ if (showNavigationShortcuts) {
4069
+ navigationSections.push(automationsSection);
4070
+ } else {
4071
+ children.push(renderSection(automationsSection));
4072
+ }
4073
+ }
4074
+ if (showNavigationShortcuts) {
4075
+ navigationSections.push({
4076
+ id: CUSTOMIZATIONS_SECTION_ID,
4077
+ label: ( localize(6182, "Customizations")),
4078
+ sessions: []
4079
+ });
2648
4080
  }
4081
+ this.setNavigationSections(navigationSections);
2649
4082
  const pinnedSection = sections.find(s => s.id === "pinned");
2650
4083
  if (pinnedSection) {
2651
4084
  children.push(renderSection(pinnedSection));
@@ -2667,15 +4100,11 @@ let SessionsList = class SessionsList extends Disposable {
2667
4100
  renderGroupById(id);
2668
4101
  }
2669
4102
  for (const section of sections) {
2670
- if (section.id === "pinned" || section.id === "archived" || section.id === QUICK_CHATS_SECTION_ID) {
4103
+ if (section.id === "pinned" || section.id === "archived" || section.id === QUICK_CHATS_SECTION_ID || section.id === EXTERNAL_SESSIONS_SECTION_ID) {
2671
4104
  continue;
2672
4105
  }
2673
4106
  children.push(renderSection(section));
2674
4107
  }
2675
- const archived = sections.find(s => s.id === "archived");
2676
- if (archived) {
2677
- children.push(renderSection(archived));
2678
- }
2679
4108
  } else {
2680
4109
  const workspaceSections = sections.filter(s => s.id.startsWith("workspace:"));
2681
4110
  const sectionById = ( new Map(workspaceSections.map(s => [s.id, s])));
@@ -2722,16 +4151,87 @@ let SessionsList = class SessionsList extends Disposable {
2722
4151
  });
2723
4152
  }
2724
4153
  }
2725
- const archivedSection = sections.find(s => s.id === "archived");
2726
- if (archivedSection) {
2727
- children.push(renderSection(archivedSection));
2728
- }
4154
+ }
4155
+ const externalSection = sections.find(s => s.id === EXTERNAL_SESSIONS_SECTION_ID);
4156
+ if (externalSection) {
4157
+ children.push(renderSection(externalSection));
4158
+ }
4159
+ const archivedSection = sections.find(s => s.id === "archived");
4160
+ if (archivedSection) {
4161
+ children.push(renderSection(archivedSection));
2729
4162
  }
2730
4163
  this.tree.setChildren(null, children);
2731
- this.reconcileChatApprovalHeights();
4164
+ this.nestedSessionResources = nextNestedSessionResources;
4165
+ this.syncCollapsedSessionIds();
4166
+ this.reconcileChatRowHeights();
2732
4167
  this._onDidUpdate.fire();
2733
4168
  }
2734
- reconcileChatApprovalHeights() {
4169
+ setNavigationSections(sections) {
4170
+ if (!this.navigationList || !this.options.navigationContainer) {
4171
+ return;
4172
+ }
4173
+ if (sections.length === this.navigationSections.length && sections.every((section, index) => section.id === this.navigationSections[index].id)) {
4174
+ return;
4175
+ }
4176
+ const focusedSectionId = this.navigationList.getFocusedElements()[0]?.id;
4177
+ const hadDomFocus = isAncestorOfActiveElement(this.options.navigationContainer);
4178
+ this.navigationSections = sections;
4179
+ this.navigationList.splice(0, this.navigationList.length, sections);
4180
+ this.options.navigationContainer.classList.toggle("empty", sections.length === 0);
4181
+ this.layoutNavigation(this.options.navigationContainer.clientWidth);
4182
+ this.options.onDidChangeNavigationHeight?.();
4183
+ if (hadDomFocus && focusedSectionId) {
4184
+ const focusedIndex = sections.findIndex(section => section.id === focusedSectionId);
4185
+ if (focusedIndex >= 0) {
4186
+ this.navigationList.setFocus([focusedIndex]);
4187
+ this.navigationList.domFocus();
4188
+ }
4189
+ }
4190
+ }
4191
+ layoutNavigation(width) {
4192
+ this.navigationList?.layout(this.navigationSections.length * SESSION_SHORTCUT_ROW_HEIGHT, width);
4193
+ }
4194
+ async openNavigationSection(section, sideBySide) {
4195
+ if (!section || !this.navigationList) {
4196
+ return;
4197
+ }
4198
+ this.navigationList.setSelection([]);
4199
+ switch (section.id) {
4200
+ case NEW_SESSION_SECTION_ID:
4201
+ this._onDidActivateNewSession.fire();
4202
+ logSessionsInteraction(this.telemetryService, "newSession", "sidebar");
4203
+ await this.commandService.executeCommand(NEW_SESSION_ACTION_ID, sideBySide ? {
4204
+ toSide: true
4205
+ } : undefined);
4206
+ if (this.options.navigationContainer && isAncestorOfActiveElement(this.options.navigationContainer)) {
4207
+ this.options.focusNewSessionInput?.();
4208
+ }
4209
+ break;
4210
+ case AUTOMATIONS_SECTION_ID:
4211
+ await this.commandService.executeCommand("sessionsView.manageAutomations");
4212
+ break;
4213
+ case CUSTOMIZATIONS_SECTION_ID:
4214
+ await this.commandService.executeCommand(OPEN_AI_CUSTOMIZATIONS_COMMAND_ID);
4215
+ break;
4216
+ }
4217
+ }
4218
+ syncCollapsedSessionIds() {
4219
+ const collapsedSessionIds = ( new Set());
4220
+ const collect = node => {
4221
+ if (node.element && isSessionItem(node.element) && node.collapsed) {
4222
+ collapsedSessionIds.add(node.element.sessionId);
4223
+ }
4224
+ for (const child of node.children) {
4225
+ collect(child);
4226
+ }
4227
+ };
4228
+ collect(this.tree.getNode(null));
4229
+ const current = this.collapsedSessionIds.get();
4230
+ if (current.size !== collapsedSessionIds.size || ( [...current].some(sessionId => !( collapsedSessionIds.has(sessionId))))) {
4231
+ this.collapsedSessionIds.set(collapsedSessionIds, undefined);
4232
+ }
4233
+ }
4234
+ reconcileChatRowHeights() {
2735
4235
  const chatItems = [];
2736
4236
  const collect = node => {
2737
4237
  if (node.element && isSessionChatItem(node.element)) {
@@ -2743,14 +4243,19 @@ let SessionsList = class SessionsList extends Disposable {
2743
4243
  };
2744
4244
  collect(this.tree.getNode());
2745
4245
  if (chatItems.length === 0) {
2746
- this.chatApprovalHeightReconcile.clear();
4246
+ this.chatRowHeightReconcile.clear();
2747
4247
  return;
2748
4248
  }
2749
- this.chatApprovalHeightReconcile.value = autorun(reader => {
4249
+ this.chatRowHeightReconcile.value = autorun(reader => {
2750
4250
  for (const chatItem of chatItems) {
2751
4251
  this._approvalModel.getApproval(chatItem.chat.resource).read(reader);
2752
- if (this.tree.hasElement(chatItem)) {
4252
+ if (this.tree.hasElement(chatItem) && this.tree.getRelativeTop(chatItem) !== null) {
4253
+ chatItem.session.workspace.read(reader);
4254
+ chatItem.chat.workspace.read(reader);
4255
+ chatItem.chat.updatedAt.read(reader);
2753
4256
  this.tree.updateElementHeight(chatItem, this._delegate.getHeight(chatItem));
4257
+ } else if (this.tree.hasElement(chatItem)) {
4258
+ this.tree.updateElementHeight(chatItem, this._delegate.getHeightWithoutChatWorkspace(chatItem));
2754
4259
  }
2755
4260
  }
2756
4261
  });
@@ -2772,8 +4277,16 @@ let SessionsList = class SessionsList extends Disposable {
2772
4277
  this.tree.setSelection([session]);
2773
4278
  return;
2774
4279
  }
2775
- this.tree.expand(session);
2776
- this.tree.reveal(chatItem, 0.5);
4280
+ const previousSuspendCollapseStatePersistence = this.suspendCollapseStatePersistence;
4281
+ this.suspendCollapseStatePersistence = true;
4282
+ try {
4283
+ this.tree.expand(session);
4284
+ } finally {
4285
+ this.suspendCollapseStatePersistence = previousSuspendCollapseStatePersistence;
4286
+ }
4287
+ if (this.tree.getRelativeTop(chatItem) === null) {
4288
+ this.tree.reveal(chatItem, 0.5);
4289
+ }
2777
4290
  this.tree.setFocus([chatItem]);
2778
4291
  this.tree.setSelection([chatItem]);
2779
4292
  }
@@ -2817,11 +4330,24 @@ let SessionsList = class SessionsList extends Disposable {
2817
4330
  return false;
2818
4331
  }
2819
4332
  revealArchiveAction(session) {
4333
+ return this.revealOnboardingTarget(session, true);
4334
+ }
4335
+ revealSessionForOnboarding(session) {
4336
+ return this.revealOnboardingTarget(session, false);
4337
+ }
4338
+ revealOnboardingTarget(session, archiveAction) {
2820
4339
  this.customViewService.hideCustomView();
2821
4340
  this.closeFind();
2822
- this.archiveOnboardingSession.set(session, undefined);
4341
+ const target = {
4342
+ session,
4343
+ archiveAction
4344
+ };
4345
+ this.onboardingTarget.set(target, undefined);
2823
4346
  const release = toDisposable(() => {
2824
- this.archiveOnboardingSession.set(undefined, undefined);
4347
+ if (this.onboardingTarget.get() !== target) {
4348
+ return;
4349
+ }
4350
+ this.onboardingTarget.set(undefined, undefined);
2825
4351
  if (!this._store.isDisposed) {
2826
4352
  this.update();
2827
4353
  }
@@ -2829,14 +4355,14 @@ let SessionsList = class SessionsList extends Disposable {
2829
4355
  try {
2830
4356
  this.update();
2831
4357
  if (!this.reveal(session.resource)) {
2832
- throw ( new Error(( localize(4939, "The session could not be revealed in the sessions list. Try again."))));
4358
+ throw ( new Error(( localize(6183, "The session could not be revealed in the sessions list. Try again."))));
2833
4359
  }
2834
4360
  } catch (error) {
2835
4361
  release.dispose();
2836
4362
  throw error;
2837
4363
  }
2838
4364
  return {
2839
- targetId: getSessionArchiveOnboardingTargetId(session),
4365
+ targetId: archiveAction ? getSessionArchiveOnboardingTargetId(session) : getSessionOnboardingTargetId(session),
2840
4366
  dispose: () => release.dispose()
2841
4367
  };
2842
4368
  }
@@ -2844,6 +4370,31 @@ let SessionsList = class SessionsList extends Disposable {
2844
4370
  this.tree.setFocus([]);
2845
4371
  this.tree.setSelection([]);
2846
4372
  }
4373
+ findItem(item) {
4374
+ const extUri = this.uriIdentityService.extUri;
4375
+ if (hasKey(item, {
4376
+ group: true
4377
+ })) {
4378
+ return this.findTreeElement(element => isSessionGroupItem(element) && element.group.id === item.group);
4379
+ }
4380
+ if (hasKey(item, {
4381
+ section: true
4382
+ })) {
4383
+ return this.findTreeElement(element => isSessionSection(element) && element.id === item.section);
4384
+ }
4385
+ const {
4386
+ session,
4387
+ chat
4388
+ } = item;
4389
+ if (chat) {
4390
+ return this.findTreeElement(
4391
+ element => isSessionChatItem(element) && extUri.isEqual(element.session.resource, session) && extUri.isEqual(element.chat.resource, chat)
4392
+ );
4393
+ }
4394
+ return this.findTreeElement(
4395
+ element => isSessionItem(element) && extUri.isEqual(element.resource, session)
4396
+ );
4397
+ }
2847
4398
  hasFocusOrSelection() {
2848
4399
  return this.tree.getFocus().length > 0 || this.tree.getSelection().length > 0;
2849
4400
  }
@@ -2869,14 +4420,62 @@ let SessionsList = class SessionsList extends Disposable {
2869
4420
  this.refresh();
2870
4421
  }
2871
4422
  }
2872
- layout(height, width) {
2873
- this.tree.layout(height, width);
4423
+ layout(height, width) {
4424
+ this.layoutNavigation(width);
4425
+ this.tree.layout(height, width);
4426
+ }
4427
+ setCompact() {
4428
+ this.listContainer.classList.toggle("compact", this.isCompact());
4429
+ this.update();
4430
+ }
4431
+ focus() {
4432
+ this.tree.domFocus();
4433
+ if (this.tree.getFocus().length === 0) {
4434
+ this.tree.focusFirst();
4435
+ }
4436
+ }
4437
+ isAutomationsFocused() {
4438
+ return this.isNavigationSectionFocused(AUTOMATIONS_SECTION_ID) || (isAncestorOfActiveElement(this.listContainer) && ( this.tree.getFocus().some(
4439
+ element => !!element && isSessionSection(element) && element.id === AUTOMATIONS_SECTION_ID
4440
+ )));
4441
+ }
4442
+ focusAutomations() {
4443
+ if (( this.navigationSections.some(section => section.id === AUTOMATIONS_SECTION_ID))) {
4444
+ this.focusNavigationSection(AUTOMATIONS_SECTION_ID);
4445
+ } else {
4446
+ this.closeFind();
4447
+ const section = this.tree.getNode().children.find(
4448
+ node => node.element && isSessionSection(node.element) && node.element.id === AUTOMATIONS_SECTION_ID
4449
+ )?.element;
4450
+ if (section) {
4451
+ this.tree.setFocus([section]);
4452
+ this.tree.setSelection([]);
4453
+ this.tree.reveal(section);
4454
+ this.tree.domFocus();
4455
+ }
4456
+ }
4457
+ }
4458
+ isCustomizationsFocused() {
4459
+ return this.isNavigationSectionFocused(CUSTOMIZATIONS_SECTION_ID);
4460
+ }
4461
+ focusCustomizations() {
4462
+ this.focusNavigationSection(CUSTOMIZATIONS_SECTION_ID);
2874
4463
  }
2875
- focus() {
2876
- this.tree.domFocus();
2877
- if (this.tree.getFocus().length === 0) {
2878
- this.tree.focusFirst();
4464
+ isNavigationSectionFocused(sectionId) {
4465
+ return !!this.options.navigationContainer && isAncestorOfActiveElement(this.options.navigationContainer) && this.navigationList?.getFocusedElements().some(section => section.id === sectionId) === true;
4466
+ }
4467
+ focusNavigationSection(sectionId) {
4468
+ this.closeFind();
4469
+ const index = this.navigationSections.findIndex(section => section.id === sectionId);
4470
+ if (!this.navigationList || index < 0) {
4471
+ return;
2879
4472
  }
4473
+ this.navigationList.setFocus([index]);
4474
+ this.navigationList.setSelection([]);
4475
+ this.navigationList.domFocus();
4476
+ }
4477
+ updateNavigationVisibility() {
4478
+ this.update();
2880
4479
  }
2881
4480
  openFind() {
2882
4481
  this.tree.openFind();
@@ -2901,6 +4500,13 @@ let SessionsList = class SessionsList extends Disposable {
2901
4500
  ))) {
2902
4501
  return false;
2903
4502
  }
4503
+ const targetExternal = this.isRenderedInExternalSection(target);
4504
+ if (( dragged.some(s => this.isRenderedInExternalSection(s) !== targetExternal))) {
4505
+ return false;
4506
+ }
4507
+ if (targetExternal) {
4508
+ return true;
4509
+ }
2904
4510
  if (targetGroup === undefined && this.options.grouping() === SessionsGrouping.Workspace) {
2905
4511
  const targetLabel = sessionWorkspaceLabel(target);
2906
4512
  return dragged.every(s => sessionWorkspaceLabel(s) === targetLabel);
@@ -2919,7 +4525,9 @@ let SessionsList = class SessionsList extends Disposable {
2919
4525
  scope = scope.filter(
2920
4526
  s => this._sessionGroupsService.getGroupOfSession(s.sessionId) === targetGroup
2921
4527
  );
2922
- if (targetGroup === undefined && grouping === SessionsGrouping.Workspace) {
4528
+ const targetExternal = this.isRenderedInExternalSection(target);
4529
+ scope = scope.filter(s => this.isRenderedInExternalSection(s) === targetExternal);
4530
+ if (!targetExternal && targetGroup === undefined && grouping === SessionsGrouping.Workspace) {
2923
4531
  const targetLabel = sessionWorkspaceLabel(target);
2924
4532
  scope = scope.filter(s => sessionWorkspaceLabel(s) === targetLabel);
2925
4533
  }
@@ -2951,6 +4559,9 @@ let SessionsList = class SessionsList extends Disposable {
2951
4559
  this._sessionsListModelService.applySortChanges(mode, set, clear);
2952
4560
  }
2953
4561
  createGroupFromSessions(sessions) {
4562
+ if (( sessions.some(session => this.isActiveComparisonSession(session)))) {
4563
+ return;
4564
+ }
2954
4565
  const groupSessions = sessions.filter(session => !session.isArchived.get());
2955
4566
  if (groupSessions.length === 0) {
2956
4567
  return;
@@ -2959,31 +4570,149 @@ let SessionsList = class SessionsList extends Disposable {
2959
4570
  }
2960
4571
  createGroup(groupSessions) {
2961
4572
  this._sessionsListModelService.unpinSessions(groupSessions);
2962
- const group = this._sessionGroupsService.createGroup(( localize(4940, "New Group")), groupSessions.map(s => s.sessionId));
4573
+ const group = this._sessionGroupsService.createGroup(( localize(6184, "New Group")), groupSessions.map(s => s.sessionId));
2963
4574
  this._editingGroupId = group.id;
2964
4575
  this.update();
2965
4576
  this.revealGroup(group.id);
2966
4577
  }
2967
4578
  revealGroup(groupId) {
2968
- const root = this.tree.getNode();
2969
- for (const node of root.children) {
2970
- const element = node.element;
2971
- if (element && isSessionGroupItem(element) && element.group.id === groupId) {
2972
- if (this.tree.hasElement(element) && this.tree.getRelativeTop(element) === null) {
2973
- this.tree.reveal(element, 0.5);
2974
- }
2975
- return;
2976
- }
4579
+ const group = this.findTreeElement(element => isSessionGroupItem(element) && element.group.id === groupId);
4580
+ if (group && this.tree.getRelativeTop(group) === null) {
4581
+ this.tree.reveal(group, 0.5);
2977
4582
  }
2978
4583
  }
2979
4584
  beginRenameGroup(groupId) {
2980
- if (!this._sessionGroupsService.getGroup(groupId)) {
4585
+ if (!this._sessionGroupsService.getGroup(groupId) || this.isComparisonGroup(groupId)) {
2981
4586
  return;
2982
4587
  }
2983
4588
  this._editingGroupId = groupId;
2984
4589
  this.update();
2985
4590
  }
4591
+ async beginOpenRequest(session, chat, preserveFocus, sideBySide) {
4592
+ const request = {
4593
+ session,
4594
+ chat,
4595
+ preserveFocus,
4596
+ sideBySide,
4597
+ started: false,
4598
+ invocation: 0
4599
+ };
4600
+ this.pendingOpenRequest = request;
4601
+ try {
4602
+ if (this.options.canOpenSession && !(await this.options.canOpenSession(session))) {
4603
+ if (this.pendingOpenRequest === request) {
4604
+ this.pendingOpenRequest = undefined;
4605
+ }
4606
+ return false;
4607
+ }
4608
+ } catch (error) {
4609
+ if (this.pendingOpenRequest === request) {
4610
+ this.pendingOpenRequest = undefined;
4611
+ }
4612
+ throw error;
4613
+ }
4614
+ if (this.pendingOpenRequest !== request) {
4615
+ return false;
4616
+ }
4617
+ const sessionRowRepresentsSession = getSessionListChats(session).length === 0 || ( this.collapsedSessionIds.get().has(session.sessionId));
4618
+ if (!request.chat && sessionRowRepresentsSession && this._sessionsService.activeSession.get()?.sessionId !== session.sessionId) {
4619
+ this.markRead(session);
4620
+ }
4621
+ this.invokeOpenRequest(request);
4622
+ return true;
4623
+ }
4624
+ invokeOpenRequest(request) {
4625
+ request.started = true;
4626
+ const invocation = ++request.invocation;
4627
+ const finish = opened => {
4628
+ if (this.pendingOpenRequest === request && request.invocation === invocation) {
4629
+ this.pendingOpenRequest = undefined;
4630
+ if (opened) {
4631
+ this._onDidOpenSession.fire(request.chat?.resource ?? request.session.resource);
4632
+ }
4633
+ }
4634
+ };
4635
+ let open;
4636
+ try {
4637
+ if (request.chat) {
4638
+ open = this.options.onChatOpen ? this.options.onChatOpen(request.session, request.chat, request.preserveFocus, request.sideBySide) : this._sessionsService.openChat(request.session, request.chat.resource, {
4639
+ preserveFocus: request.preserveFocus
4640
+ }).catch(onUnexpectedError);
4641
+ } else {
4642
+ open = this.options.onSessionOpen(request.session.resource, request.preserveFocus, request.sideBySide);
4643
+ }
4644
+ } catch (error) {
4645
+ finish(false);
4646
+ throw error;
4647
+ }
4648
+ if (!open) {
4649
+ finish(true);
4650
+ return;
4651
+ }
4652
+ open.then(() => finish(true), error => {
4653
+ finish(false);
4654
+ onUnexpectedError(error);
4655
+ });
4656
+ }
4657
+ preservePendingOpenFocus(session, chat) {
4658
+ const request = this.pendingOpenRequest;
4659
+ if (!request || !this.uriIdentityService.extUri.isEqual(request.session.resource, session.resource) || (!!request.chat !== !!chat) || (request.chat && chat && !this.uriIdentityService.extUri.isEqual(request.chat.resource, chat.resource))) {
4660
+ return;
4661
+ }
4662
+ request.preserveFocus = true;
4663
+ if (request.started) {
4664
+ this.invokeOpenRequest(request);
4665
+ }
4666
+ }
4667
+ beginRenameSession(session) {
4668
+ const target = this.findTreeElement(
4669
+ element => isSessionItem(element) && this.uriIdentityService.extUri.isEqual(element.resource, session.resource)
4670
+ );
4671
+ if (!target) {
4672
+ return false;
4673
+ }
4674
+ if (this.tree.getRelativeTop(target) === null) {
4675
+ this.tree.reveal(target, 0.5);
4676
+ }
4677
+ if (!this._sessionRenderer.beginRename(target)) {
4678
+ return false;
4679
+ }
4680
+ return true;
4681
+ }
4682
+ beginRenameChat(item) {
4683
+ const target = this.findTreeElement(
4684
+ element => isSessionChatItem(element) && this.uriIdentityService.extUri.isEqual(element.session.resource, item.session.resource) && this.uriIdentityService.extUri.isEqual(element.chat.resource, item.chat.resource)
4685
+ );
4686
+ if (!target) {
4687
+ return false;
4688
+ }
4689
+ if (this.tree.getRelativeTop(target) === null) {
4690
+ this.tree.reveal(target, 0.5);
4691
+ }
4692
+ if (!this._chatRenderer.beginRename(target)) {
4693
+ return false;
4694
+ }
4695
+ return true;
4696
+ }
4697
+ findTreeElement(predicate) {
4698
+ const visit = nodes => {
4699
+ for (const node of nodes) {
4700
+ if (node.element && predicate(node.element)) {
4701
+ return node.element;
4702
+ }
4703
+ const match = visit(node.children);
4704
+ if (match) {
4705
+ return match;
4706
+ }
4707
+ }
4708
+ return undefined;
4709
+ };
4710
+ return visit(this.tree.getNode().children);
4711
+ }
2986
4712
  addSessionsToGroup(sessions, groupId, target, position) {
4713
+ if (this.isComparisonGroup(groupId) || ( sessions.some(session => this.isActiveComparisonSession(session)))) {
4714
+ return;
4715
+ }
2987
4716
  const groupSessions = sessions.filter(session => !session.isArchived.get());
2988
4717
  this._sessionsListModelService.unpinSessions(groupSessions);
2989
4718
  this._sessionGroupsService.addToGroup(groupSessions.map(s => s.sessionId), groupId);
@@ -2992,6 +4721,9 @@ let SessionsList = class SessionsList extends Disposable {
2992
4721
  }
2993
4722
  }
2994
4723
  removeSessionsFromGroup(sessions, target, position) {
4724
+ if (( sessions.some(session => this.isActiveComparisonSession(session)))) {
4725
+ return;
4726
+ }
2995
4727
  const groupedSessions = sessions.filter(
2996
4728
  session => this._sessionGroupsService.getGroupOfSession(session.sessionId) !== undefined
2997
4729
  );
@@ -3005,8 +4737,14 @@ let SessionsList = class SessionsList extends Disposable {
3005
4737
  this.reorderSessions(groupedSessions, target, position);
3006
4738
  }
3007
4739
  }
3008
- getWorkspaceSectionIdOfSession(session) {
3009
- if (this.options.grouping() !== SessionsGrouping.Workspace || session.isArchived.get() || this.isSessionPinned(session) || isQuickChatSession(session)) {
4740
+ getUngroupedSectionIdOfSession(session) {
4741
+ if (session.isArchived.get() || this.isSessionPinned(session)) {
4742
+ return undefined;
4743
+ }
4744
+ if (this.groupExternalSessions && session.isExternal?.get()) {
4745
+ return EXTERNAL_SESSIONS_SECTION_ID;
4746
+ }
4747
+ if (this.options.grouping() !== SessionsGrouping.Workspace || isQuickChatSession(session)) {
3010
4748
  return undefined;
3011
4749
  }
3012
4750
  return `workspace:${sessionWorkspaceLabel(session)}`;
@@ -3078,10 +4816,17 @@ let SessionsList = class SessionsList extends Disposable {
3078
4816
  this.showChatContextMenu(element, e.anchor);
3079
4817
  return;
3080
4818
  }
3081
- if (!element || isSessionSection(element) || isSessionShowMore(element) || isSessionPlaceholder(element)) {
4819
+ if (!element || isSessionShowMore(element) || isSessionPlaceholder(element)) {
3082
4820
  this.showCreateGroupContextMenu(e.anchor);
3083
4821
  return;
3084
4822
  }
4823
+ if (isSessionSection(element)) {
4824
+ if (isShortcutSection(element.id)) {
4825
+ return;
4826
+ }
4827
+ this.showSectionContextMenu(element, e.anchor);
4828
+ return;
4829
+ }
3085
4830
  if (isSessionGroupItem(element)) {
3086
4831
  this.showGroupContextMenu(element, e.anchor);
3087
4832
  return;
@@ -3090,15 +4835,24 @@ let SessionsList = class SessionsList extends Disposable {
3090
4835
  const inGroup = this._sessionGroupsService.getGroupOfSession(element.sessionId) !== undefined;
3091
4836
  const contextOverlay = [
3092
4837
  [IsSessionPinnedContext.key, this.isSessionPinned(element)],
4838
+ [SessionItemIsMultiSelectionContext.key, selectedSessions.length > 1],
3093
4839
  [SessionIsArchivedContext.key, element.isArchived.get()],
3094
- [SessionIsReadContext.key, element.isRead.get()],
4840
+ [SessionIsReadContext.key, element.mainChat.get().isRead.get()],
4841
+ [SessionItemInGroupContext.key, inGroup],
3095
4842
  [
3096
- SessionItemHasBranchNameContext.key,
3097
- !!element.workspace.get()?.folders[0]?.gitRepository?.branchName?.trim()
4843
+ SessionItemInExternalSectionContext.key,
4844
+ this.isRenderedInExternalSection(element)
4845
+ ],
4846
+ [
4847
+ SessionItemCanImportContext.key,
4848
+ element.isExternal?.get() === true && element.capabilities.get().supportsImport === true
3098
4849
  ],
3099
- [SessionItemInGroupContext.key, inGroup],
3100
4850
  [SessionTypeContext.key, element.sessionType],
3101
4851
  [SessionProviderIdContext.key, element.providerId],
4852
+ [
4853
+ SessionSupportsMultipleChatsContext.key,
4854
+ element.capabilities.get().supportsMultipleChats
4855
+ ],
3102
4856
  [
3103
4857
  SessionSupportsRenameContext.key,
3104
4858
  element.capabilities.get().supportsRename ?? false
@@ -3107,12 +4861,14 @@ let SessionsList = class SessionsList extends Disposable {
3107
4861
  SessionSupportsDeleteContext.key,
3108
4862
  element.capabilities.get().supportsDelete ?? false
3109
4863
  ],
4864
+ [IsQuickChatSessionContext.key, element.isQuickChat?.get() ?? false],
3110
4865
  [
3111
4866
  SessionHasPullRequestContext.key,
3112
4867
  !!element.workspace.get()?.folders[0]?.gitRepository?.gitHubInfo.get()?.pullRequest
3113
4868
  ]
3114
4869
  ];
3115
4870
  const disposables = ( new DisposableStore());
4871
+ this._sessionContextMenuDisposables.value = disposables;
3116
4872
  const menu = disposables.add(this.menuService.createMenu(
3117
4873
  SessionItemContextMenuId,
3118
4874
  this.contextKeyService.createOverlay(contextOverlay)
@@ -3126,7 +4882,18 @@ let SessionsList = class SessionsList extends Disposable {
3126
4882
  resource: s.resource
3127
4883
  }))
3128
4884
  };
3129
- const wrapForExtensions = action => {
4885
+ const wrapAction = action => {
4886
+ if (action.id === RENAME_SESSION_COMMAND_ID) {
4887
+ return toAction({
4888
+ id: action.id,
4889
+ label: action.label,
4890
+ class: action.class,
4891
+ enabled: action.enabled,
4892
+ tooltip: action.tooltip,
4893
+ checked: action.checked,
4894
+ run: () => this.beginRenameSession(element)
4895
+ });
4896
+ }
3130
4897
  if (!(action instanceof MenuItemAction) || !action.item.source) {
3131
4898
  return action;
3132
4899
  }
@@ -3143,25 +4910,33 @@ let SessionsList = class SessionsList extends Disposable {
3143
4910
  const baseActions = Separator.join(...menu.getActions({
3144
4911
  arg: selectedSessions,
3145
4912
  shouldForwardArgs: true
3146
- }).map(([, actions]) => actions.map(wrapForExtensions)));
4913
+ }).map(([, actions]) => actions.map(wrapAction)));
3147
4914
  const groupActions = this.getGroupSessionActions(selectedSessions);
3148
4915
  const actions = groupActions.length > 0 ? [...baseActions, ( new Separator()), ...groupActions] : baseActions;
3149
4916
  if (actions.length === 0) {
3150
- disposables.dispose();
4917
+ this._sessionContextMenuDisposables.clear();
3151
4918
  return;
3152
4919
  }
3153
4920
  this.contextMenuService.showContextMenu({
3154
4921
  getActions: () => actions,
3155
4922
  getAnchor: () => e.anchor,
3156
4923
  getKeyBinding: action => this.keybindingService.lookupKeybinding(action.id) ?? undefined,
3157
- onHide: () => disposables.dispose()
4924
+ onHide: () => {
4925
+ if (this._sessionContextMenuDisposables.value === disposables) {
4926
+ this._sessionContextMenuDisposables.clear();
4927
+ } else {
4928
+ disposables.dispose();
4929
+ }
4930
+ }
3158
4931
  });
3159
4932
  }
3160
4933
  showChatContextMenu(element, anchor) {
3161
4934
  const capabilities = getChatCapabilities(element.chat, element.session, undefined);
3162
4935
  const contextKeyService = this.contextKeyService.createOverlay([
3163
4936
  [SessionChatItemCanRenameContext.key, capabilities.canRename],
4937
+ [SessionChatItemCanArchiveContext.key, capabilities.canArchive],
3164
4938
  [SessionChatItemCanDeleteContext.key, capabilities.canDelete],
4939
+ [SessionChatItemIsArchivedContext.key, element.chat.isArchived.get()],
3165
4940
  [
3166
4941
  SessionChatItemIsUntitledContext.key,
3167
4942
  element.chat.status.get() === SessionStatus.Untitled
@@ -3169,10 +4944,19 @@ let SessionsList = class SessionsList extends Disposable {
3169
4944
  [SessionProviderIdContext.key, element.session.providerId]
3170
4945
  ]);
3171
4946
  const menu = this.menuService.createMenu(Menus.SessionChatItemContext, contextKeyService);
4947
+ const wrapAction = action => action.id === RENAME_CHAT_COMMAND_ID ? toAction({
4948
+ id: action.id,
4949
+ label: action.label,
4950
+ class: action.class,
4951
+ enabled: action.enabled,
4952
+ tooltip: action.tooltip,
4953
+ checked: action.checked,
4954
+ run: () => this.beginRenameChat(element)
4955
+ }) : action;
3172
4956
  const actions = Separator.join(...menu.getActions({
3173
4957
  arg: element,
3174
4958
  shouldForwardArgs: true
3175
- }).map(([, groupActions]) => groupActions));
4959
+ }).map(([, groupActions]) => groupActions.map(wrapAction)));
3176
4960
  if (actions.length === 0) {
3177
4961
  menu.dispose();
3178
4962
  return;
@@ -3186,7 +4970,9 @@ let SessionsList = class SessionsList extends Disposable {
3186
4970
  }
3187
4971
  getGroupSessionActions(selected) {
3188
4972
  const actions = [];
3189
- if (( selected.some(session => session.isArchived.get()))) {
4973
+ if (( selected.some(
4974
+ session => session.isArchived.get() || this.isActiveComparisonSession(session)
4975
+ ))) {
3190
4976
  return actions;
3191
4977
  }
3192
4978
  actions.push(this.getCreateGroupAction(selected));
@@ -3201,13 +4987,13 @@ let SessionsList = class SessionsList extends Disposable {
3201
4987
  label: g.name,
3202
4988
  run: () => this.addSessionsToGroup(selected, g.id)
3203
4989
  }));
3204
- const label = currentGroupId !== undefined ? ( localize(4941, "Move to Group")) : ( localize(4942, "Add to Group"));
4990
+ const label = currentGroupId !== undefined ? ( localize(6185, "Move to Group")) : ( localize(6186, "Add to Group"));
3205
4991
  actions.push(( new SubmenuAction("sessions.addToGroupSubmenu", label, subActions)));
3206
4992
  }
3207
4993
  if (currentGroupId !== undefined) {
3208
4994
  actions.push(toAction({
3209
4995
  id: "sessions.removeFromGroup",
3210
- label: ( localize(4943, "Remove from Group")),
4996
+ label: ( localize(6187, "Remove from Group")),
3211
4997
  run: () => {
3212
4998
  for (const session of selected) {
3213
4999
  this._sessionGroupsService.removeFromGroup(session.sessionId);
@@ -3217,10 +5003,14 @@ let SessionsList = class SessionsList extends Disposable {
3217
5003
  }
3218
5004
  return actions;
3219
5005
  }
5006
+ isActiveComparisonSession(session) {
5007
+ const comparison = this.sessionComparisonService.getComparisonForSession(session.resource);
5008
+ return comparison !== undefined && comparison.archivedAt === undefined;
5009
+ }
3220
5010
  getCreateGroupAction(sessions) {
3221
5011
  return toAction({
3222
5012
  id: "sessions.createGroup",
3223
- label: ( localize(4944, "Create Group")),
5013
+ label: ( localize(6188, "Create Group")),
3224
5014
  run: () => {
3225
5015
  if (sessions) {
3226
5016
  this.createGroupFromSessions(sessions);
@@ -3236,16 +5026,77 @@ let SessionsList = class SessionsList extends Disposable {
3236
5026
  getAnchor: () => anchor
3237
5027
  });
3238
5028
  }
3239
- showGroupContextMenu(groupItem, anchor) {
3240
- const actions = [this.getCreateGroupAction(), ( new Separator()), toAction({
3241
- id: "sessions.renameGroupAction",
3242
- label: ( localize(4945, "Rename...")),
3243
- run: () => this.beginRenameGroup(groupItem.group.id)
3244
- }), toAction({
5029
+ getMarkAllSessionsReadAction(getSessions) {
5030
+ return toAction({
5031
+ id: "sessionsViewPane.markAllInSectionRead",
5032
+ label: ( localize(6189, "Mark All as Read")),
5033
+ run: () => {
5034
+ const sessions = getSessions().filter(
5035
+ session => !isAutomationSession(session) && !session.isArchived.get() && !session.isRead.get()
5036
+ );
5037
+ return this._sessionsManagementService.markAllRead(sessions);
5038
+ }
5039
+ });
5040
+ }
5041
+ showSectionContextMenu(section, anchor) {
5042
+ const actions = [];
5043
+ if (section.id === EXTERNAL_SESSIONS_SECTION_ID) {
5044
+ const contextKeyService = this.contextKeyService.createOverlay([[SessionSectionTypeContext.key, EXTERNAL_SESSIONS_SECTION_ID]]);
5045
+ actions.push(...getFlatContextMenuActions(
5046
+ this.menuService.getMenuActions(SessionSectionToolbarMenuId, contextKeyService, {
5047
+ arg: section,
5048
+ shouldForwardArgs: true
5049
+ })
5050
+ ), ( new Separator()));
5051
+ }
5052
+ if (this.options.grouping() === SessionsGrouping.Workspace && section.id.startsWith("workspace:")) {
5053
+ actions.push(this.getMarkAllSessionsReadAction(
5054
+ () => this.sessions.filter(session => sessionWorkspaceLabel(session) === section.label)
5055
+ ), ( new Separator()));
5056
+ }
5057
+ actions.push(this.getCreateGroupAction());
5058
+ this.contextMenuService.showContextMenu({
5059
+ getActions: () => actions,
5060
+ getAnchor: () => anchor
5061
+ });
5062
+ }
5063
+ getDeleteGroupAction(groupItem) {
5064
+ return toAction({
3245
5065
  id: "sessions.deleteGroupAction",
3246
- label: ( localize(4946, "Delete Group")),
5066
+ label: ( localize(6190, "Delete Group")),
3247
5067
  run: () => this._sessionGroupsService.deleteGroup(groupItem.group.id)
3248
- })];
5068
+ });
5069
+ }
5070
+ showGroupContextMenu(groupItem, anchor) {
5071
+ const actions = [];
5072
+ const comparison = groupItem.comparison;
5073
+ if (this.options.grouping() === SessionsGrouping.Workspace && !groupItem.isEmpty) {
5074
+ actions.push(this.getMarkAllSessionsReadAction(() => {
5075
+ const sessionIds = ( new Set(this._sessionGroupsService.getSessionIdsInGroup(groupItem.group.id)));
5076
+ return this.sessions.filter(session => ( sessionIds.has(session.sessionId)));
5077
+ }), ( new Separator()));
5078
+ }
5079
+ actions.push(this.getCreateGroupAction());
5080
+ if (!comparison) {
5081
+ actions.push(( new Separator()), toAction({
5082
+ id: "sessions.renameGroupAction",
5083
+ label: ( localize(6191, "Rename...")),
5084
+ run: () => this.beginRenameGroup(groupItem.group.id)
5085
+ }), this.getDeleteGroupAction(groupItem));
5086
+ } else {
5087
+ if (this.sessionComparisonService.canRetryJudge(comparison.id)) {
5088
+ actions.push(( new Separator()), toAction({
5089
+ id: "sessions.retryComparisonJudge",
5090
+ label: ( localize(6192, "Retry Judge")),
5091
+ run: () => this.sessionComparisonService.retryJudge(comparison.id)
5092
+ }));
5093
+ }
5094
+ const comparisonRecord = this.sessionComparisonService.getComparison(comparison.id);
5095
+ const comparisonSessions = comparisonRecord ? getComparisonSessions(comparisonRecord, this._sessionsManagementService) : [];
5096
+ if (comparisonRecord?.launching !== true && !( comparisonSessions.some(session => isSessionActive(session, undefined)))) {
5097
+ actions.push(( new Separator()), this.getDeleteGroupAction(groupItem));
5098
+ }
5099
+ }
3249
5100
  this.contextMenuService.showContextMenu({
3250
5101
  getActions: () => actions,
3251
5102
  getAnchor: () => anchor
@@ -3282,89 +5133,46 @@ let SessionsList = class SessionsList extends Disposable {
3282
5133
  isRenderedInCustomGroup(session) {
3283
5134
  return this.getRenderedSessionGroup(session) !== undefined;
3284
5135
  }
3285
- _someProviderSupportsQuickChats() {
3286
- return ( this._sessionsProvidersService.getProviders().some(p => !!p.supportsQuickChats));
3287
- }
3288
- markRead(session) {
3289
- this._sessionsManagementService.markRead(session);
3290
- }
3291
- markUnread(session) {
3292
- this._sessionsManagementService.markUnread(session);
5136
+ isComparisonGroup(groupId) {
5137
+ return ( this.sessionComparisonService.comparisons.get().some(comparison => comparison.groupId === groupId));
3293
5138
  }
3294
- setSessionTypeExcluded(sessionTypeId, excluded) {
3295
- if (excluded) {
3296
- this.excludedSessionTypes.add(sessionTypeId);
3297
- } else {
3298
- this.excludedSessionTypes.delete(sessionTypeId);
5139
+ shouldShowComparisonAttemptStatus(session, reader) {
5140
+ const comparison = this.sessionComparisonService.getComparisonForSession(session.resource);
5141
+ if (!comparison) {
5142
+ return false;
3299
5143
  }
3300
- this.saveExcludedSessionTypes();
3301
- this.update();
3302
- }
3303
- isSessionTypeExcluded(sessionTypeId) {
3304
- return ( this.excludedSessionTypes.has(sessionTypeId));
3305
- }
3306
- loadExcludedSessionTypes() {
3307
- const raw = this.storageService.get(SessionsList_1.EXCLUDED_TYPES_KEY, StorageScope.PROFILE);
3308
- if (raw) {
3309
- try {
3310
- const arr = JSON.parse(raw);
3311
- if (Array.isArray(arr)) {
3312
- return ( new Set(arr));
3313
- }
3314
- } catch {}
5144
+ if (getSessionRowStatus(session, reader, false) === SessionStatus.InProgress) {
5145
+ return true;
3315
5146
  }
3316
- return ( new Set());
5147
+ const statuses = comparison.participants.filter(
5148
+ participant => participant.role === SessionComparisonParticipantRole.Attempt
5149
+ ).map(participant => {
5150
+ if (participant.launchError) {
5151
+ return SessionStatus.Error;
5152
+ }
5153
+ const attemptSession = participant.sessionResource ? this.sessions.find(candidate => isEqual(candidate.resource, participant.sessionResource)) : undefined;
5154
+ return attemptSession?.status.read(reader);
5155
+ });
5156
+ return statuses.includes(SessionStatus.Error) || ( new Set(statuses)).size > 1;
3317
5157
  }
3318
- saveExcludedSessionTypes() {
3319
- if (this.excludedSessionTypes.size === 0) {
3320
- this.storageService.remove(SessionsList_1.EXCLUDED_TYPES_KEY, StorageScope.PROFILE);
3321
- } else {
3322
- this.storageService.store(
3323
- SessionsList_1.EXCLUDED_TYPES_KEY,
3324
- JSON.stringify([...this.excludedSessionTypes]),
3325
- StorageScope.PROFILE,
3326
- StorageTarget.USER
3327
- );
3328
- }
5158
+ get groupExternalSessions() {
5159
+ return this.configurationService.getValue(SESSIONS_LIST_GROUP_EXTERNAL_SESSIONS_SETTING) === true;
3329
5160
  }
3330
- setStatusExcluded(status, excluded) {
3331
- if (excluded) {
3332
- this.excludedStatuses.add(status);
3333
- } else {
3334
- this.excludedStatuses.delete(status);
3335
- }
3336
- this.saveExcludedStatuses();
3337
- this.update();
5161
+ isRenderedInExternalSection(session) {
5162
+ return this.groupExternalSessions && session.isExternal?.get() === true && !session.isArchived.get() && !this.isSessionPinned(session) && !this.isRenderedInCustomGroup(session);
3338
5163
  }
3339
- isStatusExcluded(status) {
3340
- return ( this.excludedStatuses.has(status));
5164
+ _someProviderSupportsQuickChats() {
5165
+ return ( this._sessionsProvidersService.getProviders().some(p => !!p.supportsQuickChats));
3341
5166
  }
3342
- loadExcludedStatuses() {
3343
- const raw = this.storageService.get(SessionsList_1.EXCLUDED_STATUSES_KEY, StorageScope.PROFILE);
3344
- if (raw) {
3345
- try {
3346
- const arr = JSON.parse(raw);
3347
- if (Array.isArray(arr)) {
3348
- return ( new Set(arr));
3349
- }
3350
- } catch {}
3351
- }
3352
- return ( new Set());
5167
+ markRead(session) {
5168
+ this._sessionsManagementService.markRead(session);
3353
5169
  }
3354
- saveExcludedStatuses() {
3355
- if (this.excludedStatuses.size === 0) {
3356
- this.storageService.remove(SessionsList_1.EXCLUDED_STATUSES_KEY, StorageScope.PROFILE);
3357
- } else {
3358
- this.storageService.store(
3359
- SessionsList_1.EXCLUDED_STATUSES_KEY,
3360
- JSON.stringify([...this.excludedStatuses]),
3361
- StorageScope.PROFILE,
3362
- StorageTarget.USER
3363
- );
3364
- }
5170
+ markUnread(session) {
5171
+ this._sessionsManagementService.markUnread(session);
3365
5172
  }
3366
5173
  setExcludeArchived(exclude) {
3367
5174
  this._excludeArchived = exclude;
5175
+ this._excludeArchivedIsDefault = false;
3368
5176
  this.storageService.store(
3369
5177
  SessionsList_1.EXCLUDE_ARCHIVED_KEY,
3370
5178
  exclude,
@@ -3376,38 +5184,20 @@ let SessionsList = class SessionsList extends Disposable {
3376
5184
  isExcludeArchived() {
3377
5185
  return this._excludeArchived;
3378
5186
  }
3379
- setExcludeRead(exclude) {
3380
- this._excludeRead = exclude;
3381
- this.storageService.store(
3382
- SessionsList_1.EXCLUDE_READ_KEY,
3383
- exclude,
3384
- StorageScope.PROFILE,
3385
- StorageTarget.USER
3386
- );
3387
- this.update();
3388
- }
3389
- isExcludeRead() {
3390
- return this._excludeRead;
5187
+ reportArchivedFilterShown() {
5188
+ if (this._excludeArchivedIsDefault) {
5189
+ logSettingExperimentTrigger(this.telemetryService, SESSIONS_LIST_SHOW_ARCHIVED_BY_DEFAULT_SETTING);
5190
+ }
3391
5191
  }
3392
5192
  resetFilters() {
3393
- this.excludedSessionTypes.clear();
3394
- this.saveExcludedSessionTypes();
3395
- this.excludedStatuses.clear();
3396
- this.saveExcludedStatuses();
3397
5193
  this._excludeArchived = true;
5194
+ this._excludeArchivedIsDefault = false;
3398
5195
  this.storageService.store(
3399
5196
  SessionsList_1.EXCLUDE_ARCHIVED_KEY,
3400
5197
  true,
3401
5198
  StorageScope.PROFILE,
3402
5199
  StorageTarget.USER
3403
5200
  );
3404
- this._excludeRead = false;
3405
- this.storageService.store(
3406
- SessionsList_1.EXCLUDE_READ_KEY,
3407
- false,
3408
- StorageScope.PROFILE,
3409
- StorageTarget.USER
3410
- );
3411
5201
  this.workspaceGroupCapped = true;
3412
5202
  this.storageService.store(
3413
5203
  SessionsList_1.WORKSPACE_GROUP_CAPPED_KEY,
@@ -3417,7 +5207,7 @@ let SessionsList = class SessionsList extends Disposable {
3417
5207
  );
3418
5208
  this.expandedSessionGroups.clear();
3419
5209
  this.expandedMoreFolders = false;
3420
- this.update();
5210
+ this.filters.reset();
3421
5211
  }
3422
5212
  setWorkspaceGroupCapped(capped) {
3423
5213
  this.workspaceGroupCapped = capped;
@@ -3453,7 +5243,7 @@ let SessionsList = class SessionsList extends Disposable {
3453
5243
  }
3454
5244
  this.saveBulkCollapseState(true);
3455
5245
  }
3456
- getSavedCollapseState(sectionId) {
5246
+ getSavedCollapseState(sectionId, legacySectionId) {
3457
5247
  const raw = this.storageService.get(SessionsList_1.SECTION_COLLAPSE_STATE_KEY, StorageScope.PROFILE);
3458
5248
  if (raw) {
3459
5249
  try {
@@ -3461,6 +5251,18 @@ let SessionsList = class SessionsList extends Disposable {
3461
5251
  if (typeof state[sectionId] === "boolean") {
3462
5252
  return state[sectionId];
3463
5253
  }
5254
+ if (legacySectionId && typeof state[legacySectionId] === "boolean") {
5255
+ const collapsed = state[legacySectionId];
5256
+ delete state[legacySectionId];
5257
+ state[sectionId] = collapsed;
5258
+ this.storageService.store(
5259
+ SessionsList_1.SECTION_COLLAPSE_STATE_KEY,
5260
+ JSON.stringify(state),
5261
+ StorageScope.PROFILE,
5262
+ StorageTarget.USER
5263
+ );
5264
+ return collapsed;
5265
+ }
3464
5266
  } catch {}
3465
5267
  }
3466
5268
  return undefined;
@@ -3486,11 +5288,15 @@ let SessionsList = class SessionsList extends Disposable {
3486
5288
  }
3487
5289
  saveBulkCollapseState(collapsed) {
3488
5290
  const state = {};
3489
- for (const child of this.tree.getNode(null).children) {
3490
- if (child.element && isSessionSection(child.element)) {
3491
- state[child.element.id] = collapsed;
5291
+ const collectSections = node => {
5292
+ if (node.element && isSessionSection(node.element) && !isShortcutSection(node.element.id)) {
5293
+ state[node.element.collapseStateId ?? node.element.id] = collapsed;
3492
5294
  }
3493
- }
5295
+ for (const child of node.children) {
5296
+ collectSections(child);
5297
+ }
5298
+ };
5299
+ collectSections(this.tree.getNode(null));
3494
5300
  this.storageService.store(
3495
5301
  SessionsList_1.SECTION_COLLAPSE_STATE_KEY,
3496
5302
  JSON.stringify(state),
@@ -3498,8 +5304,40 @@ let SessionsList = class SessionsList extends Disposable {
3498
5304
  StorageTarget.USER
3499
5305
  );
3500
5306
  }
5307
+ loadCollapsedSessionResources() {
5308
+ const raw = this.storageService.get(SessionsList_1.SESSION_COLLAPSE_STATE_KEY, StorageScope.PROFILE);
5309
+ if (raw) {
5310
+ try {
5311
+ const resources = JSON.parse(raw);
5312
+ if (Array.isArray(resources)) {
5313
+ return ( new Set(resources.filter(resource => typeof resource === "string")));
5314
+ }
5315
+ } catch {}
5316
+ }
5317
+ return ( new Set());
5318
+ }
5319
+ saveSessionCollapseState(session, collapsed) {
5320
+ const resource = ( session.resource.toString());
5321
+ const changed = collapsed ? !( this.collapsedSessionResources.has(resource)) : this.collapsedSessionResources.delete(resource);
5322
+ if (!changed) {
5323
+ return;
5324
+ }
5325
+ if (collapsed) {
5326
+ this.collapsedSessionResources.add(resource);
5327
+ }
5328
+ if (this.collapsedSessionResources.size === 0) {
5329
+ this.storageService.remove(SessionsList_1.SESSION_COLLAPSE_STATE_KEY, StorageScope.PROFILE);
5330
+ } else {
5331
+ this.storageService.store(
5332
+ SessionsList_1.SESSION_COLLAPSE_STATE_KEY,
5333
+ JSON.stringify([...this.collapsedSessionResources]),
5334
+ StorageScope.PROFILE,
5335
+ StorageTarget.USER
5336
+ );
5337
+ }
5338
+ }
3501
5339
  };
3502
- SessionsList = SessionsList_1 = ( __decorate([( __param(2, ISessionsManagementService)), ( __param(3, ISessionsService)), ( __param(4, ICustomViewService)), ( __param(5, ISessionsListModelService)), ( __param(6, ISessionGroupsService)), ( __param(7, ISessionSectionOrderService)), ( __param(8, IAgentHostFilterService)), ( __param(9, IInstantiationService)), ( __param(10, IContextKeyService)), ( __param(11, IStorageService)), ( __param(12, IContextMenuService)), ( __param(13, IMenuService)), ( __param(14, IKeybindingService)), ( __param(15, ICommandService)), ( __param(16, IAutomationService)), ( __param(17, IVoicePlaybackService)), ( __param(18, IWorkbenchAssignmentService)), ( __param(19, IConfigurationService)), ( __param(20, IUriIdentityService)), ( __param(21, IAgentHostConnectionsService)), ( __param(22, IOpenerService)), ( __param(23, ILabelService)), ( __param(24, IPreferencesService))], SessionsList));
5340
+ SessionsList = SessionsList_1 = ( __decorate([( __param(2, ISessionsManagementService)), ( __param(3, ISessionsService)), ( __param(4, ICustomViewService)), ( __param(5, ISessionsListModelService)), ( __param(6, ISessionGroupsService)), ( __param(7, ISessionComparisonService)), ( __param(8, ISessionSectionOrderService)), ( __param(9, IAgentHostFilterService)), ( __param(10, IInstantiationService)), ( __param(11, IContextKeyService)), ( __param(12, IStorageService)), ( __param(13, IContextMenuService)), ( __param(14, IContextViewService)), ( __param(15, IMenuService)), ( __param(16, IKeybindingService)), ( __param(17, ICommandService)), ( __param(18, IAutomationService)), ( __param(19, IVoicePlaybackService)), ( __param(20, IWorkbenchAssignmentService)), ( __param(21, IConfigurationService)), ( __param(22, IUriIdentityService)), ( __param(23, IAgentHostConnectionsService)), ( __param(24, IOpenerService)), ( __param(25, ILabelService)), ( __param(26, IPreferencesService)), ( __param(27, IEditorService)), ( __param(28, ITelemetryService)), ( __param(29, IAccessibilityService))], SessionsList));
3503
5341
  function getFirstApprovalAcrossChats(approvalModel, session, reader) {
3504
5342
  let oldest;
3505
5343
  for (const chat of session.chats.read(reader)) {
@@ -3537,6 +5375,94 @@ function sortSessions(sessions, sorting, getSortKey) {
3537
5375
  const key = getSortKey ?? defaultSortKey;
3538
5376
  return [...sessions].sort((a, b) => key(b, sorting) - key(a, sorting));
3539
5377
  }
5378
+ function sortSessionListChats(chats, sorting) {
5379
+ if (sorting === SessionsSorting.Created) {
5380
+ return chats;
5381
+ }
5382
+ return [...chats].sort(
5383
+ (a, b) => (b.updatedAt.get()?.getTime() ?? b.createdAt.getTime()) - (a.updatedAt.get()?.getTime() ?? a.createdAt.getTime())
5384
+ );
5385
+ }
5386
+ function sortComparisonGroupMembers(comparison, sessions, sorting, getSortKey) {
5387
+ const participants = getSessionComparisonParticipantsInDisplayOrder(comparison.participants);
5388
+ const participantOrder = session => participants.findIndex(
5389
+ participant => participant.sessionResource && isEqual(participant.sessionResource, session.resource)
5390
+ );
5391
+ return sortSessions(sessions, sorting, getSortKey).sort((a, b) => {
5392
+ const aIndex = participantOrder(a);
5393
+ const bIndex = participantOrder(b);
5394
+ if (aIndex < 0) {
5395
+ return bIndex < 0 ? 0 : 1;
5396
+ }
5397
+ if (bIndex < 0) {
5398
+ return -1;
5399
+ }
5400
+ return aIndex - bIndex;
5401
+ });
5402
+ }
5403
+ function isComparisonLaunchPending(comparison) {
5404
+ return comparison.launching === true;
5405
+ }
5406
+ function getComparisonGroupSummary(comparison, sessions, reader) {
5407
+ if (comparison.launching) {
5408
+ const attempts = comparison.participants.filter(
5409
+ participant => participant.role === SessionComparisonParticipantRole.Attempt
5410
+ );
5411
+ const readyAttemptCount = attempts.filter(participant => participant.sessionResource && ( sessions.some(session => isEqual(session.resource, participant.sessionResource)))).length;
5412
+ return readyAttemptCount === 0 ? ( localize(6193, "Comparison · Starting {0} attempts", attempts.length)) : ( localize(
5413
+ 6194,
5414
+ "Comparison · Starting attempts · {0} of {1} ready",
5415
+ readyAttemptCount,
5416
+ attempts.length
5417
+ ));
5418
+ }
5419
+ if (comparison.verdict) {
5420
+ return localize(6195, "Comparison · Review ready");
5421
+ }
5422
+ const judge = comparison.participants.find(participant => participant.role === SessionComparisonParticipantRole.Judge);
5423
+ const attempts = comparison.participants.filter(
5424
+ participant => participant.role === SessionComparisonParticipantRole.Attempt
5425
+ );
5426
+ const statuses = attempts.map(participant => {
5427
+ if (participant.launchError) {
5428
+ return SessionStatus.Error;
5429
+ }
5430
+ return participant.sessionResource ? reader ? sessions.find(session => isEqual(session.resource, participant.sessionResource))?.status.read(reader) : sessions.find(session => isEqual(session.resource, participant.sessionResource))?.status.get() : undefined;
5431
+ });
5432
+ const needsInput = statuses.filter(status => status === SessionStatus.NeedsInput).length;
5433
+ const working = statuses.filter(status => status === SessionStatus.InProgress).length;
5434
+ const finished = statuses.filter(
5435
+ status => status === SessionStatus.Completed || status === SessionStatus.Error
5436
+ ).length;
5437
+ if (needsInput > 0) {
5438
+ return needsInput === 1 ? ( localize(6196, "Comparison · 1 attempt needs attention")) : ( localize(6197, "Comparison · {0} attempts need attention", needsInput));
5439
+ }
5440
+ if (working > 0) {
5441
+ return working === 1 ? ( localize(6198, "Comparison · 1 attempt working")) : ( localize(6199, "Comparison · {0} attempts working", working));
5442
+ }
5443
+ if (judge?.launchError) {
5444
+ return localize(6200, "Comparison · Review failed");
5445
+ }
5446
+ if (judge?.sessionResource) {
5447
+ const judgeStatus = reader ? sessions.find(session => isEqual(session.resource, judge.sessionResource))?.status.read(reader) : sessions.find(session => isEqual(session.resource, judge.sessionResource))?.status.get();
5448
+ if (judgeStatus === SessionStatus.NeedsInput) {
5449
+ return localize(6201, "Comparison · Judge needs attention");
5450
+ }
5451
+ if (judgeStatus === SessionStatus.Untitled || judgeStatus === SessionStatus.InProgress) {
5452
+ return localize(6202, "Comparison · Reviewing attempts");
5453
+ }
5454
+ if (judgeStatus === SessionStatus.Error) {
5455
+ return localize(6200, "Comparison · Review failed");
5456
+ }
5457
+ if (judgeStatus === SessionStatus.Completed) {
5458
+ return localize(6203, "Comparison · Review incomplete");
5459
+ }
5460
+ }
5461
+ if (finished === attempts.length) {
5462
+ return localize(6204, "Comparison · {0} attempts finished", attempts.length);
5463
+ }
5464
+ return localize(6205, "Comparison · {0} attempts", attempts.length);
5465
+ }
3540
5466
  function limitSessionsForList(sessions, limit, options) {
3541
5467
  if (!options.enabled || sessions.length <= limit) {
3542
5468
  return {
@@ -3638,7 +5564,8 @@ function groupSessionsForList(
3638
5564
  sorting,
3639
5565
  isSessionPinned,
3640
5566
  getSortKey,
3641
- archivedSectionLabel = getChatSessionArchivedSectionLabel(ChatSessionArchiveActionWording.MarkAsDone)
5567
+ archivedSectionLabel = getChatSessionArchivedSectionLabel(ChatSessionArchiveActionWording.MarkAsDone),
5568
+ groupExternalSessions = false
3642
5569
  ) {
3643
5570
  const sorted = sortSessions(
3644
5571
  sessions.filter(session => !isAutomationSession(session)),
@@ -3647,6 +5574,7 @@ function groupSessionsForList(
3647
5574
  );
3648
5575
  const pinned = [];
3649
5576
  const archived = [];
5577
+ const external = [];
3650
5578
  const quickChats = [];
3651
5579
  const regular = [];
3652
5580
  for (const session of sorted) {
@@ -3654,6 +5582,8 @@ function groupSessionsForList(
3654
5582
  archived.push(session);
3655
5583
  } else if (isSessionPinned(session)) {
3656
5584
  pinned.push(session);
5585
+ } else if (groupExternalSessions && session.isExternal?.get()) {
5586
+ external.push(session);
3657
5587
  } else if (isQuickChatSession(session)) {
3658
5588
  quickChats.push(session);
3659
5589
  } else {
@@ -3664,20 +5594,27 @@ function groupSessionsForList(
3664
5594
  if (pinned.length > 0) {
3665
5595
  sections.push({
3666
5596
  id: "pinned",
3667
- label: ( localize(4947, "Pinned")),
5597
+ label: ( localize(6206, "Pinned")),
3668
5598
  sessions: pinned
3669
5599
  });
3670
5600
  }
3671
5601
  if (quickChats.length > 0) {
3672
5602
  sections.push({
3673
5603
  id: QUICK_CHATS_SECTION_ID,
3674
- label: ( localize(4934, "Chats")),
5604
+ label: ( localize(6176, "Chats")),
3675
5605
  sessions: quickChats
3676
5606
  });
3677
5607
  }
3678
5608
  sections.push(
3679
5609
  ...(grouping === SessionsGrouping.Workspace ? groupByWorkspace(regular) : groupByDate(regular, sorting, getSortKey))
3680
5610
  );
5611
+ if (external.length > 0) {
5612
+ sections.push({
5613
+ id: EXTERNAL_SESSIONS_SECTION_ID,
5614
+ label: ( localize(6207, "External")),
5615
+ sessions: external
5616
+ });
5617
+ }
3681
5618
  if (archived.length > 0) {
3682
5619
  sections.push({
3683
5620
  id: "archived",
@@ -3688,7 +5625,7 @@ function groupSessionsForList(
3688
5625
  return sections;
3689
5626
  }
3690
5627
  function sessionWorkspaceLabel(session) {
3691
- return session.workspace.get()?.label || ( localize(4948, "Unknown"));
5628
+ return session.workspace.get()?.label || ( localize(6208, "Unknown"));
3692
5629
  }
3693
5630
  function groupByWorkspace(sessions) {
3694
5631
  const groups = ( new Map());
@@ -3701,10 +5638,11 @@ function groupByWorkspace(sessions) {
3701
5638
  }
3702
5639
  group.push(session);
3703
5640
  }
3704
- const unknownWorkspaceLabel = ( localize(4948, "Unknown"));
5641
+ const unknownWorkspaceLabel = ( localize(6208, "Unknown"));
3705
5642
  const order = [...( groups.keys())].filter(k => k !== unknownWorkspaceLabel).sort((a, b) => a.localeCompare(b));
3706
5643
  const result = order.map(label => ({
3707
5644
  id: `workspace:${label}`,
5645
+ collapseStateId: workspaceCollapseStateId(groups.get(label)),
3708
5646
  label,
3709
5647
  sessions: groups.get(label)
3710
5648
  }));
@@ -3718,6 +5656,10 @@ function groupByWorkspace(sessions) {
3718
5656
  }
3719
5657
  return result;
3720
5658
  }
5659
+ function workspaceCollapseStateId(sessions) {
5660
+ const resource = sessions[0]?.workspace.get()?.uri.toString();
5661
+ return resource && sessions.every(session => session.workspace.get()?.uri.toString() === resource) ? `workspace:${resource}` : undefined;
5662
+ }
3721
5663
  const RECENT_SESSIONS_LIMIT = 10;
3722
5664
  const RECENT_SESSIONS_LIMIT_WITH_UPDATES = 15;
3723
5665
  const RECENTLY_UPDATED_SESSION_THRESHOLD_MS = 24 * 60 * 60 * 1000;
@@ -3750,8 +5692,8 @@ function groupByDate(sessions, sorting, getSortKey) {
3750
5692
  });
3751
5693
  }
3752
5694
  };
3753
- addGroup("recent", ( localize(4949, "Recent")), recent);
3754
- addGroup("older", ( localize(4950, "Older")), older);
5695
+ addGroup("recent", ( localize(6209, "Recent")), recent);
5696
+ addGroup("older", ( localize(6210, "Older")), older);
3755
5697
  return sections;
3756
5698
  }
3757
5699
  let SessionsFlatList = class SessionsFlatList extends Disposable {
@@ -3780,7 +5722,8 @@ let SessionsFlatList = class SessionsFlatList extends Disposable {
3780
5722
  agentHostConnectionsService,
3781
5723
  openerService,
3782
5724
  labelService,
3783
- preferencesService
5725
+ preferencesService,
5726
+ telemetryService
3784
5727
  ) {
3785
5728
  super();
3786
5729
  this.options = options;
@@ -3800,6 +5743,26 @@ let SessionsFlatList = class SessionsFlatList extends Disposable {
3800
5743
  const approvalModel = this.options.approvalModel ?? this._register(instantiationService.createInstance(AgentSessionApprovalModel));
3801
5744
  const agentSessionsService = instantiationService.invokeFunction(accessor => accessor.get(IAgentSessionsService));
3802
5745
  const useCompactQuickChatRows = this.options.useCompactQuickChatRows ?? true;
5746
+ const externalApplicationBadgeMode = observableConfigValue(
5747
+ SESSIONS_LIST_EXTERNAL_APPLICATION_BADGE_SETTING,
5748
+ ExternalSessionApplicationBadgeMode.Off,
5749
+ configurationService
5750
+ );
5751
+ const externalApplicationBadgeShowFrom = observableConfigValue(
5752
+ SESSIONS_LIST_EXTERNAL_APPLICATION_BADGE_SHOW_FROM_SETTING,
5753
+ true,
5754
+ configurationService
5755
+ );
5756
+ const reportExternalApplicationBadgeModeExperimentTrigger = () => logDefaultSettingExperimentTrigger(
5757
+ configurationService,
5758
+ telemetryService,
5759
+ SESSIONS_LIST_EXTERNAL_APPLICATION_BADGE_SETTING
5760
+ );
5761
+ const reportExternalApplicationBadgeShowFromExperimentTrigger = () => logDefaultSettingExperimentTrigger(
5762
+ configurationService,
5763
+ telemetryService,
5764
+ SESSIONS_LIST_EXTERNAL_APPLICATION_BADGE_SHOW_FROM_SETTING
5765
+ );
3803
5766
  const sessionRenderer = ( new SessionItemRenderer({
3804
5767
  grouping: () => SessionsGrouping.Date,
3805
5768
  isPinned: s => this._sessionsListModelService.isSessionPinned(s),
@@ -3807,14 +5770,23 @@ let SessionsFlatList = class SessionsFlatList extends Disposable {
3807
5770
  getMultiSelectedSessions: s => [s],
3808
5771
  showHover: this.options.showSessionHover ?? true,
3809
5772
  useCompactQuickChatRows,
5773
+ compact: () => false,
3810
5774
  approvalRowMaxLines: this.options.approvalRowMaxLines ?? DEFAULT_APPROVAL_ROW_MAX_LINES,
3811
5775
  aggregateChatApprovals: true,
3812
- toolbarMenuId: this.options.toolbarMenuId ?? SessionItemToolbarMenuId,
3813
- handleToolbarAction: this.options.onToolbarAction
5776
+ toolbarMenuId: this.options.toolbarMenuId ?? Menus.SessionItemToolbar,
5777
+ toolbarTelemetrySource: this.options.toolbarTelemetrySource ?? "sessionsFlatList.row",
5778
+ inlineRename: false,
5779
+ handleToolbarAction: this.options.onToolbarAction,
5780
+ externalApplicationBadgeMode,
5781
+ externalApplicationBadgeShowFrom,
5782
+ reportExternalApplicationBadgeModeExperimentTrigger,
5783
+ reportExternalApplicationBadgeShowFromExperimentTrigger
3814
5784
  }, approvalModel, this.options.ciFixModel, instantiationService, contextKeyService, configurationService, markdownRendererService, hoverService, sessionsProvidersService, this._sessionsManagementService, agentHostConnectionsService, openerService, labelService, preferencesService, agentSessionsService, voicePlaybackService));
3815
5785
  this._delegate = ( new SessionsTreeDelegate(
3816
5786
  approvalModel,
3817
5787
  () => false,
5788
+ () => false,
5789
+ session => session.status.get(),
3818
5790
  this.options.approvalRowMaxLines ?? DEFAULT_APPROVAL_ROW_MAX_LINES,
3819
5791
  this.options.ciFixModel,
3820
5792
  useCompactQuickChatRows,
@@ -3830,7 +5802,10 @@ let SessionsFlatList = class SessionsFlatList extends Disposable {
3830
5802
  accessibilityProvider: ( new SessionsAccessibilityProvider(undefined, {
3831
5803
  grouping: () => SessionsGrouping.Date,
3832
5804
  isPinned: session => this._sessionsListModelService.isSessionPinned(session),
3833
- includeQuickChatInAriaLabel: !useCompactQuickChatRows
5805
+ includeQuickChatInAriaLabel: !useCompactQuickChatRows,
5806
+ externalApplicationBadgeMode,
5807
+ reportExternalApplicationBadgeModeExperimentTrigger,
5808
+ reportExternalApplicationBadgeShowFromExperimentTrigger
3834
5809
  })),
3835
5810
  identityProvider: {
3836
5811
  getId: element => ( element.resource.toString())
@@ -3849,7 +5824,7 @@ let SessionsFlatList = class SessionsFlatList extends Disposable {
3849
5824
  if (!element || !isSessionItem(element)) {
3850
5825
  return;
3851
5826
  }
3852
- if (this.options.markSessionReadOnOpen !== false) {
5827
+ if (this.options.markSessionReadOnOpen !== false && this._sessionsService.activeSession.get()?.sessionId !== element.sessionId) {
3853
5828
  this._sessionsManagementService.markRead(element);
3854
5829
  }
3855
5830
  const isLeftClick = isMouseEvent(e.browserEvent) && e.browserEvent.button === 0;
@@ -3877,9 +5852,13 @@ let SessionsFlatList = class SessionsFlatList extends Disposable {
3877
5852
  const disposables = ( new DisposableStore());
3878
5853
  const contextKeyService = this.contextKeyService.createOverlay([
3879
5854
  [SessionIsArchivedContext.key, session.isArchived.get()],
3880
- [SessionIsReadContext.key, session.isRead.get()],
5855
+ [SessionIsReadContext.key, session.mainChat.get().isRead.get()],
3881
5856
  [SessionTypeContext.key, session.sessionType],
3882
5857
  [SessionProviderIdContext.key, session.providerId],
5858
+ [
5859
+ SessionSupportsMultipleChatsContext.key,
5860
+ session.capabilities.get().supportsMultipleChats
5861
+ ],
3883
5862
  [
3884
5863
  SessionSupportsRenameContext.key,
3885
5864
  session.capabilities.get().supportsRename ?? false
@@ -3888,6 +5867,7 @@ let SessionsFlatList = class SessionsFlatList extends Disposable {
3888
5867
  SessionSupportsDeleteContext.key,
3889
5868
  session.capabilities.get().supportsDelete ?? false
3890
5869
  ],
5870
+ [IsQuickChatSessionContext.key, session.isQuickChat?.get() ?? false],
3891
5871
  [SessionItemStatusContext.key, session.status.get()]
3892
5872
  ]);
3893
5873
  const menu = disposables.add(this.menuService.createMenu(this.options.contextMenuId, contextKeyService));
@@ -3933,7 +5913,11 @@ let SessionsFlatList = class SessionsFlatList extends Disposable {
3933
5913
  this.tree.setFocus([session]);
3934
5914
  this.tree.domFocus();
3935
5915
  }
5916
+ getFocusedSession() {
5917
+ const focused = this.tree.getFocus()[0];
5918
+ return focused && isSessionItem(focused) ? focused : undefined;
5919
+ }
3936
5920
  };
3937
- SessionsFlatList = SessionsFlatList_1 = ( __decorate([( __param(2, ISessionsService)), ( __param(3, ISessionsListModelService)), ( __param(4, ISessionsManagementService)), ( __param(5, IInstantiationService)), ( __param(6, IContextKeyService)), ( __param(7, IMarkdownRendererService)), ( __param(8, IHoverService)), ( __param(9, IMenuService)), ( __param(10, IContextMenuService)), ( __param(11, IKeybindingService)), ( __param(12, IConfigurationService)), ( __param(13, ISessionsProvidersService)), ( __param(14, IVoicePlaybackService)), ( __param(15, IAgentHostConnectionsService)), ( __param(16, IOpenerService)), ( __param(17, ILabelService)), ( __param(18, IPreferencesService))], SessionsFlatList));
5921
+ SessionsFlatList = SessionsFlatList_1 = ( __decorate([( __param(2, ISessionsService)), ( __param(3, ISessionsListModelService)), ( __param(4, ISessionsManagementService)), ( __param(5, IInstantiationService)), ( __param(6, IContextKeyService)), ( __param(7, IMarkdownRendererService)), ( __param(8, IHoverService)), ( __param(9, IMenuService)), ( __param(10, IContextMenuService)), ( __param(11, IKeybindingService)), ( __param(12, IConfigurationService)), ( __param(13, ISessionsProvidersService)), ( __param(14, IVoicePlaybackService)), ( __param(15, IAgentHostConnectionsService)), ( __param(16, IOpenerService)), ( __param(17, ILabelService)), ( __param(18, IPreferencesService)), ( __param(19, ITelemetryService))], SessionsFlatList));
3938
5922
 
3939
- export { IsSessionPinnedContext, NEW_SESSION_FOR_WORKSPACE_ACTION_ID, QUICK_CHATS_SECTION_ID, SESSIONS_LIST_SHOW_EMPTY_DEFAULT_GROUPS_SETTING, SessionChatItem, SessionChatItemCanDeleteContext, SessionChatItemCanRenameContext, SessionChatItemIsUntitledContext, SessionGroupHasVisibleSessionsContext, SessionGroupIsEmptyContext, SessionGroupToolbarMenuId, SessionItemContextMenuId, SessionItemHasBranchNameContext, SessionItemInGroupContext, SessionItemStatusContext, SessionItemToolbarMenuId, SessionSectionHasGitHubRepositoryContext, SessionSectionHasNonCloudRepositoryContext, SessionSectionRenderer, SessionSectionToolbarMenuId, SessionSectionTypeContext, SessionsFlatList, SessionsGrouping, SessionsList, SessionsListFocusedChatItemContext, SessionsSorting, computeReorderSortChanges, getFirstApprovalAcrossChats, getSessionArchiveOnboardingTargetId, groupByDate, groupByWorkspace, groupSessionsForList, isAutomationSession, isQuickChatSession, limitSessionsForList, sortSessions };
5923
+ export { IsSessionPinnedContext, NEW_SESSION_FOR_WORKSPACE_ACTION_ID, QUICK_CHATS_SECTION_ID, SESSIONS_LIST_SHOW_ARCHIVED_BY_DEFAULT_SETTING, SESSIONS_LIST_SHOW_EMPTY_DEFAULT_GROUPS_SETTING, SESSIONS_LIST_SHOW_UNREAD_IN_COLLAPSED_SECTIONS_SETTING, SessionChatItem, SessionChatItemCanArchiveContext, SessionChatItemCanDeleteContext, SessionChatItemCanRenameContext, SessionChatItemIsArchivedContext, SessionChatItemIsUntitledContext, SessionGroupHasVisibleSessionsContext, SessionGroupIsComparisonContext, SessionGroupIsEmptyContext, SessionGroupToolbarMenuId, SessionItemCanImportContext, SessionItemContextMenuId, SessionItemInExternalSectionContext, SessionItemInGroupContext, SessionItemStatusContext, SessionSectionHasGitHubRepositoryContext, SessionSectionHasNonCloudRepositoryContext, SessionSectionRenderer, SessionSectionToolbarMenuId, SessionSectionTypeContext, SessionsFlatList, SessionsGrouping, SessionsList, SessionsListFocusedChatItemContext, SessionsSorting, computeReorderSortChanges, formatSessionListTime, getFirstApprovalAcrossChats, getSessionArchiveOnboardingTargetId, getSessionOnboardingTargetId, groupByDate, groupByWorkspace, groupSessionsForList, isAutomationSession, isQuickChatSession, limitSessionsForList, sortSessions };