@codingame/monaco-vscode-workbench-service-override 37.6.0 → 38.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (324) hide show
  1. package/common.js +2 -0
  2. package/index.js +9 -10
  3. package/package.json +10 -10
  4. package/session.js +45 -42
  5. package/vscode/src/vs/platform/agentHost/common/sessionComparisonPrompts.d.ts +1 -0
  6. package/vscode/src/vs/platform/agentHost/common/sessionComparisonPrompts.js +12 -0
  7. package/vscode/src/vs/sessions/browser/{singlePaneWorkbench.d.ts → desktopWorkbench.d.ts} +6 -5
  8. package/vscode/src/vs/sessions/browser/{singlePaneWorkbench.js → desktopWorkbench.js} +23 -25
  9. package/vscode/src/vs/sessions/browser/dockedAuxiliaryBarController.d.ts +5 -2
  10. package/vscode/src/vs/sessions/browser/dockedAuxiliaryBarController.js +41 -3
  11. package/vscode/src/vs/sessions/browser/layoutActions.js +25 -41
  12. package/vscode/src/vs/sessions/browser/mobileWorkbench.d.ts +4 -0
  13. package/vscode/src/vs/sessions/browser/mobileWorkbench.js +10 -0
  14. package/vscode/src/vs/sessions/browser/parts/chatCompositeBar.d.ts +10 -5
  15. package/vscode/src/vs/sessions/browser/parts/chatCompositeBar.js +138 -34
  16. package/vscode/src/vs/sessions/browser/parts/chatGroupDropTarget.d.ts +2 -0
  17. package/vscode/src/vs/sessions/browser/parts/chatGroupDropTarget.js +13 -5
  18. package/vscode/src/vs/sessions/browser/parts/chatGroupView.d.ts +27 -5
  19. package/vscode/src/vs/sessions/browser/parts/chatGroupView.js +129 -28
  20. package/vscode/src/vs/sessions/browser/parts/chatGroupsView.d.ts +22 -7
  21. package/vscode/src/vs/sessions/browser/parts/chatGroupsView.js +260 -21
  22. package/vscode/src/vs/sessions/browser/parts/chatHeader.d.ts +25 -0
  23. package/vscode/src/vs/sessions/browser/parts/chatHeader.js +42 -0
  24. package/vscode/src/vs/sessions/browser/parts/customViewGridPart.js +9 -1
  25. package/vscode/src/vs/sessions/browser/parts/customViewNode.js +1 -1
  26. package/vscode/src/vs/sessions/browser/parts/{singlePaneAuxiliaryBarPart.d.ts → desktopAuxiliaryBarPart.d.ts} +4 -4
  27. package/vscode/src/vs/sessions/browser/parts/desktopAuxiliaryBarPart.js +26 -0
  28. package/vscode/src/vs/sessions/browser/parts/{singlePaneEditorPart.d.ts → desktopEditorPart.d.ts} +8 -6
  29. package/vscode/src/vs/sessions/browser/parts/{singlePaneEditorPart.js → desktopEditorPart.js} +25 -5
  30. package/vscode/src/vs/sessions/browser/parts/editorPart.js +16 -4
  31. package/vscode/src/vs/sessions/browser/parts/editorParts.d.ts +1 -1
  32. package/vscode/src/vs/sessions/browser/parts/editorParts.js +7 -6
  33. package/vscode/src/vs/sessions/browser/parts/gridGap.d.ts +14 -0
  34. package/vscode/src/vs/sessions/browser/parts/gridGap.js +69 -0
  35. package/vscode/src/vs/sessions/browser/parts/media/chatCompositeBar.css +132 -4
  36. package/vscode/src/vs/sessions/browser/parts/media/chatGroupsView.css +10 -0
  37. package/vscode/src/vs/sessions/browser/parts/media/editorPart.css +46 -2
  38. package/vscode/src/vs/sessions/browser/parts/media/sessionReadOnlyBanner.css +3 -3
  39. package/vscode/src/vs/sessions/browser/parts/media/sessionView.css +45 -48
  40. package/vscode/src/vs/sessions/browser/parts/media/sessionsPart.css +15 -0
  41. package/vscode/src/vs/sessions/browser/parts/menubar.contribution.js +8 -8
  42. package/vscode/src/vs/sessions/browser/parts/mobile/mobileSessionsPart.js +1 -1
  43. package/vscode/src/vs/sessions/browser/parts/remoteHostUnavailableEmptyState.d.ts +9 -1
  44. package/vscode/src/vs/sessions/browser/parts/remoteHostUnavailableEmptyState.js +21 -3
  45. package/vscode/src/vs/sessions/browser/parts/sessionBarStyles.js +1 -1
  46. package/vscode/src/vs/sessions/browser/parts/sessionDropTarget.d.ts +4 -3
  47. package/vscode/src/vs/sessions/browser/parts/sessionDropTarget.js +29 -15
  48. package/vscode/src/vs/sessions/browser/parts/sessionGridLayout.d.ts +67 -0
  49. package/vscode/src/vs/sessions/browser/parts/sessionGridLayout.js +598 -0
  50. package/vscode/src/vs/sessions/browser/parts/sessionHeader.d.ts +11 -84
  51. package/vscode/src/vs/sessions/browser/parts/sessionHeader.js +37 -317
  52. package/vscode/src/vs/sessions/browser/parts/sessionHeaderBar.d.ts +103 -0
  53. package/vscode/src/vs/sessions/browser/parts/sessionHeaderBar.js +391 -0
  54. package/vscode/src/vs/sessions/browser/parts/sessionReadOnlyBanner.d.ts +6 -4
  55. package/vscode/src/vs/sessions/browser/parts/sessionReadOnlyBanner.js +58 -28
  56. package/vscode/src/vs/sessions/browser/parts/sessionRemoteConnection.d.ts +4 -0
  57. package/vscode/src/vs/sessions/browser/parts/sessionRemoteConnection.js +66 -23
  58. package/vscode/src/vs/sessions/browser/parts/sessionView.d.ts +24 -5
  59. package/vscode/src/vs/sessions/browser/parts/sessionView.js +143 -33
  60. package/vscode/src/vs/sessions/browser/parts/sessionsPart.d.ts +25 -19
  61. package/vscode/src/vs/sessions/browser/parts/sessionsPart.js +157 -58
  62. package/vscode/src/vs/sessions/browser/parts/sessionsParts.d.ts +12 -3
  63. package/vscode/src/vs/sessions/browser/parts/sessionsParts.js +17 -2
  64. package/vscode/src/vs/sessions/browser/sessionWorkspace.d.ts +6 -3
  65. package/vscode/src/vs/sessions/browser/sessionWorkspace.js +2 -2
  66. package/vscode/src/vs/sessions/browser/sessionsSetUpService.js +66 -20
  67. package/vscode/src/vs/sessions/browser/sessionsSignInDialog.d.ts +1 -0
  68. package/vscode/src/vs/sessions/browser/sessionsSignInDialog.js +5 -4
  69. package/vscode/src/vs/sessions/browser/workbenchFactory.d.ts +12 -0
  70. package/vscode/src/vs/sessions/browser/workbenchFactory.js +17 -0
  71. package/vscode/src/vs/sessions/contrib/accountMenu/browser/account.contribution.d.ts +85 -1
  72. package/vscode/src/vs/sessions/contrib/accountMenu/browser/account.contribution.js +118 -100
  73. package/vscode/src/vs/sessions/contrib/accountMenu/browser/chatPetAchievementBadges.d.ts +3 -2
  74. package/vscode/src/vs/sessions/contrib/accountMenu/browser/chatPetAchievementBadges.js +39 -34
  75. package/vscode/src/vs/sessions/contrib/accountMenu/browser/media/accountTitleBarWidget.css +6 -0
  76. package/vscode/src/vs/sessions/contrib/agentFeedback/browser/nullAgentFeedbackService.contribution.d.ts +3 -0
  77. package/vscode/src/vs/sessions/contrib/agentFeedback/browser/nullAgentFeedbackService.contribution.js +6 -0
  78. package/vscode/src/vs/sessions/contrib/aiCustomizationTreeView/browser/aiCustomizationTreeView.contribution.js +18 -18
  79. package/vscode/src/vs/sessions/contrib/aiCustomizationTreeView/browser/aiCustomizationTreeViewViews.js +12 -12
  80. package/vscode/src/vs/sessions/contrib/applyCommitsToParentRepo/browser/applyChangesToParentRepo.js +7 -7
  81. package/vscode/src/vs/sessions/contrib/aquarium/browser/aquarium.contribution.js +12 -12
  82. package/vscode/src/vs/sessions/contrib/aquarium/browser/aquariumOverlay.js +10 -10
  83. package/vscode/src/vs/sessions/contrib/automations/browser/automationDialog.d.ts +78 -8
  84. package/vscode/src/vs/sessions/contrib/automations/browser/automationDialog.js +1166 -202
  85. package/vscode/src/vs/sessions/contrib/automations/browser/automationDialogService.d.ts +11 -1
  86. package/vscode/src/vs/sessions/contrib/automations/browser/automationDialogService.js +190 -69
  87. package/vscode/src/vs/sessions/contrib/automations/browser/automationRunner.d.ts +11 -9
  88. package/vscode/src/vs/sessions/contrib/automations/browser/automationRunner.js +122 -233
  89. package/vscode/src/vs/sessions/contrib/automations/browser/automationTelemetry.d.ts +22 -0
  90. package/vscode/src/vs/sessions/contrib/automations/browser/automationTelemetry.js +62 -0
  91. package/vscode/src/vs/sessions/contrib/automations/browser/automationTools.d.ts +7 -2
  92. package/vscode/src/vs/sessions/contrib/automations/browser/automationTools.js +172 -84
  93. package/vscode/src/vs/sessions/contrib/automations/browser/automations.contribution.js +17 -7
  94. package/vscode/src/vs/sessions/contrib/automations/browser/media/automationDialog.css +242 -60
  95. package/vscode/src/vs/sessions/contrib/automations/browser/providerAutomationService.d.ts +24 -36
  96. package/vscode/src/vs/sessions/contrib/automations/browser/providerAutomationService.js +104 -420
  97. package/vscode/src/vs/sessions/contrib/changes/browser/changes.contribution.js +15 -14
  98. package/vscode/src/vs/sessions/contrib/changes/browser/changesActions.d.ts +13 -3
  99. package/vscode/src/vs/sessions/contrib/changes/browser/changesActions.js +66 -43
  100. package/vscode/src/vs/sessions/contrib/changes/browser/changesMultiDiffSourceResolver.js +2 -7
  101. package/vscode/src/vs/sessions/contrib/changes/browser/changesViewActions.js +54 -59
  102. package/vscode/src/vs/sessions/contrib/changes/browser/changesetReviewActions.js +7 -7
  103. package/vscode/src/vs/sessions/contrib/changes/browser/media/changesActions.css +6 -0
  104. package/vscode/src/vs/sessions/contrib/changes/browser/sessionSyncChanges.js +25 -21
  105. package/vscode/src/vs/sessions/contrib/changes/browser/sessionsChangesAccessibilityHelp.js +21 -27
  106. package/vscode/src/vs/sessions/contrib/chat/browser/sessionChatInputToolbarDebug.js +17 -17
  107. package/vscode/src/vs/sessions/contrib/chat/browser/sessionTaskRunner.d.ts +5 -5
  108. package/vscode/src/vs/sessions/contrib/chat/browser/sessionTaskRunner.js +2 -2
  109. package/vscode/src/vs/sessions/contrib/chatDebug/browser/chatDebug.contribution.js +2 -2
  110. package/vscode/src/vs/sessions/contrib/codeReview/browser/codeReview.contributions.js +9 -16
  111. package/vscode/src/vs/sessions/contrib/customViewTest/browser/customViewTest.contribution.js +7 -7
  112. package/vscode/src/vs/sessions/contrib/editor/browser/addTabActions.js +15 -13
  113. package/vscode/src/vs/sessions/contrib/editor/browser/editor.contribution.d.ts +13 -1
  114. package/vscode/src/vs/sessions/contrib/editor/browser/editor.contribution.js +104 -117
  115. package/vscode/src/vs/sessions/contrib/editor/browser/emptyFileEditor.contribution.js +8 -7
  116. package/vscode/src/vs/sessions/contrib/editor/browser/emptyFileEditor.js +5 -5
  117. package/vscode/src/vs/sessions/contrib/editor/browser/emptyFileEditorInput.js +1 -1
  118. package/vscode/src/vs/sessions/contrib/editor/browser/media/editorBreadcrumbs.css +0 -1
  119. package/vscode/src/vs/sessions/contrib/editor/browser/media/editorHeader.css +1 -1
  120. package/vscode/src/vs/sessions/contrib/files/browser/files.contribution.d.ts +7 -0
  121. package/vscode/src/vs/sessions/contrib/files/browser/files.contribution.js +77 -13
  122. package/vscode/src/vs/sessions/contrib/files/browser/filesView.d.ts +2 -1
  123. package/vscode/src/vs/sessions/contrib/files/browser/filesView.js +14 -4
  124. package/vscode/src/vs/sessions/contrib/layout/browser/baseSessionLayoutController.d.ts +45 -10
  125. package/vscode/src/vs/sessions/contrib/layout/browser/baseSessionLayoutController.js +527 -96
  126. package/vscode/src/vs/sessions/contrib/layout/browser/chatLayoutOwnerKeys.d.ts +18 -0
  127. package/vscode/src/vs/sessions/contrib/layout/browser/chatLayoutOwnerKeys.js +95 -0
  128. package/vscode/src/vs/sessions/contrib/layout/browser/{singlePane/singlePaneDetailPanelCoordinator.d.ts → desktop/desktopDetailPanelCoordinator.d.ts} +5 -4
  129. package/vscode/src/vs/sessions/contrib/layout/browser/{singlePane/singlePaneDetailPanelCoordinator.js → desktop/desktopDetailPanelCoordinator.js} +10 -7
  130. package/vscode/src/vs/sessions/contrib/layout/browser/{singlePane/singlePaneDockedTabsCoordinator.d.ts → desktop/desktopDockedTabsCoordinator.d.ts} +15 -12
  131. package/vscode/src/vs/sessions/contrib/layout/browser/{singlePane/singlePaneDockedTabsCoordinator.js → desktop/desktopDockedTabsCoordinator.js} +91 -44
  132. package/vscode/src/vs/sessions/contrib/layout/browser/{singlePane/singlePaneDraftSessionStrategy.d.ts → desktop/desktopDraftSessionStrategy.d.ts} +10 -5
  133. package/vscode/src/vs/sessions/contrib/layout/browser/{singlePane/singlePaneDraftSessionStrategy.js → desktop/desktopDraftSessionStrategy.js} +95 -22
  134. package/vscode/src/vs/sessions/contrib/layout/browser/{singlePane/singlePaneExistingSessionStrategy.d.ts → desktop/desktopExistingSessionStrategy.d.ts} +13 -11
  135. package/vscode/src/vs/sessions/contrib/layout/browser/{singlePane/singlePaneExistingSessionStrategy.js → desktop/desktopExistingSessionStrategy.js} +137 -57
  136. package/vscode/src/vs/sessions/contrib/layout/browser/{singlePane/singlePaneLayoutStrategy.d.ts → desktop/desktopLayoutStrategy.d.ts} +22 -13
  137. package/vscode/src/vs/sessions/contrib/layout/browser/{singlePane/singlePaneLayoutStrategy.js → desktop/desktopLayoutStrategy.js} +2 -2
  138. package/vscode/src/vs/sessions/contrib/layout/browser/desktop/desktopOwnerCompositionStore.d.ts +22 -0
  139. package/vscode/src/vs/sessions/contrib/layout/browser/desktop/desktopOwnerCompositionStore.js +136 -0
  140. package/vscode/src/vs/sessions/contrib/layout/browser/{singlePane/singlePaneSharedHelpers.d.ts → desktop/desktopSharedHelpers.d.ts} +9 -2
  141. package/vscode/src/vs/sessions/contrib/layout/browser/desktop/desktopSharedHelpers.js +56 -0
  142. package/vscode/src/vs/sessions/contrib/layout/browser/{singlePane/singlePaneVisibilityProfileStore.d.ts → desktop/desktopVisibilityProfileStore.d.ts} +3 -2
  143. package/vscode/src/vs/sessions/contrib/layout/browser/{singlePane/singlePaneVisibilityProfileStore.js → desktop/desktopVisibilityProfileStore.js} +10 -9
  144. package/vscode/src/vs/sessions/contrib/layout/browser/desktopLayoutController.d.ts +71 -0
  145. package/vscode/src/vs/sessions/contrib/layout/browser/desktopLayoutController.js +201 -0
  146. package/vscode/src/vs/sessions/contrib/layout/browser/sessions.layout.contribution.d.ts +8 -1
  147. package/vscode/src/vs/sessions/contrib/layout/browser/sessions.layout.contribution.js +35 -35
  148. package/vscode/src/vs/sessions/contrib/layout/common/sessionEditorWorkingSet.d.ts +39 -0
  149. package/vscode/src/vs/sessions/contrib/layout/common/sessionEditorWorkingSet.js +73 -0
  150. package/vscode/src/vs/sessions/contrib/onboardingTours/browser/newSessionTourContribution.d.ts +42 -1
  151. package/vscode/src/vs/sessions/contrib/onboardingTours/browser/newSessionTourContribution.js +14 -10
  152. package/vscode/src/vs/sessions/contrib/onboardingTours/browser/newSessionViewTourContribution.js +3 -4
  153. package/vscode/src/vs/sessions/contrib/onboardingTours/browser/newSessionViewTourTrigger.d.ts +2 -2
  154. package/vscode/src/vs/sessions/contrib/onboardingTours/browser/newSessionViewTourTrigger.js +13 -9
  155. package/vscode/src/vs/sessions/contrib/onboardingTours/browser/newSessionViewV2TourContribution.js +20 -5
  156. package/vscode/src/vs/sessions/contrib/onboardingTours/browser/newSessionViewV2TourVariation.d.ts +8 -0
  157. package/vscode/src/vs/sessions/contrib/onboardingTours/browser/newSessionViewV2TourVariation.js +19 -0
  158. package/vscode/src/vs/sessions/contrib/onboardingTours/browser/newSessionViewV3Prompt.js +21 -20
  159. package/vscode/src/vs/sessions/contrib/onboardingTours/browser/tours/newSessionTour.js +10 -5
  160. package/vscode/src/vs/sessions/contrib/onboardingTours/browser/tours/newSessionViewTour.js +12 -8
  161. package/vscode/src/vs/sessions/contrib/onboardingTours/browser/tours/newSessionViewTourShared.d.ts +3 -1
  162. package/vscode/src/vs/sessions/contrib/onboardingTours/browser/tours/newSessionViewTourShared.js +12 -7
  163. package/vscode/src/vs/sessions/contrib/onboardingTours/browser/tours/newSessionViewV2Tour.d.ts +9 -1
  164. package/vscode/src/vs/sessions/contrib/onboardingTours/browser/tours/newSessionViewV2Tour.js +46 -19
  165. package/vscode/src/vs/sessions/contrib/onboardingTours/browser/tours/newSessionViewV3Tour.js +2 -0
  166. package/vscode/src/vs/sessions/contrib/policyBlocked/browser/media/sessionsPolicyBlocked.css +33 -0
  167. package/vscode/src/vs/sessions/contrib/policyBlocked/browser/policyBlocked.contribution.d.ts +4 -2
  168. package/vscode/src/vs/sessions/contrib/policyBlocked/browser/policyBlocked.contribution.js +29 -8
  169. package/vscode/src/vs/sessions/contrib/policyBlocked/browser/sessionsPolicyBlocked.d.ts +15 -2
  170. package/vscode/src/vs/sessions/contrib/policyBlocked/browser/sessionsPolicyBlocked.js +169 -32
  171. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostForkActions.js +30 -8
  172. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostSessionBranchActions.js +8 -34
  173. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentMergeActions.js +63 -49
  174. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/exportDebugLogsAction.js +1 -1
  175. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/mobile/mobileChatInputConfigPicker.js +31 -17
  176. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/connectionDiagnostics.contribution.d.ts +32 -0
  177. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/connectionDiagnostics.contribution.js +250 -0
  178. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/connectionDiagnosticsLogs.d.ts +6 -0
  179. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/connectionDiagnosticsLogs.js +52 -0
  180. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/connectionDiagnosticsReport.d.ts +51 -0
  181. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/connectionDiagnosticsReport.js +439 -0
  182. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/connectionDiagnosticsService.d.ts +45 -0
  183. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/connectionDiagnosticsService.js +595 -0
  184. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/devContainerAgentHostService.d.ts +20 -3
  185. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/devContainerAgentHostService.js +360 -46
  186. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/devContainerSource.d.ts +9 -0
  187. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/devContainerSource.js +59 -0
  188. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/media/connectionDiagnostics.css +201 -0
  189. package/vscode/src/vs/sessions/contrib/remoteSessions/browser/getRemoteSessionTool.d.ts +10 -0
  190. package/vscode/src/vs/sessions/contrib/remoteSessions/browser/getRemoteSessionTool.js +70 -0
  191. package/vscode/src/vs/sessions/contrib/remoteSessions/browser/remoteSessionChatService.d.ts +20 -0
  192. package/vscode/src/vs/sessions/contrib/remoteSessions/browser/remoteSessionChatService.js +104 -0
  193. package/vscode/src/vs/sessions/contrib/remoteSessions/browser/remoteSessionInspector.d.ts +15 -0
  194. package/vscode/src/vs/sessions/contrib/remoteSessions/browser/remoteSessionInspector.js +152 -0
  195. package/vscode/src/vs/sessions/contrib/remoteSessions/browser/remoteSessionMessageRouter.d.ts +49 -0
  196. package/vscode/src/vs/sessions/contrib/remoteSessions/browser/remoteSessionMessageRouter.js +340 -0
  197. package/vscode/src/vs/sessions/contrib/remoteSessions/browser/remoteSessionService.d.ts +41 -0
  198. package/vscode/src/vs/sessions/contrib/remoteSessions/browser/remoteSessionService.js +400 -0
  199. package/vscode/src/vs/sessions/contrib/remoteSessions/browser/remoteSessionSource.d.ts +28 -0
  200. package/vscode/src/vs/sessions/contrib/remoteSessions/browser/remoteSessionSource.js +178 -0
  201. package/vscode/src/vs/sessions/contrib/remoteSessions/browser/remoteSessionTools.d.ts +17 -0
  202. package/vscode/src/vs/sessions/contrib/remoteSessions/browser/remoteSessionTools.js +206 -0
  203. package/vscode/src/vs/sessions/contrib/remoteSessions/browser/remoteSessions.contribution.d.ts +1 -0
  204. package/vscode/src/vs/sessions/contrib/remoteSessions/browser/remoteSessions.contribution.js +58 -0
  205. package/vscode/src/vs/sessions/contrib/remoteSessions/browser/sendRemoteMessageTool.d.ts +10 -0
  206. package/vscode/src/vs/sessions/contrib/remoteSessions/browser/sendRemoteMessageTool.js +90 -0
  207. package/vscode/src/vs/sessions/contrib/remoteSessions/common/remoteSessionInspection.d.ts +38 -0
  208. package/vscode/src/vs/sessions/contrib/remoteSessions/common/remoteSessionInspection.js +58 -0
  209. package/vscode/src/vs/sessions/contrib/search/browser/search.contribution.js +4 -5
  210. package/vscode/src/vs/sessions/contrib/search/browser/searchEditorEmptyState.contribution.js +1 -1
  211. package/vscode/src/vs/sessions/contrib/sessionComparison/browser/sessionComparison.contribution.d.ts +1 -0
  212. package/vscode/src/vs/sessions/contrib/sessionComparison/browser/sessionComparison.contribution.js +33 -0
  213. package/vscode/src/vs/sessions/contrib/sessionComparison/browser/sessionComparisonGridController.d.ts +30 -0
  214. package/vscode/src/vs/sessions/contrib/sessionComparison/browser/sessionComparisonGridController.js +190 -0
  215. package/vscode/src/vs/sessions/contrib/sessionComparison/browser/sessionComparisonTool.d.ts +31 -0
  216. package/vscode/src/vs/sessions/contrib/sessionComparison/browser/sessionComparisonTool.js +559 -0
  217. package/vscode/src/vs/sessions/contrib/sessionComparison/browser/sessionComparisonViewService.d.ts +12 -0
  218. package/vscode/src/vs/sessions/contrib/sessionComparison/browser/sessionComparisonViewService.js +38 -0
  219. package/vscode/src/vs/sessions/contrib/sessions/browser/blockedSessionsIndicatorModel.d.ts +13 -4
  220. package/vscode/src/vs/sessions/contrib/sessions/browser/blockedSessionsIndicatorModel.js +155 -22
  221. package/vscode/src/vs/sessions/contrib/sessions/browser/blockedSessionsList.js +9 -5
  222. package/vscode/src/vs/sessions/contrib/sessions/browser/media/automationsCards.css +90 -25
  223. package/vscode/src/vs/sessions/contrib/sessions/browser/media/sessionsTitleBarWidget.css +21 -4
  224. package/vscode/src/vs/sessions/contrib/sessions/browser/sessionDetailsAction.d.ts +2 -1
  225. package/vscode/src/vs/sessions/contrib/sessions/browser/sessionDetailsAction.js +11 -7
  226. package/vscode/src/vs/sessions/contrib/sessions/browser/sessions.contribution.d.ts +116 -1
  227. package/vscode/src/vs/sessions/contrib/sessions/browser/sessions.contribution.js +126 -30
  228. package/vscode/src/vs/sessions/contrib/sessions/browser/sessionsAccountTelemetry.d.ts +26 -0
  229. package/vscode/src/vs/sessions/contrib/sessions/browser/sessionsAccountTelemetry.js +160 -0
  230. package/vscode/src/vs/sessions/contrib/sessions/browser/sessionsActions.d.ts +14 -6
  231. package/vscode/src/vs/sessions/contrib/sessions/browser/sessionsActions.js +555 -151
  232. package/vscode/src/vs/sessions/contrib/sessions/browser/sessionsLifecycleTracker.d.ts +192 -0
  233. package/vscode/src/vs/sessions/contrib/sessions/browser/sessionsLifecycleTracker.js +510 -0
  234. package/vscode/src/vs/sessions/contrib/sessions/browser/sessionsTelemetry.contribution.d.ts +6 -7
  235. package/vscode/src/vs/sessions/contrib/sessions/browser/sessionsTelemetry.contribution.js +64 -57
  236. package/vscode/src/vs/sessions/contrib/sessions/browser/sessionsTitleBarWidget.d.ts +5 -3
  237. package/vscode/src/vs/sessions/contrib/sessions/browser/sessionsTitleBarWidget.js +83 -51
  238. package/vscode/src/vs/sessions/contrib/sessions/browser/sessionsWindowNotifier.d.ts +5 -1
  239. package/vscode/src/vs/sessions/contrib/sessions/browser/sessionsWindowNotifier.js +33 -12
  240. package/vscode/src/vs/sessions/contrib/sessions/browser/views/automationCataloguePresentation.d.ts +3 -0
  241. package/vscode/src/vs/sessions/contrib/sessions/browser/views/automationCataloguePresentation.js +53 -0
  242. package/vscode/src/vs/sessions/contrib/sessions/browser/views/automationTemplates.js +10 -10
  243. package/vscode/src/vs/sessions/contrib/sessions/browser/views/automationsAccessibility.d.ts +2 -2
  244. package/vscode/src/vs/sessions/contrib/sessions/browser/views/automationsAccessibility.js +103 -55
  245. package/vscode/src/vs/sessions/contrib/sessions/browser/views/automationsView.d.ts +7 -1
  246. package/vscode/src/vs/sessions/contrib/sessions/browser/views/automationsView.js +679 -325
  247. package/vscode/src/vs/sessions/contrib/sessions/browser/views/sessionsViewActions.d.ts +27 -1
  248. package/vscode/src/vs/sessions/contrib/sessions/browser/views/sessionsViewActions.js +508 -163
  249. package/vscode/src/vs/sessions/contrib/terminal/browser/agentHostSessionTaskRunner.d.ts +20 -2
  250. package/vscode/src/vs/sessions/contrib/terminal/browser/agentHostSessionTaskRunner.js +100 -17
  251. package/vscode/src/vs/sessions/contrib/terminal/browser/sessionsTerminalContribution.d.ts +5 -1
  252. package/vscode/src/vs/sessions/contrib/terminal/browser/sessionsTerminalContribution.js +108 -30
  253. package/vscode/src/vs/sessions/contrib/workspace/browser/workspaceFolderManagement.d.ts +5 -3
  254. package/vscode/src/vs/sessions/contrib/workspace/browser/workspaceFolderManagement.js +47 -35
  255. package/vscode/src/vs/sessions/services/agentHostFilter/browser/agentHostFilterService.d.ts +9 -4
  256. package/vscode/src/vs/sessions/services/agentHostFilter/browser/agentHostFilterService.js +75 -25
  257. package/vscode/src/vs/sessions/services/customView/browser/customViewService.d.ts +11 -4
  258. package/vscode/src/vs/sessions/services/customView/browser/customViewService.js +17 -9
  259. package/vscode/src/vs/sessions/services/sessions/browser/closedItemHistory.d.ts +5 -0
  260. package/vscode/src/vs/sessions/services/sessions/browser/closedItemHistory.js +20 -2
  261. package/vscode/src/vs/sessions/services/sessions/browser/sessionComparisonService.d.ts +75 -0
  262. package/vscode/src/vs/sessions/services/sessions/browser/sessionComparisonService.js +1135 -0
  263. package/vscode/src/vs/sessions/services/sessions/browser/sessionGridState.d.ts +17 -0
  264. package/vscode/src/vs/sessions/services/sessions/browser/sessionGridState.js +99 -0
  265. package/vscode/src/vs/sessions/services/sessions/browser/sessionGroupsService.d.ts +4 -0
  266. package/vscode/src/vs/sessions/services/sessions/browser/sessionGroupsService.js +88 -23
  267. package/vscode/src/vs/sessions/services/sessions/browser/sessionNavigation.d.ts +19 -26
  268. package/vscode/src/vs/sessions/services/sessions/browser/sessionNavigation.js +115 -74
  269. package/vscode/src/vs/sessions/services/sessions/browser/sessionsListModelService.js +1 -1
  270. package/vscode/src/vs/sessions/services/sessions/browser/sessionsManagementService.d.ts +22 -7
  271. package/vscode/src/vs/sessions/services/sessions/browser/sessionsManagementService.js +278 -60
  272. package/vscode/src/vs/sessions/services/sessions/browser/sessionsRecencyHistory.d.ts +17 -20
  273. package/vscode/src/vs/sessions/services/sessions/browser/sessionsRecencyHistory.js +33 -22
  274. package/vscode/src/vs/sessions/services/sessions/browser/sessionsService.d.ts +28 -8
  275. package/vscode/src/vs/sessions/services/sessions/browser/sessionsService.js +673 -160
  276. package/vscode/src/vs/sessions/services/sessions/browser/visibleSessions.d.ts +13 -4
  277. package/vscode/src/vs/sessions/services/sessions/browser/visibleSessions.js +105 -15
  278. package/vscode/src/vs/sessions/services/sessions/common/sessionContextKeys.js +53 -34
  279. package/vscode/src/vs/sessions/services/workspaceFolderLabel/browser/workspaceFolderLabelService.js +1 -1
  280. package/vscode/src/vs/workbench/browser/layout.d.ts +46 -70
  281. package/vscode/src/vs/workbench/browser/layout.js +243 -44
  282. package/vscode/src/vs/workbench/browser/workbench.d.ts +1 -3
  283. package/vscode/src/vs/workbench/browser/workbench.js +26 -24
  284. package/vscode/src/vs/workbench/contrib/chat/common/automations/schedule.d.ts +6 -0
  285. package/vscode/src/vs/workbench/contrib/chat/common/automations/schedule.js +41 -0
  286. package/vscode/src/vs/workbench/contrib/chat/common/chatUsage.d.ts +15 -0
  287. package/vscode/src/vs/workbench/contrib/chat/common/chatUsage.js +56 -0
  288. package/vscode/src/vs/platform/agentHost/common/meta/agentCheckoutOperationMeta.d.ts +0 -18
  289. package/vscode/src/vs/platform/agentHost/common/meta/agentCheckoutOperationMeta.js +0 -27
  290. package/vscode/src/vs/sessions/browser/parts/singlePaneAuxiliaryBarPart.js +0 -36
  291. package/vscode/src/vs/sessions/contrib/automations/browser/automationLeaderElection.d.ts +0 -37
  292. package/vscode/src/vs/sessions/contrib/automations/browser/automationLeaderElection.js +0 -126
  293. package/vscode/src/vs/sessions/contrib/automations/browser/automationScheduler.d.ts +0 -59
  294. package/vscode/src/vs/sessions/contrib/automations/browser/automationScheduler.js +0 -232
  295. package/vscode/src/vs/sessions/contrib/automations/browser/automationStorageService.d.ts +0 -13
  296. package/vscode/src/vs/sessions/contrib/automations/browser/automationStorageService.js +0 -22
  297. package/vscode/src/vs/sessions/contrib/blockedSessions/browser/blockedSessions.d.ts +0 -45
  298. package/vscode/src/vs/sessions/contrib/blockedSessions/browser/blockedSessions.js +0 -110
  299. package/vscode/src/vs/sessions/contrib/layout/browser/desktopSessionLayoutController.d.ts +0 -112
  300. package/vscode/src/vs/sessions/contrib/layout/browser/desktopSessionLayoutController.js +0 -444
  301. package/vscode/src/vs/sessions/contrib/layout/browser/singlePane/singlePaneSharedHelpers.js +0 -43
  302. package/vscode/src/vs/sessions/contrib/layout/browser/singlePaneLayoutController.d.ts +0 -55
  303. package/vscode/src/vs/sessions/contrib/layout/browser/singlePaneLayoutController.js +0 -91
  304. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostClaudePermissionModePicker.d.ts +0 -26
  305. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostClaudePermissionModePicker.js +0 -98
  306. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostCodexApprovalsPicker.d.ts +0 -33
  307. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostCodexApprovalsPicker.js +0 -98
  308. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostModeIcon.d.ts +0 -2
  309. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostModeIcon.js +0 -13
  310. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostModePicker.d.ts +0 -122
  311. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostModePicker.js +0 -464
  312. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostPermissionPickerActionItem.d.ts +0 -35
  313. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostPermissionPickerActionItem.js +0 -90
  314. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostPermissionPickerDelegate.d.ts +0 -84
  315. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostPermissionPickerDelegate.js +0 -328
  316. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostSessionConfigPicker.d.ts +0 -174
  317. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostSessionConfigPicker.js +0 -1390
  318. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/media/agentHostSessionConfigPicker.css +0 -44
  319. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/mobile/mobileAgentHostModePicker.d.ts +0 -30
  320. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/mobile/mobileAgentHostModePicker.js +0 -78
  321. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/mobile/mobileChatPhoneInputTarget.d.ts +0 -11
  322. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/mobile/mobileChatPhoneInputTarget.js +0 -26
  323. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/remoteAgentHostConnectionCustomization.d.ts +0 -27
  324. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/remoteAgentHostConnectionCustomization.js +0 -26
@@ -0,0 +1,17 @@
1
+ import { ISerializedGrid } from "@codingame/monaco-vscode-api/vscode/vs/base/browser/ui/grid/grid";
2
+ export interface ISessionGridState {
3
+ readonly version: 1;
4
+ readonly grid: ISerializedGrid;
5
+ readonly sessions: readonly {
6
+ readonly id: string;
7
+ readonly resource?: string;
8
+ readonly sticky: boolean;
9
+ }[];
10
+ readonly active: string;
11
+ }
12
+ export declare function isSessionGridLeafData(data: unknown): data is {
13
+ readonly id: string;
14
+ };
15
+ export declare function isSessionGridState(value: unknown): value is ISessionGridState;
16
+ /** Remap or prune unavailable bindings without inverting branch orientation. */
17
+ export declare function projectSessionGrid(grid: ISerializedGrid, map: (id: string) => string | undefined): ISerializedGrid | undefined;
@@ -0,0 +1,99 @@
1
+
2
+ import { Orientation } from '@codingame/monaco-vscode-api/vscode/vs/base/browser/ui/sash/sash';
3
+ import { URI } from '@codingame/monaco-vscode-api/vscode/vs/base/common/uri';
4
+
5
+ function isSessionGridLeafData(data) {
6
+ return !!data && typeof data === "object" && "id" in data && typeof data.id === "string";
7
+ }
8
+ function isSessionGridState(value) {
9
+ if (!value || typeof value !== "object" || !("version" in value) || value.version !== 1 || !("grid" in value) || !value.grid || typeof value.grid !== "object" || !("sessions" in value) || !Array.isArray(value.sessions) || !("active" in value) || typeof value.active !== "string") {
10
+ return false;
11
+ }
12
+ const ids = ( new Set());
13
+ const resources = ( new Set());
14
+ for (const session of value.sessions) {
15
+ if (!session || typeof session !== "object" || typeof session.id !== "string" || !session.id || typeof session.sticky !== "boolean" || (session.resource !== undefined && typeof session.resource !== "string") || ( ids.has(session.id)) || ( resources.has(session.resource))) {
16
+ return false;
17
+ }
18
+ ids.add(session.id);
19
+ resources.add(session.resource);
20
+ if (session.resource !== undefined) {
21
+ try {
22
+ ( URI.parse(session.resource, true));
23
+ } catch {
24
+ return false;
25
+ }
26
+ }
27
+ }
28
+ const grid = value.grid;
29
+ const finiteSize = size => typeof size === "number" && Number.isFinite(size) && size >= 0;
30
+ if (!ids.size || ids.size > 256 || !( ids.has(value.active)) || !("orientation" in grid) || (grid.orientation !== Orientation.HORIZONTAL && grid.orientation !== Orientation.VERTICAL) || !("width" in grid) || !finiteSize(grid.width) || !("height" in grid) || !finiteSize(grid.height) || !("root" in grid)) {
31
+ return false;
32
+ }
33
+ let count = 0;
34
+ let maximized = 0;
35
+ const leaves = ( new Set());
36
+ const validNode = (node, depth) => {
37
+ if (++count > 1024 || depth > 32 || !node || typeof node !== "object" || !("size" in node) || !finiteSize(node.size) || !("type" in node) || !("data" in node) || ("visible" in node && typeof node.visible !== "boolean")) {
38
+ return false;
39
+ }
40
+ if (node.type === "branch") {
41
+ return Array.isArray(node.data) && node.data.length > 0 && node.data.every(child => validNode(child, depth + 1));
42
+ }
43
+ if (depth === 0 || node.type !== "leaf" || !isSessionGridLeafData(node.data) || !( ids.has(node.data.id)) || ( leaves.has(node.data.id))) {
44
+ return false;
45
+ }
46
+ if ("maximized" in node) {
47
+ if (typeof node.maximized !== "boolean" || (node.maximized && ++maximized > 1)) {
48
+ return false;
49
+ }
50
+ }
51
+ leaves.add(node.data.id);
52
+ return true;
53
+ };
54
+ return validNode(grid.root, 0) && leaves.size === ids.size;
55
+ }
56
+ function projectSessionGrid(grid, map) {
57
+ const leaves = ( new Map());
58
+ const project = node => {
59
+ if (node.type === "leaf") {
60
+ if (!isSessionGridLeafData(node.data)) {
61
+ throw ( new Error("Invalid session grid leaf"));
62
+ }
63
+ const id = map(node.data.id);
64
+ if (id === undefined) {
65
+ return undefined;
66
+ }
67
+ const existing = leaves.get(id);
68
+ if (existing) {
69
+ if (node.maximized) {
70
+ existing.maximized = true;
71
+ }
72
+ return undefined;
73
+ }
74
+ const leaf = {
75
+ ...node,
76
+ data: {
77
+ id
78
+ }
79
+ };
80
+ delete leaf.visible;
81
+ leaves.set(id, leaf);
82
+ return leaf;
83
+ }
84
+ const data = node.data.map(project).filter(node => node !== undefined);
85
+ const branch = {
86
+ ...node,
87
+ data
88
+ };
89
+ delete branch.visible;
90
+ return data.length ? branch : undefined;
91
+ };
92
+ const root = project(grid.root);
93
+ return root ? {
94
+ ...grid,
95
+ root
96
+ } : undefined;
97
+ }
98
+
99
+ export { isSessionGridLeafData, isSessionGridState, projectSessionGrid };
@@ -61,8 +61,12 @@ export declare class SessionGroupsService extends Disposable implements ISession
61
61
  addToGroup(sessionIdOrIds: string | Iterable<string>, groupId: string): void;
62
62
  removeFromGroup(sessionId: string): void;
63
63
  getGroupOfSession(sessionId: string): string | undefined;
64
+ isExplicitlyUngrouped(sessionId: string): boolean;
64
65
  getSessionIdsInGroup(groupId: string): string[];
65
66
  setPendingNewSessionGroup(groupId: string): void;
67
+ private capturePendingNewSessionGroup;
68
+ private replaceInFlightSession;
69
+ private setCurrentMembership;
66
70
  private setMembership;
67
71
  private markExplicitlyUngrouped;
68
72
  private removeArchivedMembership;
@@ -36,8 +36,28 @@ let SessionGroupsService = class SessionGroupsService extends Disposable {
36
36
  this.save();
37
37
  }
38
38
  this._register(this.sessionsManagementService.onDidChangeSessions(e => {
39
+ const transientMembershipChanged = ( new Set());
40
+ const inFlightSessionIds = ( new Set(
41
+ this.sessionsManagementService.getInFlightNewSessionRequests().map(session => session.sessionId)
42
+ ));
43
+ for (const session of e.added) {
44
+ if (( inFlightSessionIds.has(session.sessionId)) && this.capturePendingNewSessionGroup(session.sessionId)) {
45
+ transientMembershipChanged.add(session.sessionId);
46
+ }
47
+ }
39
48
  for (const session of e.removed) {
40
- this._inFlightSessionGroups.delete(session.sessionId);
49
+ if (this._inFlightSessionGroups.delete(session.sessionId)) {
50
+ transientMembershipChanged.add(session.sessionId);
51
+ }
52
+ }
53
+ const visibleSessionIds = ( new Set(
54
+ this.sessionsManagementService.getSessions().map(session => session.sessionId)
55
+ ));
56
+ for (const sessionId of ( this._inFlightSessionGroups.keys())) {
57
+ if (!( visibleSessionIds.has(sessionId))) {
58
+ this._inFlightSessionGroups.delete(sessionId);
59
+ transientMembershipChanged.add(sessionId);
60
+ }
41
61
  }
42
62
  const changed = ( new Set());
43
63
  const archivedStateChanged = this.removeArchivedMembership([...e.added, ...e.changed], changed);
@@ -45,6 +65,9 @@ let SessionGroupsService = class SessionGroupsService extends Disposable {
45
65
  if (archivedStateChanged || changed.size > 0) {
46
66
  this.save();
47
67
  }
68
+ for (const sessionId of transientMembershipChanged) {
69
+ changed.add(sessionId);
70
+ }
48
71
  if (changed.size > 0) {
49
72
  this._onDidChange.fire({
50
73
  groupsChanged: false,
@@ -79,27 +102,25 @@ let SessionGroupsService = class SessionGroupsService extends Disposable {
79
102
  }
80
103
  }));
81
104
  this._register(this.sessionsManagementService.onWillSendRequest(session => {
82
- if (this._pendingNewSessionGroupId === undefined) {
83
- return;
105
+ if (this.capturePendingNewSessionGroup(session.sessionId)) {
106
+ this._onDidChange.fire({
107
+ groupsChanged: false,
108
+ membershipChanged: ( new Set([session.sessionId]))
109
+ });
84
110
  }
85
- this._inFlightSessionGroups.set(session.sessionId, this._pendingNewSessionGroupId);
86
- this._pendingNewSessionGroupId = undefined;
87
111
  }));
88
- this._register(this.sessionsManagementService.onDidReplaceSession((
112
+ this._register(this.sessionsManagementService.onDidReplaceNewDraftSession((
89
113
  {
90
114
  from,
91
115
  to
92
116
  }
93
- ) => {
94
- if (from.sessionId === to.sessionId) {
95
- return;
96
- }
97
- const groupId = this._inFlightSessionGroups.get(from.sessionId);
98
- if (groupId !== undefined) {
99
- this._inFlightSessionGroups.delete(from.sessionId);
100
- this._inFlightSessionGroups.set(to.sessionId, groupId);
117
+ ) => this.replaceInFlightSession(from, to)));
118
+ this._register(this.sessionsManagementService.onDidReplaceSession((
119
+ {
120
+ from,
121
+ to
101
122
  }
102
- }));
123
+ ) => this.replaceInFlightSession(from, to)));
103
124
  this._register(this.sessionsManagementService.onDidStartSession(session => {
104
125
  const groupId = this._inFlightSessionGroups.get(session.sessionId);
105
126
  if (groupId === undefined) {
@@ -119,7 +140,7 @@ let SessionGroupsService = class SessionGroupsService extends Disposable {
119
140
  do {
120
141
  placed = false;
121
142
  for (const session of sessions) {
122
- if (session.isArchived.get() || ( this._membership.has(session.sessionId)) || ( this._explicitlyUngroupedSessionIds.has(session.sessionId))) {
143
+ if (session.isArchived.get() || ( this._membership.has(session.sessionId)) || ( this._inFlightSessionGroups.has(session.sessionId)) || ( this._explicitlyUngroupedSessionIds.has(session.sessionId))) {
123
144
  continue;
124
145
  }
125
146
  const creatorResource = session.createdBySession?.get()?.session;
@@ -148,7 +169,7 @@ let SessionGroupsService = class SessionGroupsService extends Disposable {
148
169
  const membershipChanged = ( new Set());
149
170
  if (memberSessionIds) {
150
171
  for (const sessionId of memberSessionIds) {
151
- this.setMembership(sessionId, group.id, membershipChanged);
172
+ this.setCurrentMembership(sessionId, group.id, membershipChanged);
152
173
  }
153
174
  }
154
175
  this.updateDefaultPlacement(this.sessionsManagementService.getSessions(), membershipChanged);
@@ -207,7 +228,7 @@ let SessionGroupsService = class SessionGroupsService extends Disposable {
207
228
  const sessionIds = typeof sessionIdOrIds === "string" ? [sessionIdOrIds] : sessionIdOrIds;
208
229
  const membershipChanged = ( new Set());
209
230
  for (const sessionId of sessionIds) {
210
- this.setMembership(sessionId, groupId, membershipChanged);
231
+ this.setCurrentMembership(sessionId, groupId, membershipChanged);
211
232
  }
212
233
  this.updateDefaultPlacement(this.sessionsManagementService.getSessions(), membershipChanged);
213
234
  if (membershipChanged.size === 0) {
@@ -220,7 +241,9 @@ let SessionGroupsService = class SessionGroupsService extends Disposable {
220
241
  });
221
242
  }
222
243
  removeFromGroup(sessionId) {
223
- if (!this._membership.delete(sessionId)) {
244
+ const membershipDeleted = this._membership.delete(sessionId);
245
+ const transientMembershipDeleted = this._inFlightSessionGroups.delete(sessionId);
246
+ if (!membershipDeleted && !transientMembershipDeleted) {
224
247
  return;
225
248
  }
226
249
  this.markExplicitlyUngrouped(sessionId);
@@ -231,20 +254,62 @@ let SessionGroupsService = class SessionGroupsService extends Disposable {
231
254
  });
232
255
  }
233
256
  getGroupOfSession(sessionId) {
234
- return this._membership.get(sessionId);
257
+ return this._membership.get(sessionId) ?? this._inFlightSessionGroups.get(sessionId);
258
+ }
259
+ isExplicitlyUngrouped(sessionId) {
260
+ return ( this._explicitlyUngroupedSessionIds.has(sessionId));
235
261
  }
236
262
  getSessionIdsInGroup(groupId) {
237
- const result = [];
263
+ const result = ( new Set());
238
264
  for (const [sessionId, gid] of this._membership) {
239
265
  if (gid === groupId) {
240
- result.push(sessionId);
266
+ result.add(sessionId);
267
+ }
268
+ }
269
+ for (const [sessionId, gid] of this._inFlightSessionGroups) {
270
+ if (gid === groupId) {
271
+ result.add(sessionId);
241
272
  }
242
273
  }
243
- return result;
274
+ return [...result];
244
275
  }
245
276
  setPendingNewSessionGroup(groupId) {
246
277
  this._pendingNewSessionGroupId = ( this._groups.has(groupId)) ? groupId : undefined;
247
278
  }
279
+ capturePendingNewSessionGroup(sessionId) {
280
+ if (this._pendingNewSessionGroupId === undefined) {
281
+ return false;
282
+ }
283
+ this._inFlightSessionGroups.set(sessionId, this._pendingNewSessionGroupId);
284
+ this._pendingNewSessionGroupId = undefined;
285
+ return true;
286
+ }
287
+ replaceInFlightSession(from, to) {
288
+ if (from.sessionId === to.sessionId) {
289
+ return;
290
+ }
291
+ const groupId = this._inFlightSessionGroups.get(from.sessionId);
292
+ if (groupId === undefined) {
293
+ return;
294
+ }
295
+ this._inFlightSessionGroups.delete(from.sessionId);
296
+ this._inFlightSessionGroups.set(to.sessionId, groupId);
297
+ this._onDidChange.fire({
298
+ groupsChanged: false,
299
+ membershipChanged: ( new Set([from.sessionId, to.sessionId]))
300
+ });
301
+ }
302
+ setCurrentMembership(sessionId, groupId, changed) {
303
+ const inFlightGroupId = this._inFlightSessionGroups.get(sessionId);
304
+ if (inFlightGroupId !== undefined) {
305
+ if (inFlightGroupId !== groupId) {
306
+ this._inFlightSessionGroups.set(sessionId, groupId);
307
+ changed.add(sessionId);
308
+ }
309
+ return;
310
+ }
311
+ this.setMembership(sessionId, groupId, changed);
312
+ }
248
313
  setMembership(sessionId, groupId, changed) {
249
314
  if (this._explicitlyUngroupedSessionIds.delete(sessionId) || this._membership.get(sessionId) !== groupId) {
250
315
  this._membership.set(sessionId, groupId);
@@ -1,12 +1,15 @@
1
+ import { CancellationToken } from "@codingame/monaco-vscode-api/vscode/vs/base/common/cancellation";
1
2
  import { Disposable } from "@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle";
2
3
  import { IObservable } from "@codingame/monaco-vscode-api/vscode/vs/base/common/observable";
3
4
  import { URI } from "@codingame/monaco-vscode-api/vscode/vs/base/common/uri";
4
5
  import { IContextKeyService } from "@codingame/monaco-vscode-api/vscode/vs/platform/contextkey/common/contextkey.service";
5
6
  import { ILogService } from "@codingame/monaco-vscode-api/vscode/vs/platform/log/common/log.service";
7
+ import { ICustomViewService } from "@codingame/monaco-vscode-api/vscode/vs/sessions/services/customView/browser/customViewService.service";
6
8
  import { ISession } from "@codingame/monaco-vscode-api/vscode/vs/sessions/services/sessions/common/session";
7
9
  import { ISessionsChangeEvent, IActiveSession } from "@codingame/monaco-vscode-api/vscode/vs/sessions/services/sessions/common/sessionsManagement";
8
10
  import { ISessionsManagementService } from "@codingame/monaco-vscode-api/vscode/vs/sessions/services/sessions/common/sessionsManagement.service";
9
- import { SessionsRecencyHistory } from "./sessionsRecencyHistory.js";
11
+ import { SessionRecencyEntry, SessionsRecencyHistory } from "./sessionsRecencyHistory.js";
12
+ export type SessionNavigationIntent = "explicit" | "history" | "automatic";
10
13
  /**
11
14
  * The subset of opening behaviour {@link SessionsNavigation} drives. Implemented
12
15
  * by the view service, passed in to avoid the navigation (a `services` module)
@@ -18,50 +21,40 @@ export interface ISessionOpener {
18
21
  source?: "navigation";
19
22
  }): Promise<void>;
20
23
  openChat(session: ISession, chatResource: URI): Promise<void>;
24
+ openNewSession(): Promise<void>;
21
25
  }
22
26
  /**
23
- * Provides Back/Forward navigation over the shared session recency history
24
- * ({@link SessionsRecencyHistory}). Created and owned by
25
- * the `SessionsService` (view).
26
- *
27
- * The recency history is the single source of truth for ordering. Navigation
28
- * keeps only a cursor (the currently-navigated entry) and walks the history:
29
- * - Going Back/Forward moves the cursor over the existing order; it never
30
- * re-promotes entries (that would break Forward).
31
- * - Only explicit opens (recorded by the feeder autorun via
32
- * {@link SessionsRecencyHistory.markOpened}) re-promote an entry to the front
33
- * and reset the cursor to it.
34
- *
35
- * Because the history is MRU-ordered and not truncated, going somewhere new
36
- * after a Back does not discard the previously-newer entries; they remain
37
- * reachable as older entries (Alt+Tab-style rather than browser-style).
27
+ * Walks the shared MRU history without promoting entries during Back/Forward.
28
+ * Explicit destination changes promote their entry without truncating the history.
38
29
  */
39
30
  export declare class SessionsNavigation extends Disposable {
40
31
  private readonly _opener;
41
32
  private readonly _activeSession;
33
+ private readonly _customViewService;
42
34
  private readonly _sessionsManagementService;
43
35
  private readonly _recency;
44
36
  private readonly _logService;
45
37
  /** Identity of the entry the cursor currently points at. */
46
38
  private readonly _currentKey;
47
- /** Guard: true while we are performing a back/forward navigation. */
48
- private _navigating;
49
- /**
50
- * True when the user has explicitly navigated to the new-session view after
51
- * having been on a real session. Enables going back to the last real session
52
- * without storing a new-session view entry in the history.
53
- */
54
- private readonly _beyondHistory;
39
+ private _pendingOpen;
55
40
  private readonly _canGoBackCtx;
56
41
  private readonly _canGoForwardCtx;
57
42
  private readonly _canGoBack;
58
43
  private readonly _canGoForward;
59
- constructor(_opener: ISessionOpener, _activeSession: IObservable<IActiveSession | undefined>, _sessionsManagementService: ISessionsManagementService, _recency: SessionsRecencyHistory, contextKeyService: IContextKeyService, _logService: ILogService);
44
+ constructor(_opener: ISessionOpener, _activeSession: IObservable<IActiveSession | undefined>, _customViewService: ICustomViewService, _sessionsManagementService: ISessionsManagementService, _recency: SessionsRecencyHistory, contextKeyService: IContextKeyService, _logService: ILogService);
45
+ /** Records an explicit opening even when the displayed destination has not changed. */
46
+ recordOpened(entry: SessionRecencyEntry): void;
47
+ /** Defers recording intermediate session/chat selections until the destination is ready. */
48
+ beginSessionOpen(intent: SessionNavigationIntent, token: CancellationToken): {
49
+ complete(): void;
50
+ cancel(): void;
51
+ };
60
52
  onDidRemoveSessions(e: ISessionsChangeEvent): void;
61
53
  goBack(): Promise<void>;
62
54
  goForward(): Promise<void>;
55
+ private _getActiveEntry;
63
56
  /** Index of the current cursor entry in the recency history, or -1. */
64
57
  private _indexOfCurrent;
65
58
  private _indexOf;
66
- private _navigateTo;
59
+ private _navigate;
67
60
  }
@@ -1,19 +1,21 @@
1
1
 
2
+ import { CancellationToken } from '@codingame/monaco-vscode-api/vscode/vs/base/common/cancellation';
2
3
  import { Disposable } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
3
4
  import '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/index';
5
+ import { getComparisonKey, isEqual } from '@codingame/monaco-vscode-api/vscode/vs/base/common/resources';
4
6
  import { CanGoBackContext, CanGoForwardContext } from '@codingame/monaco-vscode-api/vscode/vs/sessions/common/contextkeys';
5
7
  import { SessionStatus } from '@codingame/monaco-vscode-api/vscode/vs/sessions/services/sessions/common/session';
8
+ import { getRecencyEntryKey } from './sessionsRecencyHistory.js';
6
9
  import { observableValue } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/observables/observableValue';
7
10
  import { derived } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/observables/derived';
8
11
  import { autorun } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/reactions/autorun';
12
+ import { transaction } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/transaction';
9
13
 
10
- function entryKey(sessionResource, chatResource) {
11
- return `${( sessionResource.toString())}::${chatResource?.toString() ?? ""}`;
12
- }
13
14
  class SessionsNavigation extends Disposable {
14
15
  constructor(
15
16
  _opener,
16
17
  _activeSession,
18
+ _customViewService,
17
19
  _sessionsManagementService,
18
20
  _recency,
19
21
  contextKeyService,
@@ -22,54 +24,42 @@ class SessionsNavigation extends Disposable {
22
24
  super();
23
25
  this._opener = _opener;
24
26
  this._activeSession = _activeSession;
27
+ this._customViewService = _customViewService;
25
28
  this._sessionsManagementService = _sessionsManagementService;
26
29
  this._recency = _recency;
27
30
  this._logService = _logService;
28
31
  this._currentKey = observableValue(this, undefined);
29
- this._navigating = false;
30
- this._beyondHistory = observableValue(this, false);
31
32
  this._canGoBack = derived(this, reader => {
32
33
  const idx = this._indexOfCurrent(reader);
33
- const entries = this._recency.entries;
34
- const beyond = this._beyondHistory.read(reader);
35
- return (idx >= 0 && idx < entries.length - 1) || (beyond && entries.length > 0);
36
- });
37
- this._canGoForward = derived(this, reader => {
38
- if (this._beyondHistory.read(reader)) {
39
- return false;
40
- }
41
- return this._indexOfCurrent(reader) > 0;
34
+ return idx >= 0 && idx < this._recency.entries.length - 1;
42
35
  });
36
+ this._canGoForward = derived(this, reader => this._indexOfCurrent(reader) > 0);
43
37
  this._canGoBackCtx = CanGoBackContext.bindTo(contextKeyService);
44
38
  this._canGoForwardCtx = CanGoForwardContext.bindTo(contextKeyService);
45
39
  this._register(autorun(reader => {
46
- const activeSession = this._activeSession.read(reader);
47
- const activeChat = activeSession?.activeChat.read(reader);
48
- const sessionStatus = activeSession?.status.read(reader);
49
- const chatStatus = activeChat?.status.read(reader);
50
- if (this._navigating) {
40
+ const customViewOpen = this._customViewService.activeCustomViewOpen.read(reader);
41
+ if (customViewOpen) {
42
+ if (customViewOpen.source !== "history") {
43
+ this.recordOpened({
44
+ kind: "customView",
45
+ id: customViewOpen.descriptor.id
46
+ });
47
+ }
51
48
  return;
52
49
  }
53
- if (!activeSession || sessionStatus === SessionStatus.Untitled) {
54
- if (this._recency.entries.length > 0) {
55
- this._beyondHistory.set(true, undefined);
56
- }
50
+ const entry = this._getActiveEntry(reader);
51
+ const key = getRecencyEntryKey(entry);
52
+ if (key === this._currentKey.read(undefined) || (this._pendingOpen && !this._pendingOpen.token.isCancellationRequested)) {
57
53
  return;
58
54
  }
59
- const chatResource = activeChat && chatStatus !== SessionStatus.Untitled ? activeChat.resource : undefined;
60
- this._beyondHistory.set(false, undefined);
61
- this._recency.markOpened(activeSession.resource, chatResource);
62
- this._currentKey.set(entryKey(activeSession.resource, chatResource), undefined);
55
+ this.recordOpened(entry);
63
56
  }));
64
57
  this._register(autorun(reader => {
65
58
  this._recency.version.read(reader);
66
59
  const key = this._currentKey.read(undefined);
67
60
  if (key !== undefined && this._indexOf(key) < 0) {
68
61
  const front = this._recency.entries[0];
69
- this._currentKey.set(
70
- front ? entryKey(front.sessionResource, front.chatResource) : undefined,
71
- undefined
72
- );
62
+ this._currentKey.set(front ? getRecencyEntryKey(front) : undefined, undefined);
73
63
  }
74
64
  }));
75
65
  this._register(autorun(reader => {
@@ -77,32 +67,70 @@ class SessionsNavigation extends Disposable {
77
67
  this._canGoForwardCtx.set(this._canGoForward.read(reader));
78
68
  }));
79
69
  }
70
+ recordOpened(entry) {
71
+ this._pendingOpen = undefined;
72
+ transaction(tx => {
73
+ this._recency.markOpened(entry, tx);
74
+ this._currentKey.set(getRecencyEntryKey(entry), tx);
75
+ });
76
+ }
77
+ beginSessionOpen(intent, token) {
78
+ const navigationIntent = intent === "automatic" ? this._pendingOpen?.intent ?? intent : intent;
79
+ const opening = {
80
+ intent: navigationIntent,
81
+ token
82
+ };
83
+ this._pendingOpen = opening;
84
+ return {
85
+ complete: () => {
86
+ if (this._pendingOpen !== opening) {
87
+ return;
88
+ }
89
+ this._pendingOpen = undefined;
90
+ if (!token.isCancellationRequested && navigationIntent !== "history" && !this._customViewService.activeCustomView.get()) {
91
+ this.recordOpened(this._getActiveEntry());
92
+ }
93
+ },
94
+ cancel: () => {
95
+ if (this._pendingOpen === opening) {
96
+ this._pendingOpen = undefined;
97
+ }
98
+ }
99
+ };
100
+ }
80
101
  onDidRemoveSessions(e) {
81
102
  if (e.removed.length === 0) {
82
103
  return;
83
104
  }
84
- const removedUris = ( new Set(e.removed.map(s => ( s.resource.toString()))));
85
- this._recency.remove(entry => ( removedUris.has(( entry.sessionResource.toString()))));
105
+ const removedUris = ( new Set(e.removed.map(s => getComparisonKey(s.resource))));
106
+ this._recency.remove(entry => entry.kind === "session" && ( removedUris.has(getComparisonKey(entry.sessionResource))));
86
107
  }
87
108
  async goBack() {
88
- if (this._beyondHistory.get()) {
89
- this._beyondHistory.set(false, undefined);
90
- const idx = this._indexOfCurrent();
91
- await this._navigateTo(idx < 0 ? 0 : idx);
92
- return;
93
- }
94
- const idx = this._indexOfCurrent();
95
- if (idx < 0 || idx >= this._recency.entries.length - 1) {
96
- return;
97
- }
98
- await this._navigateTo(idx + 1);
109
+ await this._navigate(1);
99
110
  }
100
111
  async goForward() {
101
- const idx = this._indexOfCurrent();
102
- if (idx <= 0) {
103
- return;
112
+ await this._navigate(-1);
113
+ }
114
+ _getActiveEntry(reader) {
115
+ const customView = this._customViewService.activeCustomView.read(reader);
116
+ if (customView) {
117
+ return {
118
+ kind: "customView",
119
+ id: customView.id
120
+ };
104
121
  }
105
- await this._navigateTo(idx - 1);
122
+ const session = this._activeSession.read(reader);
123
+ if (!session || session.status.read(reader) === SessionStatus.Untitled) {
124
+ return {
125
+ kind: "newSession"
126
+ };
127
+ }
128
+ const chat = session.activeChat.read(reader);
129
+ return {
130
+ kind: "session",
131
+ sessionResource: session.resource,
132
+ chatResource: chat && chat.status.read(reader) !== SessionStatus.Untitled ? chat.resource : undefined
133
+ };
106
134
  }
107
135
  _indexOfCurrent(reader) {
108
136
  const key = reader ? this._currentKey.read(reader) : this._currentKey.get();
@@ -115,41 +143,54 @@ class SessionsNavigation extends Disposable {
115
143
  return this._indexOf(key);
116
144
  }
117
145
  _indexOf(key) {
118
- return this._recency.entries.findIndex(e => entryKey(e.sessionResource, e.chatResource) === key);
146
+ return this._recency.entries.findIndex(e => getRecencyEntryKey(e) === key);
119
147
  }
120
- async _navigateTo(targetIdx) {
121
- const entry = this._recency.entries[targetIdx];
122
- if (!entry) {
123
- return;
124
- }
125
- this._logService.trace(
126
- `[SessionNavigation] navigating to idx=${targetIdx} session=${( entry.sessionResource.toString())} chat=${entry.chatResource?.toString()}`
127
- );
128
- this._navigating = true;
129
- try {
130
- this._currentKey.set(entryKey(entry.sessionResource, entry.chatResource), undefined);
131
- const session = this._sessionsManagementService.getSession(entry.sessionResource);
132
- if (session) {
133
- if (entry.chatResource) {
134
- const chatExists = ( session.chats.get().some(c => ( c.resource.toString()) === ( entry.chatResource.toString())));
135
- if (chatExists) {
148
+ async _navigate(direction) {
149
+ while (true) {
150
+ const idx = this._indexOfCurrent();
151
+ const entry = idx >= 0 ? this._recency.entries[idx + direction] : undefined;
152
+ if (!entry) {
153
+ return;
154
+ }
155
+ const key = getRecencyEntryKey(entry);
156
+ this._logService.trace(`[SessionNavigation] navigating to ${key}`);
157
+ if (entry.kind === "customView") {
158
+ const previousKey = this._currentKey.get();
159
+ this._currentKey.set(key, undefined);
160
+ this._customViewService.showCustomView(entry.id, {
161
+ source: "history"
162
+ });
163
+ if (this._customViewService.activeCustomView.get()?.id !== entry.id) {
164
+ this._currentKey.set(previousKey, undefined);
165
+ this._recency.remove(e => getRecencyEntryKey(e) === key);
166
+ continue;
167
+ }
168
+ } else if (entry.kind === "newSession") {
169
+ this._currentKey.set(key, undefined);
170
+ await this._opener.openNewSession();
171
+ } else {
172
+ const session = this._sessionsManagementService.getSession(entry.sessionResource);
173
+ if (!session) {
174
+ this._recency.remove(
175
+ e => e.kind === "session" && isEqual(e.sessionResource, entry.sessionResource)
176
+ );
177
+ continue;
178
+ }
179
+ const navigation = this.beginSessionOpen("history", CancellationToken.None);
180
+ this._currentKey.set(key, undefined);
181
+ try {
182
+ if (entry.chatResource && ( session.chats.get().some(chat => isEqual(chat.resource, entry.chatResource)))) {
136
183
  await this._opener.openChat(session, entry.chatResource);
137
184
  } else {
138
185
  await this._opener.openSession(entry.sessionResource, {
139
186
  source: "navigation"
140
187
  });
141
188
  }
142
- } else {
143
- await this._opener.openSession(entry.sessionResource, {
144
- source: "navigation"
145
- });
189
+ } finally {
190
+ navigation.cancel();
146
191
  }
147
- } else {
148
- const sessionUri = ( entry.sessionResource.toString());
149
- this._recency.remove(e => ( e.sessionResource.toString()) === sessionUri);
150
192
  }
151
- } finally {
152
- this._navigating = false;
193
+ return;
153
194
  }
154
195
  }
155
196
  }