@codingame/monaco-vscode-workbench-service-override 37.2.0 → 37.3.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 (325) hide show
  1. package/common.d.ts +3 -0
  2. package/common.js +29 -0
  3. package/index.d.ts +1 -1
  4. package/index.js +25 -32
  5. package/package.json +18 -8
  6. package/session.d.ts +4 -0
  7. package/session.js +260 -0
  8. package/vscode/src/vs/platform/agentHost/browser/remoteAgentHostLocationPreferenceService.d.ts +24 -0
  9. package/vscode/src/vs/platform/agentHost/browser/remoteAgentHostLocationPreferenceService.js +71 -0
  10. package/vscode/src/vs/platform/agentHost/common/remoteAgentHostLocationPreference.d.ts +7 -0
  11. package/vscode/src/vs/platform/agentHost/common/remoteAgentHostLocationPreference.js +7 -0
  12. package/vscode/src/vs/sessions/browser/dockedAuxiliaryBarController.d.ts +50 -0
  13. package/vscode/src/vs/sessions/browser/dockedAuxiliaryBarController.js +120 -0
  14. package/vscode/src/vs/sessions/browser/media/sessions-logo-dark.svg +6 -0
  15. package/vscode/src/vs/sessions/browser/media/sessions-logo-light.svg +6 -0
  16. package/vscode/src/vs/sessions/browser/media/sessionsSetUp.css +72 -0
  17. package/vscode/src/vs/sessions/browser/parts/chatCompositeBar.d.ts +116 -0
  18. package/vscode/src/vs/sessions/browser/parts/chatCompositeBar.js +566 -0
  19. package/vscode/src/vs/sessions/browser/parts/chatGroupDropTarget.d.ts +43 -0
  20. package/vscode/src/vs/sessions/browser/parts/chatGroupDropTarget.js +308 -0
  21. package/vscode/src/vs/sessions/browser/parts/chatGroupView.d.ts +108 -0
  22. package/vscode/src/vs/sessions/browser/parts/chatGroupView.js +324 -0
  23. package/vscode/src/vs/sessions/browser/parts/chatGroupsView.d.ts +136 -0
  24. package/vscode/src/vs/sessions/browser/parts/chatGroupsView.js +771 -0
  25. package/vscode/src/vs/sessions/browser/parts/customViewGridPart.d.ts +43 -0
  26. package/vscode/src/vs/sessions/browser/parts/customViewGridPart.js +113 -0
  27. package/vscode/src/vs/sessions/browser/parts/customViewGridParts.d.ts +17 -0
  28. package/vscode/src/vs/sessions/browser/parts/customViewGridParts.js +31 -0
  29. package/vscode/src/vs/sessions/browser/parts/customViewNode.d.ts +24 -0
  30. package/vscode/src/vs/sessions/browser/parts/customViewNode.js +131 -0
  31. package/vscode/src/vs/sessions/browser/parts/editorPart.d.ts +11 -0
  32. package/vscode/src/vs/sessions/browser/parts/editorPart.js +36 -0
  33. package/vscode/src/vs/sessions/browser/parts/editorParts.d.ts +12 -0
  34. package/vscode/src/vs/sessions/browser/parts/editorParts.js +45 -0
  35. package/vscode/src/vs/sessions/browser/parts/media/chatCompositeBar.css +559 -0
  36. package/vscode/src/vs/sessions/browser/parts/media/chatGroupDropTarget.css +27 -0
  37. package/vscode/src/vs/sessions/browser/parts/media/chatGroupsView.css +60 -0
  38. package/vscode/src/vs/sessions/browser/parts/media/customViewGridPart.css +108 -0
  39. package/vscode/src/vs/sessions/browser/parts/media/editorPart.css +210 -0
  40. package/vscode/src/vs/sessions/browser/parts/media/remoteHostUnavailableEmptyState.css +81 -0
  41. package/vscode/src/vs/sessions/browser/parts/media/sessionDropTarget.css +31 -0
  42. package/vscode/src/vs/sessions/browser/parts/media/sessionReadOnlyBanner.css +87 -0
  43. package/vscode/src/vs/sessions/browser/parts/media/sessionView.css +107 -0
  44. package/vscode/src/vs/sessions/browser/parts/media/sessionsPart.css +134 -0
  45. package/vscode/src/vs/sessions/browser/parts/menubar.contribution.d.ts +1 -0
  46. package/vscode/src/vs/sessions/browser/parts/menubar.contribution.js +79 -0
  47. package/vscode/src/vs/sessions/browser/parts/mobile/mobileCustomViewGridPart.d.ts +13 -0
  48. package/vscode/src/vs/sessions/browser/parts/mobile/mobileCustomViewGridPart.js +33 -0
  49. package/vscode/src/vs/sessions/browser/parts/mobile/mobileSessionsPart.d.ts +14 -0
  50. package/vscode/src/vs/sessions/browser/parts/mobile/mobileSessionsPart.js +34 -0
  51. package/vscode/src/vs/sessions/browser/parts/remoteHostUnavailableEmptyState.d.ts +39 -0
  52. package/vscode/src/vs/sessions/browser/parts/remoteHostUnavailableEmptyState.js +136 -0
  53. package/vscode/src/vs/sessions/browser/parts/sessionBarStyles.d.ts +9 -0
  54. package/vscode/src/vs/sessions/browser/parts/sessionBarStyles.js +62 -0
  55. package/vscode/src/vs/sessions/browser/parts/sessionDropTarget.d.ts +39 -0
  56. package/vscode/src/vs/sessions/browser/parts/sessionDropTarget.js +261 -0
  57. package/vscode/src/vs/sessions/browser/parts/sessionHeader.d.ts +97 -0
  58. package/vscode/src/vs/sessions/browser/parts/sessionHeader.js +345 -0
  59. package/vscode/src/vs/sessions/browser/parts/sessionReadOnlyBanner.d.ts +43 -0
  60. package/vscode/src/vs/sessions/browser/parts/sessionReadOnlyBanner.js +69 -0
  61. package/vscode/src/vs/sessions/browser/parts/sessionRemoteConnection.d.ts +79 -0
  62. package/vscode/src/vs/sessions/browser/parts/sessionRemoteConnection.js +363 -0
  63. package/vscode/src/vs/sessions/browser/parts/sessionView.d.ts +125 -0
  64. package/vscode/src/vs/sessions/browser/parts/sessionView.js +300 -0
  65. package/vscode/src/vs/sessions/browser/parts/sessionsPart.d.ts +124 -0
  66. package/vscode/src/vs/sessions/browser/parts/sessionsPart.js +336 -0
  67. package/vscode/src/vs/sessions/browser/parts/sessionsParts.d.ts +33 -0
  68. package/vscode/src/vs/sessions/browser/parts/sessionsParts.js +62 -0
  69. package/vscode/src/vs/sessions/browser/parts/singlePaneAuxiliaryBarPart.d.ts +13 -0
  70. package/vscode/src/vs/sessions/browser/parts/singlePaneAuxiliaryBarPart.js +36 -0
  71. package/vscode/src/vs/sessions/browser/parts/singlePaneEditorPart.d.ts +65 -0
  72. package/vscode/src/vs/sessions/browser/parts/singlePaneEditorPart.js +178 -0
  73. package/vscode/src/vs/sessions/browser/sessionWorkspace.d.ts +12 -0
  74. package/vscode/src/vs/sessions/browser/sessionWorkspace.js +19 -0
  75. package/vscode/src/vs/sessions/browser/sessionsSetUpService.d.ts +24 -0
  76. package/vscode/src/vs/sessions/browser/sessionsSetUpService.js +598 -0
  77. package/vscode/src/vs/sessions/browser/sessionsSignInDialog.d.ts +25 -0
  78. package/vscode/src/vs/sessions/browser/sessionsSignInDialog.js +91 -0
  79. package/vscode/src/vs/sessions/common/welcome.d.ts +1 -0
  80. package/vscode/src/vs/sessions/common/welcome.js +5 -0
  81. package/vscode/src/vs/sessions/contrib/accountMenu/browser/account.contribution.d.ts +11 -0
  82. package/vscode/src/vs/sessions/contrib/accountMenu/browser/account.contribution.js +1052 -0
  83. package/vscode/src/vs/sessions/contrib/accountMenu/browser/chatPetAchievementBadges.d.ts +23 -0
  84. package/vscode/src/vs/sessions/contrib/accountMenu/browser/chatPetAchievementBadges.js +168 -0
  85. package/vscode/src/vs/sessions/contrib/accountMenu/browser/media/accountTitleBarWidget.css +646 -0
  86. package/vscode/src/vs/sessions/contrib/accountMenu/browser/media/accountWidget.css +231 -0
  87. package/vscode/src/vs/sessions/contrib/accountMenu/browser/media/chatPetAchievementBadges.css +120 -0
  88. package/vscode/src/vs/sessions/contrib/agentFeedback/browser/nullAgentFeedbackService.contribution.d.ts +53 -0
  89. package/vscode/src/vs/sessions/contrib/agentFeedback/browser/nullAgentFeedbackService.contribution.js +99 -0
  90. package/vscode/src/vs/sessions/contrib/aiCustomizationTreeView/browser/aiCustomizationTreeView.contribution.d.ts +1 -0
  91. package/vscode/src/vs/sessions/contrib/aiCustomizationTreeView/browser/aiCustomizationTreeView.contribution.js +270 -0
  92. package/vscode/src/vs/sessions/contrib/aiCustomizationTreeView/browser/aiCustomizationTreeViewViews.d.ts +62 -0
  93. package/vscode/src/vs/sessions/contrib/aiCustomizationTreeView/browser/aiCustomizationTreeViewViews.js +606 -0
  94. package/vscode/src/vs/sessions/contrib/aiCustomizationTreeView/browser/media/aiCustomizationTreeView.css +116 -0
  95. package/vscode/src/vs/sessions/contrib/aquarium/browser/aquarium.contribution.d.ts +1 -0
  96. package/vscode/src/vs/sessions/contrib/aquarium/browser/aquarium.contribution.js +97 -0
  97. package/vscode/src/vs/sessions/contrib/aquarium/browser/aquariumOverlay.d.ts +72 -0
  98. package/vscode/src/vs/sessions/contrib/aquarium/browser/aquariumOverlay.js +776 -0
  99. package/vscode/src/vs/sessions/contrib/aquarium/browser/fish.d.ts +68 -0
  100. package/vscode/src/vs/sessions/contrib/aquarium/browser/fish.js +153 -0
  101. package/vscode/src/vs/sessions/contrib/aquarium/browser/fishFeedingStreak.d.ts +58 -0
  102. package/vscode/src/vs/sessions/contrib/aquarium/browser/fishFeedingStreak.js +172 -0
  103. package/vscode/src/vs/sessions/contrib/aquarium/browser/media/aquarium.css +316 -0
  104. package/vscode/src/vs/sessions/contrib/aquarium/browser/vscodeLogoPath.d.ts +1 -0
  105. package/vscode/src/vs/sessions/contrib/aquarium/browser/vscodeLogoPath.js +5 -0
  106. package/vscode/src/vs/sessions/contrib/automations/browser/automationDialog.d.ts +173 -0
  107. package/vscode/src/vs/sessions/contrib/automations/browser/automationDialog.js +1589 -0
  108. package/vscode/src/vs/sessions/contrib/automations/browser/automationDialogService.d.ts +32 -0
  109. package/vscode/src/vs/sessions/contrib/automations/browser/automationDialogService.js +396 -0
  110. package/vscode/src/vs/sessions/contrib/automations/browser/automationInputCompletions.d.ts +33 -0
  111. package/vscode/src/vs/sessions/contrib/automations/browser/automationInputCompletions.js +216 -0
  112. package/vscode/src/vs/sessions/contrib/automations/browser/automationLeaderElection.d.ts +37 -0
  113. package/vscode/src/vs/sessions/contrib/automations/browser/automationLeaderElection.js +126 -0
  114. package/vscode/src/vs/sessions/contrib/automations/browser/automationRunner.d.ts +21 -0
  115. package/vscode/src/vs/sessions/contrib/automations/browser/automationRunner.js +294 -0
  116. package/vscode/src/vs/sessions/contrib/automations/browser/automationScheduler.d.ts +59 -0
  117. package/vscode/src/vs/sessions/contrib/automations/browser/automationScheduler.js +232 -0
  118. package/vscode/src/vs/sessions/contrib/automations/browser/automationStorageService.d.ts +13 -0
  119. package/vscode/src/vs/sessions/contrib/automations/browser/automationStorageService.js +22 -0
  120. package/vscode/src/vs/sessions/contrib/automations/browser/automationTools.d.ts +60 -0
  121. package/vscode/src/vs/sessions/contrib/automations/browser/automationTools.js +1256 -0
  122. package/vscode/src/vs/sessions/contrib/automations/browser/automations.contribution.d.ts +1 -0
  123. package/vscode/src/vs/sessions/contrib/automations/browser/automations.contribution.js +88 -0
  124. package/vscode/src/vs/sessions/contrib/automations/browser/media/automationDialog.css +746 -0
  125. package/vscode/src/vs/sessions/contrib/automations/browser/providerAutomationService.d.ts +62 -0
  126. package/vscode/src/vs/sessions/contrib/automations/browser/providerAutomationService.js +493 -0
  127. package/vscode/src/vs/sessions/contrib/automations/common/isolationGroupModel.d.ts +38 -0
  128. package/vscode/src/vs/sessions/contrib/automations/common/isolationGroupModel.js +123 -0
  129. package/vscode/src/vs/sessions/contrib/blockedSessions/browser/blockedSessions.d.ts +45 -0
  130. package/vscode/src/vs/sessions/contrib/blockedSessions/browser/blockedSessions.js +110 -0
  131. package/vscode/src/vs/sessions/contrib/browserView/browser/sessionBrowserView.contribution.d.ts +1 -0
  132. package/vscode/src/vs/sessions/contrib/browserView/browser/sessionBrowserView.contribution.js +5 -0
  133. package/vscode/src/vs/sessions/contrib/browserView/browser/sessionBrowserView.d.ts +31 -0
  134. package/vscode/src/vs/sessions/contrib/browserView/browser/sessionBrowserView.js +137 -0
  135. package/vscode/src/vs/sessions/contrib/changes/browser/changes.contribution.d.ts +1 -0
  136. package/vscode/src/vs/sessions/contrib/changes/browser/changes.contribution.js +130 -0
  137. package/vscode/src/vs/sessions/contrib/changes/browser/changesActions.d.ts +8 -0
  138. package/vscode/src/vs/sessions/contrib/changes/browser/changesActions.js +385 -0
  139. package/vscode/src/vs/sessions/contrib/changes/browser/changesMultiDiffSourceResolver.d.ts +28 -0
  140. package/vscode/src/vs/sessions/contrib/changes/browser/changesMultiDiffSourceResolver.js +76 -0
  141. package/vscode/src/vs/sessions/contrib/changes/browser/changesViewActions.d.ts +1 -0
  142. package/vscode/src/vs/sessions/contrib/changes/browser/changesViewActions.js +509 -0
  143. package/vscode/src/vs/sessions/contrib/changes/browser/changesetReviewActions.d.ts +6 -0
  144. package/vscode/src/vs/sessions/contrib/changes/browser/changesetReviewActions.js +58 -0
  145. package/vscode/src/vs/sessions/contrib/changes/browser/media/changesActions.css +11 -0
  146. package/vscode/src/vs/sessions/contrib/changes/browser/sessionSyncChanges.d.ts +24 -0
  147. package/vscode/src/vs/sessions/contrib/changes/browser/sessionSyncChanges.js +188 -0
  148. package/vscode/src/vs/sessions/contrib/changes/browser/sessionsChangesAccessibilityHelp.d.ts +15 -0
  149. package/vscode/src/vs/sessions/contrib/changes/browser/sessionsChangesAccessibilityHelp.js +100 -0
  150. package/vscode/src/vs/sessions/contrib/chat/browser/chatViewStateService.d.ts +9 -0
  151. package/vscode/src/vs/sessions/contrib/chat/browser/chatViewStateService.js +18 -0
  152. package/vscode/src/vs/sessions/contrib/chat/browser/media/sessionChatInputToolbarDebug.css +59 -0
  153. package/vscode/src/vs/sessions/contrib/chat/browser/sessionChatInputToolbarDebug.d.ts +47 -0
  154. package/vscode/src/vs/sessions/contrib/chat/browser/sessionChatInputToolbarDebug.js +306 -0
  155. package/vscode/src/vs/sessions/contrib/chat/browser/sessionTaskRunner.d.ts +41 -0
  156. package/vscode/src/vs/sessions/contrib/chat/browser/sessionTaskRunner.js +31 -0
  157. package/vscode/src/vs/sessions/contrib/chatDebug/browser/chatDebug.contribution.d.ts +1 -0
  158. package/vscode/src/vs/sessions/contrib/chatDebug/browser/chatDebug.contribution.js +84 -0
  159. package/vscode/src/vs/sessions/contrib/customViewTest/browser/customViewTest.contribution.d.ts +1 -0
  160. package/vscode/src/vs/sessions/contrib/customViewTest/browser/customViewTest.contribution.js +111 -0
  161. package/vscode/src/vs/sessions/contrib/customViewTest/browser/media/customViewTest.css +9 -0
  162. package/vscode/src/vs/sessions/contrib/editor/browser/addTabActions.d.ts +21 -0
  163. package/vscode/src/vs/sessions/contrib/editor/browser/addTabActions.js +170 -0
  164. package/vscode/src/vs/sessions/contrib/editor/browser/editor.contribution.d.ts +14 -0
  165. package/vscode/src/vs/sessions/contrib/editor/browser/editor.contribution.js +425 -0
  166. package/vscode/src/vs/sessions/contrib/editor/browser/emptyFileEditor.contribution.d.ts +1 -0
  167. package/vscode/src/vs/sessions/contrib/editor/browser/emptyFileEditor.contribution.js +35 -0
  168. package/vscode/src/vs/sessions/contrib/editor/browser/emptyFileEditor.d.ts +18 -0
  169. package/vscode/src/vs/sessions/contrib/editor/browser/emptyFileEditor.js +85 -0
  170. package/vscode/src/vs/sessions/contrib/editor/browser/emptyFileEditorInput.d.ts +31 -0
  171. package/vscode/src/vs/sessions/contrib/editor/browser/emptyFileEditorInput.js +125 -0
  172. package/vscode/src/vs/sessions/contrib/editor/browser/media/editorBreadcrumbs.css +66 -0
  173. package/vscode/src/vs/sessions/contrib/editor/browser/media/editorHeader.css +113 -0
  174. package/vscode/src/vs/sessions/contrib/editor/browser/media/emptyFileEditor.css +30 -0
  175. package/vscode/src/vs/sessions/contrib/fileTreeView/browser/fileTreeView.contribution.d.ts +1 -0
  176. package/vscode/src/vs/sessions/contrib/fileTreeView/browser/fileTreeView.contribution.js +25 -0
  177. package/vscode/src/vs/sessions/contrib/fileTreeView/browser/githubFileSystemProvider.d.ts +66 -0
  178. package/vscode/src/vs/sessions/contrib/fileTreeView/browser/githubFileSystemProvider.js +274 -0
  179. package/vscode/src/vs/sessions/contrib/files/browser/files.contribution.d.ts +6 -0
  180. package/vscode/src/vs/sessions/contrib/files/browser/files.contribution.js +100 -0
  181. package/vscode/src/vs/sessions/contrib/files/browser/filesView.d.ts +21 -0
  182. package/vscode/src/vs/sessions/contrib/files/browser/filesView.js +76 -0
  183. package/vscode/src/vs/sessions/contrib/files/browser/media/filesView.css +29 -0
  184. package/vscode/src/vs/sessions/contrib/layout/browser/baseSessionLayoutController.d.ts +211 -0
  185. package/vscode/src/vs/sessions/contrib/layout/browser/baseSessionLayoutController.js +587 -0
  186. package/vscode/src/vs/sessions/contrib/layout/browser/desktopSessionLayoutController.d.ts +112 -0
  187. package/vscode/src/vs/sessions/contrib/layout/browser/desktopSessionLayoutController.js +444 -0
  188. package/vscode/src/vs/sessions/contrib/layout/browser/mobileSessionLayoutController.d.ts +13 -0
  189. package/vscode/src/vs/sessions/contrib/layout/browser/mobileSessionLayoutController.js +8 -0
  190. package/vscode/src/vs/sessions/contrib/layout/browser/sessions.layout.contribution.d.ts +1 -0
  191. package/vscode/src/vs/sessions/contrib/layout/browser/sessions.layout.contribution.js +68 -0
  192. package/vscode/src/vs/sessions/contrib/layout/browser/singlePane/singlePaneDetailPanelCoordinator.d.ts +32 -0
  193. package/vscode/src/vs/sessions/contrib/layout/browser/singlePane/singlePaneDetailPanelCoordinator.js +81 -0
  194. package/vscode/src/vs/sessions/contrib/layout/browser/singlePane/singlePaneDockedTabsCoordinator.d.ts +111 -0
  195. package/vscode/src/vs/sessions/contrib/layout/browser/singlePane/singlePaneDockedTabsCoordinator.js +513 -0
  196. package/vscode/src/vs/sessions/contrib/layout/browser/singlePane/singlePaneDraftSessionStrategy.d.ts +44 -0
  197. package/vscode/src/vs/sessions/contrib/layout/browser/singlePane/singlePaneDraftSessionStrategy.js +423 -0
  198. package/vscode/src/vs/sessions/contrib/layout/browser/singlePane/singlePaneExistingSessionStrategy.d.ts +62 -0
  199. package/vscode/src/vs/sessions/contrib/layout/browser/singlePane/singlePaneExistingSessionStrategy.js +435 -0
  200. package/vscode/src/vs/sessions/contrib/layout/browser/singlePane/singlePaneLayoutStrategy.d.ts +46 -0
  201. package/vscode/src/vs/sessions/contrib/layout/browser/singlePane/singlePaneLayoutStrategy.js +11 -0
  202. package/vscode/src/vs/sessions/contrib/layout/browser/singlePane/singlePaneSharedHelpers.d.ts +11 -0
  203. package/vscode/src/vs/sessions/contrib/layout/browser/singlePane/singlePaneSharedHelpers.js +43 -0
  204. package/vscode/src/vs/sessions/contrib/layout/browser/singlePane/singlePaneVisibilityProfileStore.d.ts +21 -0
  205. package/vscode/src/vs/sessions/contrib/layout/browser/singlePane/singlePaneVisibilityProfileStore.js +77 -0
  206. package/vscode/src/vs/sessions/contrib/layout/browser/singlePaneLayoutController.d.ts +55 -0
  207. package/vscode/src/vs/sessions/contrib/layout/browser/singlePaneLayoutController.js +91 -0
  208. package/vscode/src/vs/sessions/contrib/onboardingTours/browser/agentHostReadinessContext.d.ts +11 -0
  209. package/vscode/src/vs/sessions/contrib/onboardingTours/browser/agentHostReadinessContext.js +39 -0
  210. package/vscode/src/vs/sessions/contrib/onboardingTours/browser/newSessionTourContribution.d.ts +1 -0
  211. package/vscode/src/vs/sessions/contrib/onboardingTours/browser/newSessionTourContribution.js +109 -0
  212. package/vscode/src/vs/sessions/contrib/onboardingTours/browser/newSessionViewTourContribution.d.ts +1 -0
  213. package/vscode/src/vs/sessions/contrib/onboardingTours/browser/newSessionViewTourContribution.js +123 -0
  214. package/vscode/src/vs/sessions/contrib/onboardingTours/browser/newSessionViewTourTrigger.d.ts +24 -0
  215. package/vscode/src/vs/sessions/contrib/onboardingTours/browser/newSessionViewTourTrigger.js +67 -0
  216. package/vscode/src/vs/sessions/contrib/onboardingTours/browser/newSessionViewV2TourContribution.d.ts +1 -0
  217. package/vscode/src/vs/sessions/contrib/onboardingTours/browser/newSessionViewV2TourContribution.js +47 -0
  218. package/vscode/src/vs/sessions/contrib/onboardingTours/browser/newSessionViewV3Prompt.d.ts +79 -0
  219. package/vscode/src/vs/sessions/contrib/onboardingTours/browser/newSessionViewV3Prompt.js +1277 -0
  220. package/vscode/src/vs/sessions/contrib/onboardingTours/browser/newSessionViewV3TourContribution.d.ts +1 -0
  221. package/vscode/src/vs/sessions/contrib/onboardingTours/browser/newSessionViewV3TourContribution.js +75 -0
  222. package/vscode/src/vs/sessions/contrib/onboardingTours/browser/tours/newSessionTour.d.ts +34 -0
  223. package/vscode/src/vs/sessions/contrib/onboardingTours/browser/tours/newSessionTour.js +53 -0
  224. package/vscode/src/vs/sessions/contrib/onboardingTours/browser/tours/newSessionViewTour.d.ts +40 -0
  225. package/vscode/src/vs/sessions/contrib/onboardingTours/browser/tours/newSessionViewTour.js +69 -0
  226. package/vscode/src/vs/sessions/contrib/onboardingTours/browser/tours/newSessionViewTourShared.d.ts +4 -0
  227. package/vscode/src/vs/sessions/contrib/onboardingTours/browser/tours/newSessionViewTourShared.js +38 -0
  228. package/vscode/src/vs/sessions/contrib/onboardingTours/browser/tours/newSessionViewV2Tour.d.ts +6 -0
  229. package/vscode/src/vs/sessions/contrib/onboardingTours/browser/tours/newSessionViewV2Tour.js +63 -0
  230. package/vscode/src/vs/sessions/contrib/onboardingTours/browser/tours/newSessionViewV3Tour.d.ts +15 -0
  231. package/vscode/src/vs/sessions/contrib/onboardingTours/browser/tours/newSessionViewV3Tour.js +49 -0
  232. package/vscode/src/vs/sessions/contrib/policyBlocked/browser/media/sessionsPolicyBlocked.css +125 -0
  233. package/vscode/src/vs/sessions/contrib/policyBlocked/browser/policyBlocked.contribution.d.ts +20 -0
  234. package/vscode/src/vs/sessions/contrib/policyBlocked/browser/policyBlocked.contribution.js +98 -0
  235. package/vscode/src/vs/sessions/contrib/policyBlocked/browser/sessionsPolicyBlocked.d.ts +39 -0
  236. package/vscode/src/vs/sessions/contrib/policyBlocked/browser/sessionsPolicyBlocked.js +218 -0
  237. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/devContainerAgentHostService.d.ts +53 -0
  238. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/devContainerAgentHostService.js +496 -0
  239. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/remoteAgentHostConnectionCustomization.d.ts +27 -0
  240. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/remoteAgentHostConnectionCustomization.js +26 -0
  241. package/vscode/src/vs/sessions/contrib/search/browser/media/searchEditorEmptyState.css +15 -0
  242. package/vscode/src/vs/sessions/contrib/search/browser/search.contribution.d.ts +1 -0
  243. package/vscode/src/vs/sessions/contrib/search/browser/search.contribution.js +79 -0
  244. package/vscode/src/vs/sessions/contrib/search/browser/searchEditorEmptyState.contribution.d.ts +7 -0
  245. package/vscode/src/vs/sessions/contrib/search/browser/searchEditorEmptyState.contribution.js +57 -0
  246. package/vscode/src/vs/sessions/contrib/sessions/browser/blockedSessionsCIFixModel.d.ts +39 -0
  247. package/vscode/src/vs/sessions/contrib/sessions/browser/blockedSessionsCIFixModel.js +155 -0
  248. package/vscode/src/vs/sessions/contrib/sessions/browser/blockedSessionsIndicatorModel.d.ts +117 -0
  249. package/vscode/src/vs/sessions/contrib/sessions/browser/blockedSessionsIndicatorModel.js +320 -0
  250. package/vscode/src/vs/sessions/contrib/sessions/browser/blockedSessionsList.d.ts +65 -0
  251. package/vscode/src/vs/sessions/contrib/sessions/browser/blockedSessionsList.js +129 -0
  252. package/vscode/src/vs/sessions/contrib/sessions/browser/media/automationsCards.css +624 -0
  253. package/vscode/src/vs/sessions/contrib/sessions/browser/media/blockedSessionsList.css +111 -0
  254. package/vscode/src/vs/sessions/contrib/sessions/browser/media/newSessionActionViewItem.css +112 -0
  255. package/vscode/src/vs/sessions/contrib/sessions/browser/media/sessionsTitleBarWidget.css +159 -0
  256. package/vscode/src/vs/sessions/contrib/sessions/browser/sessionActionFeedback.d.ts +26 -0
  257. package/vscode/src/vs/sessions/contrib/sessions/browser/sessionActionFeedback.js +26 -0
  258. package/vscode/src/vs/sessions/contrib/sessions/browser/sessionDetailsAction.d.ts +2 -0
  259. package/vscode/src/vs/sessions/contrib/sessions/browser/sessionDetailsAction.js +77 -0
  260. package/vscode/src/vs/sessions/contrib/sessions/browser/sessions.contribution.d.ts +1 -0
  261. package/vscode/src/vs/sessions/contrib/sessions/browser/sessions.contribution.js +162 -0
  262. package/vscode/src/vs/sessions/contrib/sessions/browser/sessionsActions.d.ts +111 -0
  263. package/vscode/src/vs/sessions/contrib/sessions/browser/sessionsActions.js +1550 -0
  264. package/vscode/src/vs/sessions/contrib/sessions/browser/sessionsMouseNavigation.d.ts +13 -0
  265. package/vscode/src/vs/sessions/contrib/sessions/browser/sessionsMouseNavigation.js +69 -0
  266. package/vscode/src/vs/sessions/contrib/sessions/browser/sessionsPicker.d.ts +10 -0
  267. package/vscode/src/vs/sessions/contrib/sessions/browser/sessionsPicker.js +33 -0
  268. package/vscode/src/vs/sessions/contrib/sessions/browser/sessionsTelemetry.contribution.d.ts +126 -0
  269. package/vscode/src/vs/sessions/contrib/sessions/browser/sessionsTelemetry.contribution.js +724 -0
  270. package/vscode/src/vs/sessions/contrib/sessions/browser/sessionsTitleBarWidget.d.ts +150 -0
  271. package/vscode/src/vs/sessions/contrib/sessions/browser/sessionsTitleBarWidget.js +526 -0
  272. package/vscode/src/vs/sessions/contrib/sessions/browser/sessionsTypedCharactersTracker.d.ts +64 -0
  273. package/vscode/src/vs/sessions/contrib/sessions/browser/sessionsTypedCharactersTracker.js +99 -0
  274. package/vscode/src/vs/sessions/contrib/sessions/browser/sessionsWindowNotifier.d.ts +37 -0
  275. package/vscode/src/vs/sessions/contrib/sessions/browser/sessionsWindowNotifier.js +160 -0
  276. package/vscode/src/vs/sessions/contrib/sessions/browser/views/automationTemplates.d.ts +19 -0
  277. package/vscode/src/vs/sessions/contrib/sessions/browser/views/automationTemplates.js +74 -0
  278. package/vscode/src/vs/sessions/contrib/sessions/browser/views/automationsAccessibility.d.ts +4 -0
  279. package/vscode/src/vs/sessions/contrib/sessions/browser/views/automationsAccessibility.js +228 -0
  280. package/vscode/src/vs/sessions/contrib/sessions/browser/views/automationsView.d.ts +53 -0
  281. package/vscode/src/vs/sessions/contrib/sessions/browser/views/automationsView.js +2143 -0
  282. package/vscode/src/vs/sessions/contrib/sessions/browser/views/sessionsViewActions.d.ts +12 -0
  283. package/vscode/src/vs/sessions/contrib/sessions/browser/views/sessionsViewActions.js +1270 -0
  284. package/vscode/src/vs/sessions/contrib/workspace/browser/workspace.contribution.d.ts +1 -0
  285. package/vscode/src/vs/sessions/contrib/workspace/browser/workspace.contribution.js +5 -0
  286. package/vscode/src/vs/sessions/contrib/workspace/browser/workspaceFolderManagement.d.ts +28 -0
  287. package/vscode/src/vs/sessions/contrib/workspace/browser/workspaceFolderManagement.js +95 -0
  288. package/vscode/src/vs/sessions/services/agentHostFilter/browser/agentHostFilterService.d.ts +79 -0
  289. package/vscode/src/vs/sessions/services/agentHostFilter/browser/agentHostFilterService.js +259 -0
  290. package/vscode/src/vs/sessions/services/customView/browser/customView.d.ts +42 -0
  291. package/vscode/src/vs/sessions/services/customView/browser/customView.js +15 -0
  292. package/vscode/src/vs/sessions/services/customView/browser/customViewService.d.ts +21 -0
  293. package/vscode/src/vs/sessions/services/customView/browser/customViewService.js +68 -0
  294. package/vscode/src/vs/sessions/services/sessions/browser/closedItemHistory.d.ts +72 -0
  295. package/vscode/src/vs/sessions/services/sessions/browser/closedItemHistory.js +115 -0
  296. package/vscode/src/vs/sessions/services/sessions/browser/sessionGroupsService.d.ts +77 -0
  297. package/vscode/src/vs/sessions/services/sessions/browser/sessionGroupsService.js +330 -0
  298. package/vscode/src/vs/sessions/services/sessions/browser/sessionNavigation.d.ts +67 -0
  299. package/vscode/src/vs/sessions/services/sessions/browser/sessionNavigation.js +157 -0
  300. package/vscode/src/vs/sessions/services/sessions/browser/sessionOpenTelemetryService.d.ts +32 -0
  301. package/vscode/src/vs/sessions/services/sessions/browser/sessionOpenTelemetryService.js +162 -0
  302. package/vscode/src/vs/sessions/services/sessions/browser/sessionSectionOrderService.d.ts +40 -0
  303. package/vscode/src/vs/sessions/services/sessions/browser/sessionSectionOrderService.js +170 -0
  304. package/vscode/src/vs/sessions/services/sessions/browser/sessionsListModelService.d.ts +63 -0
  305. package/vscode/src/vs/sessions/services/sessions/browser/sessionsListModelService.js +419 -0
  306. package/vscode/src/vs/sessions/services/sessions/browser/sessionsManagementService.d.ts +229 -0
  307. package/vscode/src/vs/sessions/services/sessions/browser/sessionsManagementService.js +1212 -0
  308. package/vscode/src/vs/sessions/services/sessions/browser/sessionsProvidersService.d.ts +22 -0
  309. package/vscode/src/vs/sessions/services/sessions/browser/sessionsProvidersService.js +42 -0
  310. package/vscode/src/vs/sessions/services/sessions/browser/sessionsRecencyHistory.d.ts +43 -0
  311. package/vscode/src/vs/sessions/services/sessions/browser/sessionsRecencyHistory.js +103 -0
  312. package/vscode/src/vs/sessions/services/sessions/browser/sessionsService.d.ts +243 -0
  313. package/vscode/src/vs/sessions/services/sessions/browser/sessionsService.js +1121 -0
  314. package/vscode/src/vs/sessions/services/sessions/browser/sessionsWindowUsageService.d.ts +8 -0
  315. package/vscode/src/vs/sessions/services/sessions/browser/sessionsWindowUsageService.js +24 -0
  316. package/vscode/src/vs/sessions/services/sessions/browser/visibleSessions.d.ts +321 -0
  317. package/vscode/src/vs/sessions/services/sessions/browser/visibleSessions.js +729 -0
  318. package/vscode/src/vs/sessions/services/sessions/browser/worktreeTrust.d.ts +23 -0
  319. package/vscode/src/vs/sessions/services/sessions/browser/worktreeTrust.js +23 -0
  320. package/vscode/src/vs/sessions/services/sessions/common/sessionContextKeys.d.ts +32 -0
  321. package/vscode/src/vs/sessions/services/sessions/common/sessionContextKeys.js +103 -0
  322. package/vscode/src/vs/sessions/services/workspaceFolderLabel/browser/workspaceFolderLabelService.d.ts +16 -0
  323. package/vscode/src/vs/sessions/services/workspaceFolderLabel/browser/workspaceFolderLabelService.js +41 -0
  324. package/vscode/src/vs/workbench/browser/layout.js +7 -7
  325. package/vscode/src/vs/workbench/browser/workbench.js +3 -3
@@ -0,0 +1,1212 @@
1
+
2
+ import { __decorate, __param } from '@codingame/monaco-vscode-api/external/tslib/tslib.es6';
3
+ import { Emitter } from '@codingame/monaco-vscode-api/vscode/vs/base/common/event';
4
+ import { raceCancellationError } from '@codingame/monaco-vscode-api/vscode/vs/base/common/async';
5
+ import { CancellationTokenSource, CancellationToken } from '@codingame/monaco-vscode-api/vscode/vs/base/common/cancellation';
6
+ import { CancellationError } from '@codingame/monaco-vscode-api/vscode/vs/base/common/errors';
7
+ import { Disposable, DisposableMap, DisposableStore, toDisposable, MutableDisposable } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
8
+ import { ResourceMap } from '@codingame/monaco-vscode-api/vscode/vs/base/common/map';
9
+ import '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/index';
10
+ import { ILogService } from '@codingame/monaco-vscode-api/vscode/vs/platform/log/common/log.service';
11
+ import { agentHostAuthority } from '@codingame/monaco-vscode-api/vscode/vs/platform/agentHost/common/agentHostUri';
12
+ import { IRemoteAgentHostService } from '@codingame/monaco-vscode-api/vscode/vs/platform/agentHost/common/remoteAgentHostService.service';
13
+ import { IChatService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/chatService/chatService.service';
14
+ import { ChatAgentLocation } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/constants';
15
+ import { IChatWidgetHistoryService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/widget/chatWidgetHistoryService.service';
16
+ import { dedupeMigratedCopilotCliSessions, getCopilotCliSessionRawId, buildHostLocalEventsPath } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/copilotCliEventsUri';
17
+ import { IPathService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/path/common/pathService.service';
18
+ import { IUriIdentityService } from '@codingame/monaco-vscode-api/vscode/vs/platform/uriIdentity/common/uriIdentity.service';
19
+ import { getSessionReferenceResource } from '@codingame/monaco-vscode-api/vscode/vs/sessions/services/sessions/browser/sessionReference';
20
+ import { WorkspaceNotTrustedError } from '@codingame/monaco-vscode-api/vscode/vs/sessions/services/sessions/common/sessionsManagement';
21
+ import '@codingame/monaco-vscode-api/vscode/vs/platform/instantiation/common/instantiation';
22
+ import { ISessionsProvidersService } from '@codingame/monaco-vscode-api/vscode/vs/sessions/services/sessions/browser/sessionsProvidersService.service';
23
+ import { SessionStatus, ChatModelSource } from '@codingame/monaco-vscode-api/vscode/vs/sessions/services/sessions/common/session';
24
+ import '@codingame/monaco-vscode-api/vscode/vs/platform/instantiation/common/extensions';
25
+ import { StorageScope, StorageTarget } from '@codingame/monaco-vscode-api/vscode/vs/platform/storage/common/storage';
26
+ import { IStorageService } from '@codingame/monaco-vscode-api/vscode/vs/platform/storage/common/storage.service';
27
+ import { IWorkspaceTrustManagementService } from '@codingame/monaco-vscode-api/vscode/vs/platform/workspace/common/workspaceTrust.service';
28
+ import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
29
+ import { observableValue } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/observables/observableValue';
30
+
31
+ const LAST_USED_QUICK_CHAT_SESSION_TYPE_STORAGE_KEY = "sessions.quickChat.lastUsedSessionType";
32
+ let SessionsManagementService = class SessionsManagementService extends Disposable {
33
+ constructor(
34
+ logService,
35
+ sessionsProvidersService,
36
+ uriIdentityService,
37
+ chatService,
38
+ chatWidgetHistoryService,
39
+ storageService,
40
+ pathService,
41
+ remoteAgentHostService,
42
+ workspaceTrustManagementService
43
+ ) {
44
+ super();
45
+ this.logService = logService;
46
+ this.sessionsProvidersService = sessionsProvidersService;
47
+ this.uriIdentityService = uriIdentityService;
48
+ this.chatService = chatService;
49
+ this.chatWidgetHistoryService = chatWidgetHistoryService;
50
+ this.storageService = storageService;
51
+ this.pathService = pathService;
52
+ this.remoteAgentHostService = remoteAgentHostService;
53
+ this.workspaceTrustManagementService = workspaceTrustManagementService;
54
+ this._onDidChangeSessions = this._register(( new Emitter()));
55
+ this.onDidChangeSessions = this._onDidChangeSessions.event;
56
+ this._onDidStartSession = this._register(( new Emitter()));
57
+ this.onDidStartSession = this._onDidStartSession.event;
58
+ this._onWillSendRequest = this._register(( new Emitter()));
59
+ this.onWillSendRequest = this._onWillSendRequest.event;
60
+ this._onDidSendRequest = this._register(( new Emitter()));
61
+ this.onDidSendRequest = this._onDidSendRequest.event;
62
+ this._onDidArchiveSession = this._register(( new Emitter()));
63
+ this.onDidArchiveSession = this._onDidArchiveSession.event;
64
+ this._onDidUnarchiveSession = this._register(( new Emitter()));
65
+ this.onDidUnarchiveSession = this._onDidUnarchiveSession.event;
66
+ this._onDidDeleteSession = this._register(( new Emitter()));
67
+ this.onDidDeleteSession = this._onDidDeleteSession.event;
68
+ this._onDidDeleteChat = this._register(( new Emitter()));
69
+ this.onDidDeleteChat = this._onDidDeleteChat.event;
70
+ this._onDidRenameChat = this._register(( new Emitter()));
71
+ this.onDidRenameChat = this._onDidRenameChat.event;
72
+ this._onDidRenameSession = this._register(( new Emitter()));
73
+ this.onDidRenameSession = this._onDidRenameSession.event;
74
+ this._onDidChangeSessionTypes = this._register(( new Emitter()));
75
+ this.onDidChangeSessionTypes = this._onDidChangeSessionTypes.event;
76
+ this._onDidReplaceSession = this._register(( new Emitter()));
77
+ this.onDidReplaceSession = this._onDidReplaceSession.event;
78
+ this._onDidDiscardNewSession = this._register(( new Emitter()));
79
+ this.onDidDiscardNewSession = this._onDidDiscardNewSession.event;
80
+ this._onDidReplaceNewDraftSession = this._register(( new Emitter()));
81
+ this.onDidReplaceNewDraftSession = this._onDidReplaceNewDraftSession.event;
82
+ this._sessionTypes = [];
83
+ this._newSession = observableValue(this, undefined);
84
+ this.newSession = this._newSession;
85
+ this._automationSession = observableValue(this, undefined);
86
+ this.automationSession = this._automationSession;
87
+ this._providerListeners = this._register(( new DisposableMap()));
88
+ this._disposeCts = this._register(( new CancellationTokenSource()));
89
+ this._unlistedNewSessions = ( new ResourceMap());
90
+ this._inFlightNewSessionRequests = ( new ResourceMap());
91
+ this._pendingSendChatResources = ( new Set());
92
+ this._register(this.sessionsProvidersService.onDidChangeProviders(e => {
93
+ this._onProvidersChanged(e);
94
+ this._updateSessionTypes();
95
+ }));
96
+ this._subscribeToProviders(this.sessionsProvidersService.getProviders());
97
+ this._sessionTypes = this._collectSessionTypes();
98
+ this._register(this.chatService.onDidSubmitRequest((
99
+ {
100
+ chatSessionResource,
101
+ message,
102
+ attachedContext
103
+ }
104
+ ) => {
105
+ if (( this._pendingSendChatResources.has(( chatSessionResource.toString())))) {
106
+ return;
107
+ }
108
+ const ownedChat = this.getSessionForChatResource(chatSessionResource);
109
+ if (ownedChat) {
110
+ this._onDidSendRequest.fire({
111
+ session: ownedChat.session,
112
+ chat: ownedChat.chat,
113
+ isNewSession: false,
114
+ isNewChat: false,
115
+ options: {
116
+ query: message?.text ?? "",
117
+ attachedContext
118
+ }
119
+ });
120
+ }
121
+ }));
122
+ }
123
+ _onProvidersChanged(e) {
124
+ for (const provider of e.removed) {
125
+ this._providerListeners.deleteAndDispose(provider.id);
126
+ }
127
+ if (e.added.length) {
128
+ this._subscribeToProviders(e.added);
129
+ }
130
+ }
131
+ _subscribeToProviders(providers) {
132
+ for (const provider of providers) {
133
+ const disposables = ( new DisposableStore());
134
+ disposables.add(
135
+ provider.onDidChangeSessions(e => this.onDidChangeSessionsFromSessionsProviders(e))
136
+ );
137
+ if (provider.onDidReplaceSession) {
138
+ disposables.add(
139
+ provider.onDidReplaceSession(e => this._handleDidReplaceSession(e.from, e.to))
140
+ );
141
+ }
142
+ if (provider.onDidChangeSessionTypes) {
143
+ disposables.add(provider.onDidChangeSessionTypes(() => this._updateSessionTypes()));
144
+ }
145
+ this._providerListeners.set(provider.id, disposables);
146
+ }
147
+ }
148
+ _handleDidReplaceSession(from, to) {
149
+ this.chatWidgetHistoryService.moveHistory(ChatAgentLocation.Chat, from.sessionId, to.sessionId);
150
+ this._onDidReplaceSession.fire({
151
+ from,
152
+ to
153
+ });
154
+ this._onDidChangeSessions.fire({
155
+ added: [],
156
+ removed: from.sessionId === to.sessionId ? [] : [from],
157
+ changed: [to]
158
+ });
159
+ }
160
+ onDidChangeSessionsFromSessionsProviders(e) {
161
+ if (e.removed.length) {
162
+ const current = this._newSession.get();
163
+ if (current && ( e.removed.some(r => r.sessionId === current.sessionId))) {
164
+ this._newSession.set(undefined, undefined);
165
+ }
166
+ const automationSession = this._automationSession.get();
167
+ if (automationSession && ( e.removed.some(r => r.sessionId === automationSession.sessionId))) {
168
+ this._automationSession.set(undefined, undefined);
169
+ }
170
+ }
171
+ this._onDidChangeSessions.fire(e);
172
+ }
173
+ async resolveSessionResource(resource, reason) {
174
+ for (const provider of this.sessionsProvidersService.getProviders()) {
175
+ if (!provider.resolveSessionResource) {
176
+ continue;
177
+ }
178
+ try {
179
+ const resolved = await provider.resolveSessionResource(resource, reason);
180
+ if (resolved) {
181
+ return resolved;
182
+ }
183
+ } catch (error) {
184
+ this.logService.warn(
185
+ `[SessionsManagement] provider '${provider.id}' failed to resolve ${( resource.toString())}`,
186
+ error
187
+ );
188
+ }
189
+ }
190
+ return resource;
191
+ }
192
+ getSessions() {
193
+ return this._dedupeMigratedCopilotCliSessions(this._getMergedSessions());
194
+ }
195
+ getInFlightNewSessionRequests() {
196
+ return Array.from(( this._inFlightNewSessionRequests.values()), entry => entry.session);
197
+ }
198
+ trackInFlightNewSessionRequest(session) {
199
+ const entry = this._inFlightNewSessionRequests.get(session.resource);
200
+ if (entry) {
201
+ entry.count++;
202
+ } else {
203
+ this._inFlightNewSessionRequests.set(session.resource, {
204
+ session,
205
+ count: 1
206
+ });
207
+ }
208
+ return toDisposable(() => {
209
+ const current = this._inFlightNewSessionRequests.get(session.resource);
210
+ if (current?.count === 1) {
211
+ this._inFlightNewSessionRequests.delete(session.resource);
212
+ } else if (current) {
213
+ current.count--;
214
+ }
215
+ });
216
+ }
217
+ _getMergedSessions() {
218
+ const sessions = [];
219
+ for (const provider of this.sessionsProvidersService.getProviders()) {
220
+ sessions.push(...provider.getSessions());
221
+ }
222
+ return sessions;
223
+ }
224
+ _dedupeMigratedCopilotCliSessions(sessions) {
225
+ return dedupeMigratedCopilotCliSessions(sessions, session => session.resource);
226
+ }
227
+ getSession(resource) {
228
+ const unlistedSession = this._unlistedNewSessions.get(resource);
229
+ if (unlistedSession) {
230
+ return unlistedSession;
231
+ }
232
+ return this._getMergedSessions().find(s => this.uriIdentityService.extUri.isEqual(s.resource, resource));
233
+ }
234
+ getSessionForChatResource(resource) {
235
+ for (const session of this._getMergedSessions()) {
236
+ const chat = session.chats.get().find(c => this.uriIdentityService.extUri.isEqual(c.resource, resource));
237
+ if (chat) {
238
+ return {
239
+ session,
240
+ chat
241
+ };
242
+ }
243
+ const mainChat = session.mainChat.get();
244
+ if (this.uriIdentityService.extUri.isEqual(mainChat.resource, resource)) {
245
+ return {
246
+ session,
247
+ chat: mainChat
248
+ };
249
+ }
250
+ }
251
+ return undefined;
252
+ }
253
+ getAllSessionTypes() {
254
+ return [...this._sessionTypes];
255
+ }
256
+ getAllProviderSessionTypes() {
257
+ const result = [];
258
+ for (const provider of this.sessionsProvidersService.getProviders()) {
259
+ for (const sessionType of provider.sessionTypes) {
260
+ result.push({
261
+ providerId: provider.id,
262
+ sessionType
263
+ });
264
+ }
265
+ }
266
+ return result;
267
+ }
268
+ getSessionTypesForFolder(folderUri) {
269
+ const result = [];
270
+ for (const provider of this.sessionsProvidersService.getProviders()) {
271
+ if (!provider.resolveWorkspace(folderUri)) {
272
+ continue;
273
+ }
274
+ for (const sessionType of provider.getSessionTypes(folderUri)) {
275
+ result.push({
276
+ providerId: provider.id,
277
+ sessionType
278
+ });
279
+ }
280
+ }
281
+ return result;
282
+ }
283
+ getQuickChatSessionTypes() {
284
+ const result = [];
285
+ for (const provider of this.sessionsProvidersService.getProviders()) {
286
+ if (!provider.supportsQuickChats) {
287
+ continue;
288
+ }
289
+ for (const sessionType of provider.sessionTypes) {
290
+ result.push({
291
+ providerId: provider.id,
292
+ sessionType
293
+ });
294
+ }
295
+ }
296
+ return result;
297
+ }
298
+ isNewSessionTargetAvailable(folderUri, options) {
299
+ return this._isTargetAvailable(this.getSessionTypesForFolder(folderUri), options);
300
+ }
301
+ isQuickChatTargetAvailable(options) {
302
+ return this._isTargetAvailable(this.getQuickChatSessionTypes(), options);
303
+ }
304
+ _isTargetAvailable(sessionTypes, options) {
305
+ return ( sessionTypes.some(
306
+ candidate => (!options?.providerId || candidate.providerId === options.providerId) && (!options?.sessionTypeId || candidate.sessionType.id === options.sessionTypeId)
307
+ ));
308
+ }
309
+ resolveWorkspace(folderUri, preferredProviderId) {
310
+ if (preferredProviderId) {
311
+ const preferred = this.sessionsProvidersService.getProvider(preferredProviderId);
312
+ const workspace = preferred?.resolveWorkspace(folderUri);
313
+ if (workspace) {
314
+ return {
315
+ providerId: preferredProviderId,
316
+ workspace
317
+ };
318
+ }
319
+ }
320
+ for (const provider of this.sessionsProvidersService.getProviders()) {
321
+ const workspace = provider.resolveWorkspace(folderUri);
322
+ if (workspace) {
323
+ return {
324
+ providerId: provider.id,
325
+ workspace
326
+ };
327
+ }
328
+ }
329
+ return undefined;
330
+ }
331
+ _collectSessionTypes() {
332
+ const types = [];
333
+ const seen = ( new Set());
334
+ for (const provider of this.sessionsProvidersService.getProviders()) {
335
+ for (const type of provider.sessionTypes) {
336
+ if (!( seen.has(type.id))) {
337
+ seen.add(type.id);
338
+ types.push(type);
339
+ }
340
+ }
341
+ }
342
+ return types;
343
+ }
344
+ _updateSessionTypes() {
345
+ this._sessionTypes = this._collectSessionTypes();
346
+ this._onDidChangeSessionTypes.fire();
347
+ }
348
+ discardNewSession(session) {
349
+ const current = this._newSession.get();
350
+ if (!current) {
351
+ return;
352
+ }
353
+ if (session && session.sessionId !== current.sessionId) {
354
+ return;
355
+ }
356
+ this._newSession.set(undefined, undefined);
357
+ this._getProvider(current)?.deleteNewSession(current.sessionId);
358
+ this._onDidDiscardNewSession.fire(current);
359
+ }
360
+ discardAutomationSession(session) {
361
+ const current = this._automationSession.get();
362
+ if (!current || (session && session.sessionId !== current.sessionId)) {
363
+ return;
364
+ }
365
+ this._automationSession.set(undefined, undefined);
366
+ this._getProvider(current)?.deleteNewSession(current.sessionId);
367
+ }
368
+ _resolveProviderForNewSession(folderUri, options) {
369
+ const providers = this.sessionsProvidersService.getProviders();
370
+ let provider;
371
+ let workspace;
372
+ let sessionTypeId;
373
+ const requiresWorktreeConfiguration = options?.isolationMode === "worktree" || options?.worktreeBranchTrack !== undefined || options?.worktreeCreateNewBranch !== undefined || options?.branch !== undefined;
374
+ const resolveSessionTypeId = candidate => {
375
+ const sessionTypes = candidate.getSessionTypes(folderUri);
376
+ if (options?.sessionTypeId) {
377
+ const requested = sessionTypes.find(type => type.id === options.sessionTypeId);
378
+ return requested && (!requiresWorktreeConfiguration || requested.supportsWorktreeConfiguration === true) ? requested.id : undefined;
379
+ }
380
+ return (requiresWorktreeConfiguration ? sessionTypes.find(type => type.supportsWorktreeConfiguration === true) : sessionTypes[0])?.id;
381
+ };
382
+ if (options?.providerId) {
383
+ provider = providers.find(p => p.id === options.providerId);
384
+ if (!provider) {
385
+ throw ( new Error(`Sessions provider '${options.providerId}' not found`));
386
+ }
387
+ workspace = provider.resolveWorkspace(folderUri);
388
+ if (!workspace) {
389
+ throw ( new Error(
390
+ `Sessions provider '${options.providerId}' cannot resolve folder '${( folderUri.toString())}'`
391
+ ));
392
+ }
393
+ sessionTypeId = resolveSessionTypeId(provider);
394
+ if (!sessionTypeId) {
395
+ if (requiresWorktreeConfiguration) {
396
+ throw ( new Error(
397
+ `Sessions provider '${options.providerId}' does not support worktree configuration for folder '${( folderUri.toString())}'`
398
+ ));
399
+ }
400
+ if (options.sessionTypeId) {
401
+ throw ( new Error(
402
+ `Sessions provider '${options.providerId}' does not advertise session type '${options.sessionTypeId}'`
403
+ ));
404
+ }
405
+ throw ( new Error(`No session types available for provider '${provider.id}'`));
406
+ }
407
+ } else {
408
+ for (const candidate of providers) {
409
+ const candidateWorkspace = candidate.resolveWorkspace(folderUri);
410
+ if (!candidateWorkspace) {
411
+ continue;
412
+ }
413
+ const candidateSessionTypeId = resolveSessionTypeId(candidate);
414
+ if (!candidateSessionTypeId) {
415
+ continue;
416
+ }
417
+ provider = candidate;
418
+ workspace = candidateWorkspace;
419
+ sessionTypeId = candidateSessionTypeId;
420
+ break;
421
+ }
422
+ if (!provider || !workspace) {
423
+ throw ( new Error(
424
+ requiresWorktreeConfiguration ? `No sessions provider supports worktree configuration for folder '${( folderUri.toString())}'` : `No sessions provider can resolve folder '${( folderUri.toString())}'`
425
+ ));
426
+ }
427
+ }
428
+ if (!sessionTypeId) {
429
+ throw ( new Error(`No session types available for provider '${provider.id}'`));
430
+ }
431
+ return {
432
+ provider,
433
+ sessionTypeId,
434
+ workspace
435
+ };
436
+ }
437
+ createNewSession(folderUri, options) {
438
+ const {
439
+ provider,
440
+ sessionTypeId
441
+ } = this._resolveProviderForNewSession(folderUri, options);
442
+ const previousNewSession = this._newSession.get();
443
+ const session = provider.createNewSession(
444
+ folderUri,
445
+ sessionTypeId,
446
+ this._providerCreateSessionOptions(provider, options)
447
+ );
448
+ if (previousNewSession && previousNewSession.sessionId !== session.sessionId) {
449
+ this._getProvider(previousNewSession)?.deleteNewSession(previousNewSession.sessionId);
450
+ this._onDidReplaceNewDraftSession.fire({
451
+ from: previousNewSession,
452
+ to: session
453
+ });
454
+ }
455
+ this._newSession.set(session, undefined);
456
+ return session;
457
+ }
458
+ createAutomationSession(folderUri, options) {
459
+ const {
460
+ provider,
461
+ sessionTypeId
462
+ } = this._resolveProviderForNewSession(folderUri, options);
463
+ const previousAutomationSession = this._automationSession.get();
464
+ const session = provider.createNewSession(
465
+ folderUri,
466
+ sessionTypeId,
467
+ this._providerCreateSessionOptions(provider, options)
468
+ );
469
+ if (previousAutomationSession && previousAutomationSession.sessionId !== session.sessionId) {
470
+ this._getProvider(previousAutomationSession)?.deleteNewSession(previousAutomationSession.sessionId);
471
+ }
472
+ this._automationSession.set(session, undefined);
473
+ return session;
474
+ }
475
+ _resolveProviderForQuickChat(options) {
476
+ const providers = this.sessionsProvidersService.getProviders();
477
+ let provider;
478
+ if (options?.providerId) {
479
+ provider = providers.find(p => p.id === options.providerId);
480
+ if (!provider) {
481
+ throw ( new Error(`Sessions provider '${options.providerId}' not found`));
482
+ }
483
+ if (!provider.supportsQuickChats) {
484
+ throw ( new Error(`Sessions provider '${options.providerId}' does not support quick chats`));
485
+ }
486
+ if (options.sessionTypeId && !( provider.sessionTypes.some(t => t.id === options.sessionTypeId))) {
487
+ throw ( new Error(
488
+ `Sessions provider '${options.providerId}' does not advertise session type '${options.sessionTypeId}'`
489
+ ));
490
+ }
491
+ } else {
492
+ for (const candidate of providers) {
493
+ if (!candidate.supportsQuickChats) {
494
+ continue;
495
+ }
496
+ if (options?.sessionTypeId && !( candidate.sessionTypes.some(t => t.id === options.sessionTypeId))) {
497
+ continue;
498
+ }
499
+ provider = candidate;
500
+ break;
501
+ }
502
+ if (!provider) {
503
+ throw ( new Error("No sessions provider supports quick chats"));
504
+ }
505
+ }
506
+ const sessionTypeId = options?.sessionTypeId ?? this._defaultQuickChatSessionType(provider);
507
+ if (!sessionTypeId) {
508
+ throw ( new Error(`No session types available for provider '${provider.id}'`));
509
+ }
510
+ return {
511
+ provider,
512
+ sessionTypeId
513
+ };
514
+ }
515
+ _defaultQuickChatSessionType(provider) {
516
+ const lastUsed = this.storageService.get(LAST_USED_QUICK_CHAT_SESSION_TYPE_STORAGE_KEY, StorageScope.PROFILE);
517
+ if (lastUsed && ( provider.sessionTypes.some(t => t.id === lastUsed))) {
518
+ return lastUsed;
519
+ }
520
+ return provider.sessionTypes[0]?.id;
521
+ }
522
+ createQuickChat(options) {
523
+ const {
524
+ provider,
525
+ sessionTypeId
526
+ } = this._resolveProviderForQuickChat(options);
527
+ const previousNewSession = this._newSession.get();
528
+ const session = provider.createQuickChat(sessionTypeId, this._providerCreateSessionOptions(provider, options));
529
+ this._newSession.set(session, undefined);
530
+ this.storageService.store(
531
+ LAST_USED_QUICK_CHAT_SESSION_TYPE_STORAGE_KEY,
532
+ sessionTypeId,
533
+ StorageScope.PROFILE,
534
+ StorageTarget.USER
535
+ );
536
+ if (previousNewSession && previousNewSession.sessionId !== session.sessionId) {
537
+ this._getProvider(previousNewSession)?.deleteNewSession(previousNewSession.sessionId);
538
+ }
539
+ return session;
540
+ }
541
+ createAutomationQuickChat(options) {
542
+ const {
543
+ provider,
544
+ sessionTypeId
545
+ } = this._resolveProviderForQuickChat(options);
546
+ const previousAutomationSession = this._automationSession.get();
547
+ const session = provider.createQuickChat(sessionTypeId, this._providerCreateSessionOptions(provider, options));
548
+ if (previousAutomationSession && previousAutomationSession.sessionId !== session.sessionId) {
549
+ this._getProvider(previousAutomationSession)?.deleteNewSession(previousAutomationSession.sessionId);
550
+ }
551
+ this._automationSession.set(session, undefined);
552
+ return session;
553
+ }
554
+ _providerCreateSessionOptions(provider, options) {
555
+ const sessionTemplate = options?.sessionTemplate ?? options?.automationConfiguration?.sessionTemplate;
556
+ if (sessionTemplate && provider.supportsAutomationSessionConfiguration !== true) {
557
+ throw ( new Error(
558
+ `Sessions provider '${provider.id}' does not support Automation session templates.`
559
+ ));
560
+ }
561
+ const automationConfiguration = sessionTemplate ? {
562
+ sessionTemplate
563
+ } : options?.automationConfiguration;
564
+ return {
565
+ metadata: options?.metadata,
566
+ ...(automationConfiguration ? {
567
+ automationConfiguration
568
+ } : {})
569
+ };
570
+ }
571
+ async getAutomationSessionConfiguration(session) {
572
+ const provider = this._getProvider(session);
573
+ return provider?.supportsAutomationSessionConfiguration === true && provider.getAutomationSessionConfiguration ? provider.getAutomationSessionConfiguration(session.sessionId) : null;
574
+ }
575
+ supportsAutomationSessionConfiguration(session) {
576
+ return this._getProvider(session)?.supportsAutomationSessionConfiguration === true;
577
+ }
578
+ usesCombinedNewSessionConfigPicker(session) {
579
+ return this._getProvider(session)?.usesCombinedNewSessionConfigPicker === true;
580
+ }
581
+ async createNewChatInSession(session, options) {
582
+ const provider = this._getProvider(session);
583
+ if (!provider) {
584
+ this.logService.warn(
585
+ `[SessionsManagement] createNewChatInSession: provider '${session.providerId}' not found`
586
+ );
587
+ return undefined;
588
+ }
589
+ if (!options?.forceNew) {
590
+ const existingUntitled = session.chats.get().find(c => c.status.get() === SessionStatus.Untitled);
591
+ if (existingUntitled) {
592
+ return existingUntitled;
593
+ }
594
+ }
595
+ const created = await provider.createNewChat(session.sessionId);
596
+ return created;
597
+ }
598
+ async forkChatInSession(session, sourceChat, turnId) {
599
+ const provider = this._getProvider(session);
600
+ if (!provider) {
601
+ throw ( new Error(
602
+ `Provider '${session.providerId}' not found for session '${session.sessionId}'`
603
+ ));
604
+ }
605
+ if (!session.capabilities.get().supportsMultipleChats) {
606
+ throw ( new Error(`Session '${session.sessionId}' does not support forking into a chat`));
607
+ }
608
+ return provider.forkChat(session.sessionId, sourceChat, turnId);
609
+ }
610
+ async createSideChatInSession(session, sourceChat, turnId, selection) {
611
+ const provider = this._getProvider(session);
612
+ if (!provider) {
613
+ throw ( new Error(
614
+ `Provider '${session.providerId}' not found for session '${session.sessionId}'`
615
+ ));
616
+ }
617
+ if (!session.capabilities.get().supportsSideChat) {
618
+ throw ( new Error(`Session '${session.sessionId}' does not support side chats`));
619
+ }
620
+ return provider.createSideChat(session.sessionId, sourceChat, turnId, selection);
621
+ }
622
+ _augmentOptionsForTroubleshoot(session, options) {
623
+ const referencedResources = [];
624
+ let remainingAttachments;
625
+ if (options.attachedContext?.length) {
626
+ const remaining = [];
627
+ for (const entry of options.attachedContext) {
628
+ const referenced = getSessionReferenceResource(entry);
629
+ if (referenced) {
630
+ referencedResources.push(referenced);
631
+ } else {
632
+ remaining.push(entry);
633
+ }
634
+ }
635
+ if (referencedResources.length) {
636
+ remainingAttachments = remaining;
637
+ }
638
+ }
639
+ const isTroubleshoot = /^\s*\/troubleshoot\b/.test(options.query);
640
+ if (!isTroubleshoot && referencedResources.length === 0) {
641
+ return options;
642
+ }
643
+ let result = options;
644
+ if (remainingAttachments) {
645
+ result = {
646
+ ...result,
647
+ attachedContext: remainingAttachments.length ? remainingAttachments : undefined
648
+ };
649
+ }
650
+ if (!isTroubleshoot) {
651
+ return result;
652
+ }
653
+ const targets = referencedResources.length ? referencedResources : (getCopilotCliSessionRawId(session.resource) ? [session.resource] : []);
654
+ const userHome = this.pathService.userHome({
655
+ preferLocal: true
656
+ });
657
+ const getConnection = authority => this.remoteAgentHostService.connections.find(c => agentHostAuthority(c.address) === authority);
658
+ const eventPaths = Array.from(( new Set(
659
+ targets.map(resource => buildHostLocalEventsPath(resource, userHome, getConnection)).filter(path => !!path)
660
+ )));
661
+ if (eventPaths.length === 0) {
662
+ return result;
663
+ }
664
+ return {
665
+ ...result,
666
+ query: `${result.query}\n\nSession log: ${eventPaths.join(", ")}`
667
+ };
668
+ }
669
+ async sendNewChatRequest(session, options) {
670
+ let provider = this._getProvider(session);
671
+ if (!provider) {
672
+ throw ( new Error(`Sessions provider '${session.providerId}' not found`));
673
+ }
674
+ const isNewSessionRequest = session.status.get() === SessionStatus.Untitled;
675
+ const inFlightRequest = isNewSessionRequest ? this.trackInFlightNewSessionRequest(session) : undefined;
676
+ if (options.background) {
677
+ this._newSession.set(undefined, undefined);
678
+ void this._prepareAndSendNewChatRequestInBackground(provider, session, options).catch(e => {
679
+ this.logService.error("[SessionsManagement] Failed to send background request:", e);
680
+ }).finally(() => inFlightRequest?.dispose());
681
+ return;
682
+ }
683
+ const requestActivity = ( new MutableDisposable());
684
+ try {
685
+ requestActivity.value = provider.startNewSessionRequest?.(session.sessionId);
686
+ ({
687
+ provider,
688
+ session
689
+ } = await this._prepareNewSessionForSend(provider, session, requestActivity, true, options.query));
690
+ this._newSession.set(undefined, undefined);
691
+ this._onWillSendRequest.fire(session);
692
+ const chat = await provider.createNewChat(session.sessionId, options.query);
693
+ const sendOptions = this._augmentOptionsForTroubleshoot(session, options);
694
+ const chatResourceKey = ( chat.resource.toString());
695
+ this._pendingSendChatResources.add(chatResourceKey);
696
+ let updatedSession;
697
+ try {
698
+ updatedSession = await provider.sendRequest(session.sessionId, chat.resource, sendOptions);
699
+ } finally {
700
+ this._pendingSendChatResources.delete(chatResourceKey);
701
+ }
702
+ if (updatedSession.sessionId !== session.sessionId) {
703
+ this.logService.info(
704
+ `[SessionsManagement] sendRequest: active session replaced: ${session.sessionId} -> ${updatedSession.sessionId}`
705
+ );
706
+ }
707
+ this._onDidStartSession.fire(updatedSession);
708
+ this._onDidSendRequest.fire({
709
+ session: updatedSession,
710
+ chat,
711
+ isNewSession: true,
712
+ isNewChat: true,
713
+ options
714
+ });
715
+ } finally {
716
+ requestActivity.dispose();
717
+ inFlightRequest?.dispose();
718
+ }
719
+ }
720
+ async _prepareNewSessionForSend(provider, session, requestActivity, replaceCurrentDraft, query) {
721
+ if (!provider.prepareNewSession) {
722
+ return {
723
+ provider,
724
+ session
725
+ };
726
+ }
727
+ const originalSession = session;
728
+ const preparationTokenSource = ( new CancellationTokenSource(this._disposeCts.token));
729
+ const preparationListeners = ( new DisposableStore());
730
+ preparationListeners.add(this.onDidReplaceNewDraftSession((
731
+ {
732
+ from
733
+ }
734
+ ) => {
735
+ if (from.sessionId === originalSession.sessionId) {
736
+ preparationTokenSource.cancel();
737
+ }
738
+ }));
739
+ preparationListeners.add(this.onDidDiscardNewSession(discarded => {
740
+ if (discarded.sessionId === originalSession.sessionId) {
741
+ preparationTokenSource.cancel();
742
+ }
743
+ }));
744
+ let prepared;
745
+ try {
746
+ prepared = await provider.prepareNewSession(session.sessionId, preparationTokenSource.token, query);
747
+ } finally {
748
+ preparationListeners.dispose();
749
+ preparationTokenSource.dispose();
750
+ }
751
+ const preparedSession = prepared.session;
752
+ if (preparedSession.sessionId === originalSession.sessionId) {
753
+ return {
754
+ provider,
755
+ session
756
+ };
757
+ }
758
+ const preparedProvider = this._getProvider(preparedSession);
759
+ if (!preparedProvider) {
760
+ await prepared.discard?.();
761
+ throw ( new Error(
762
+ `Sessions provider '${preparedSession.providerId}' not found after preparing the new session`
763
+ ));
764
+ }
765
+ if (replaceCurrentDraft && this._newSession.get()?.sessionId !== originalSession.sessionId) {
766
+ if (prepared.discard) {
767
+ await prepared.discard();
768
+ } else {
769
+ preparedProvider.deleteNewSession(preparedSession.sessionId);
770
+ }
771
+ throw ( new CancellationError());
772
+ }
773
+ const preparedRequestActivity = requestActivity ? preparedProvider.startNewSessionRequest?.(preparedSession.sessionId) : undefined;
774
+ provider.deleteNewSession(originalSession.sessionId);
775
+ if (requestActivity) {
776
+ requestActivity.value = preparedRequestActivity;
777
+ }
778
+ if (replaceCurrentDraft) {
779
+ this._onDidReplaceNewDraftSession.fire({
780
+ from: originalSession,
781
+ to: preparedSession
782
+ });
783
+ }
784
+ return {
785
+ provider: preparedProvider,
786
+ session: preparedSession
787
+ };
788
+ }
789
+ async createAndSendNewChatRequest(folderUri, options, createOptions, token = CancellationToken.None) {
790
+ const {
791
+ provider,
792
+ sessionTypeId,
793
+ workspace
794
+ } = this._resolveProviderForNewSession(folderUri, createOptions);
795
+ if (workspace.requiresWorkspaceTrust) {
796
+ const trustInfo = await this.workspaceTrustManagementService.getUriTrustInfo(folderUri);
797
+ if (!trustInfo.trusted) {
798
+ throw ( new WorkspaceNotTrustedError());
799
+ }
800
+ }
801
+ const session = provider.createNewSession(
802
+ folderUri,
803
+ sessionTypeId,
804
+ this._providerCreateSessionOptions(provider, createOptions)
805
+ );
806
+ this._unlistedNewSessions.set(session.resource, session);
807
+ const requestActivity = ( new MutableDisposable());
808
+ try {
809
+ try {
810
+ requestActivity.value = isDeferredNewSessionRequestOptions(options) ? provider.startNewSessionRequest?.(session.sessionId, options.activity) : provider.startNewSessionRequest?.(session.sessionId);
811
+ createOptions?.onSessionCreated?.(session);
812
+ } catch (error) {
813
+ provider.deleteNewSession(session.sessionId);
814
+ throw error;
815
+ }
816
+ const supportsWorktreeConfiguration = provider.getSessionTypes(folderUri).find(sessionType => sessionType.id === sessionTypeId)?.supportsWorktreeConfiguration === true;
817
+ return await this._configureAndSendNewSession(
818
+ provider,
819
+ session,
820
+ options,
821
+ createOptions,
822
+ supportsWorktreeConfiguration,
823
+ token,
824
+ folderUri,
825
+ requestActivity
826
+ );
827
+ } finally {
828
+ requestActivity.dispose();
829
+ this._unlistedNewSessions.delete(session.resource);
830
+ }
831
+ }
832
+ async createAndSendQuickChatRequest(options, createOptions, token = CancellationToken.None) {
833
+ const {
834
+ provider,
835
+ sessionTypeId
836
+ } = this._resolveProviderForQuickChat(createOptions);
837
+ const session = provider.createQuickChat(sessionTypeId, this._providerCreateSessionOptions(provider, createOptions));
838
+ return this._configureAndSendNewSession(provider, session, options, createOptions, false, token);
839
+ }
840
+ async _configureAndSendNewSession(
841
+ provider,
842
+ session,
843
+ options,
844
+ createOptions,
845
+ supportsWorktreeConfiguration,
846
+ token,
847
+ folderUri,
848
+ requestActivity
849
+ ) {
850
+ const inFlightRequest = this.trackInFlightNewSessionRequest(session);
851
+ try {
852
+ if (token.isCancellationRequested) {
853
+ throw ( new CancellationError());
854
+ }
855
+ const requestOptionsPromise = (async () => {
856
+ try {
857
+ return isDeferredNewSessionRequestOptions(options) ? await options.resolve() : options;
858
+ } finally {
859
+ requestActivity?.clear();
860
+ }
861
+ })();
862
+ const configurationPromise = this._configureNewSession(
863
+ provider,
864
+ session,
865
+ createOptions,
866
+ supportsWorktreeConfiguration,
867
+ token,
868
+ folderUri
869
+ );
870
+ const [resolvedOptions] = await raceCancellationError(Promise.all([requestOptionsPromise, configurationPromise]), token);
871
+ if (token.isCancellationRequested) {
872
+ throw ( new CancellationError());
873
+ }
874
+ return await raceCancellationError(
875
+ this._sendNewChatRequestInBackground(provider, session, resolvedOptions, token),
876
+ token
877
+ );
878
+ } catch (e) {
879
+ provider.deleteNewSession(session.sessionId);
880
+ throw e;
881
+ } finally {
882
+ inFlightRequest.dispose();
883
+ }
884
+ }
885
+ async _configureNewSession(
886
+ provider,
887
+ session,
888
+ createOptions,
889
+ supportsWorktreeConfiguration,
890
+ token,
891
+ folderUri
892
+ ) {
893
+ if (createOptions?.modelId) {
894
+ const resolvedModelId = await this._waitForRequestedModel(provider, session, createOptions.modelId, token, folderUri);
895
+ provider.setModel(
896
+ session.sessionId,
897
+ session.mainChat.get().resource,
898
+ resolvedModelId,
899
+ ChatModelSource.Chosen
900
+ );
901
+ }
902
+ if (createOptions?.modeId) {
903
+ provider.setMode?.(session.sessionId, createOptions.modeId);
904
+ }
905
+ if (createOptions?.permissionLevel) {
906
+ provider.setPermissionLevel?.(session.sessionId, createOptions.permissionLevel);
907
+ }
908
+ if (supportsWorktreeConfiguration && (createOptions?.isolationMode || createOptions?.worktreeBranchTrack !== undefined || createOptions?.worktreeCreateNewBranch !== undefined || createOptions?.branch)) {
909
+ if (provider.setWorktreeConfiguration) {
910
+ await raceCancellationError(provider.setWorktreeConfiguration(session.sessionId, {
911
+ isolationMode: createOptions.isolationMode,
912
+ worktreeBranchTrack: createOptions.worktreeBranchTrack,
913
+ worktreeCreateNewBranch: createOptions.worktreeCreateNewBranch,
914
+ branch: createOptions.branch
915
+ }), token);
916
+ } else {
917
+ if (createOptions.isolationMode && provider.setIsolationMode) {
918
+ await raceCancellationError(
919
+ provider.setIsolationMode(session.sessionId, createOptions.isolationMode),
920
+ token
921
+ );
922
+ }
923
+ if (createOptions.worktreeBranchTrack !== undefined && provider.setWorktreeBranchTrack) {
924
+ await raceCancellationError(
925
+ provider.setWorktreeBranchTrack(session.sessionId, createOptions.worktreeBranchTrack),
926
+ token
927
+ );
928
+ }
929
+ if (createOptions.worktreeCreateNewBranch !== undefined && provider.setWorktreeCreateNewBranch) {
930
+ await raceCancellationError(
931
+ provider.setWorktreeCreateNewBranch(session.sessionId, createOptions.worktreeCreateNewBranch),
932
+ token
933
+ );
934
+ }
935
+ if (createOptions.branch && provider.setBranch) {
936
+ await raceCancellationError(provider.setBranch(session.sessionId, createOptions.branch), token);
937
+ }
938
+ }
939
+ }
940
+ }
941
+ async _waitForRequestedModel(provider, session, modelId, token, folderUri) {
942
+ const resolveCurrent = () => provider.getModelsSnapshot(session.sessionId, modelId).desiredModelResolution;
943
+ const initial = resolveCurrent();
944
+ if (initial.kind === "available") {
945
+ return initial.model.identifier;
946
+ }
947
+ if (initial.kind === "notRequested") {
948
+ return modelId;
949
+ }
950
+ if (initial.kind === "unavailable") {
951
+ throw ( new Error(`Model '${modelId}' is unavailable for sessions provider '${provider.id}'`));
952
+ }
953
+ if (token.isCancellationRequested) {
954
+ throw ( new CancellationError());
955
+ }
956
+ return ( new Promise((resolve, reject) => {
957
+ const disposables = ( new DisposableStore());
958
+ let settled = false;
959
+ const finish = result => {
960
+ if (settled) {
961
+ return;
962
+ }
963
+ settled = true;
964
+ disposables.dispose();
965
+ if (result instanceof Error) {
966
+ reject(result);
967
+ } else {
968
+ resolve(result);
969
+ }
970
+ };
971
+ const check = () => {
972
+ const resolution = resolveCurrent();
973
+ if (resolution.kind === "available") {
974
+ finish(resolution.model.identifier);
975
+ } else if (resolution.kind === "notRequested") {
976
+ finish(modelId);
977
+ } else if (resolution.kind === "unavailable") {
978
+ finish(( new Error(`Model '${modelId}' is unavailable for sessions provider '${provider.id}'`)));
979
+ }
980
+ };
981
+ disposables.add(provider.onDidChangeModels(check));
982
+ disposables.add(provider.onDidChangeSessionTypes(() => {
983
+ const sessionTypes = folderUri ? provider.getSessionTypes(folderUri) : provider.sessionTypes;
984
+ if (!( sessionTypes.some(type => type.id === session.sessionType))) {
985
+ finish(( new Error(
986
+ `Session type '${session.sessionType}' is no longer available for sessions provider '${provider.id}'`
987
+ )));
988
+ }
989
+ }));
990
+ disposables.add(this.sessionsProvidersService.onDidChangeProviders(event => {
991
+ if (event.removed.includes(provider)) {
992
+ finish(( new Error(`Sessions provider '${provider.id}' is no longer available`)));
993
+ }
994
+ }));
995
+ disposables.add(token.onCancellationRequested(() => finish(( new CancellationError()))));
996
+ disposables.add(this._disposeCts.token.onCancellationRequested(() => finish(( new CancellationError()))));
997
+ check();
998
+ }));
999
+ }
1000
+ dispose() {
1001
+ this._disposeCts.cancel();
1002
+ super.dispose();
1003
+ }
1004
+ async _prepareAndSendNewChatRequestInBackground(provider, session, options) {
1005
+ let graduatingProvider = provider;
1006
+ let graduatingSession = session;
1007
+ try {
1008
+ ({
1009
+ provider: graduatingProvider,
1010
+ session: graduatingSession
1011
+ } = await this._prepareNewSessionForSend(provider, session, undefined, false, options.query));
1012
+ await this._sendNewChatRequestInBackground(graduatingProvider, graduatingSession, options);
1013
+ } catch (error) {
1014
+ graduatingProvider.deleteNewSession(graduatingSession.sessionId);
1015
+ throw error;
1016
+ }
1017
+ }
1018
+ async _sendNewChatRequestInBackground(provider, session, options, token = CancellationToken.None) {
1019
+ if (token.isCancellationRequested) {
1020
+ throw ( new CancellationError());
1021
+ }
1022
+ this._onWillSendRequest.fire(session);
1023
+ const chatPromise = provider.createNewChat(session.sessionId, options.query);
1024
+ const chat = token === CancellationToken.None ? await chatPromise : await raceCancellationError(chatPromise, token);
1025
+ const sendOptions = this._augmentOptionsForTroubleshoot(session, options);
1026
+ const chatResourceKey = ( chat.resource.toString());
1027
+ this._pendingSendChatResources.add(chatResourceKey);
1028
+ const cancellationListener = token.onCancellationRequested(() => {
1029
+ void this.chatService.cancelCurrentRequestForSession(chat.resource, "sessionsManagement").catch(error => {
1030
+ this.logService.warn("[SessionsManagement] Failed to cancel headless request:", error);
1031
+ });
1032
+ });
1033
+ let updatedSession;
1034
+ try {
1035
+ updatedSession = await provider.sendRequest(session.sessionId, chat.resource, sendOptions);
1036
+ } finally {
1037
+ cancellationListener.dispose();
1038
+ this._pendingSendChatResources.delete(chatResourceKey);
1039
+ }
1040
+ if (token.isCancellationRequested) {
1041
+ throw ( new CancellationError());
1042
+ }
1043
+ if (this._store.isDisposed) {
1044
+ return undefined;
1045
+ }
1046
+ this._onDidStartSession.fire(updatedSession);
1047
+ this._onDidSendRequest.fire({
1048
+ session: updatedSession,
1049
+ chat,
1050
+ isNewSession: true,
1051
+ isNewChat: true,
1052
+ options
1053
+ });
1054
+ return updatedSession;
1055
+ }
1056
+ async sendRequest(session, chat, options) {
1057
+ this.discardNewSession();
1058
+ const provider = this._getProvider(session);
1059
+ if (!provider) {
1060
+ throw ( new Error(`Sessions provider '${session.providerId}' not found`));
1061
+ }
1062
+ if (options.background) {
1063
+ this._sendRequestInBackground(provider, session, chat, options).catch(e => {
1064
+ this.logService.error("[SessionsManagement] Failed to send background request:", e);
1065
+ });
1066
+ return;
1067
+ }
1068
+ this._onWillSendRequest.fire(session);
1069
+ const sendOptions = this._augmentOptionsForTroubleshoot(session, options);
1070
+ const chatResourceKey = ( chat.resource.toString());
1071
+ this._pendingSendChatResources.add(chatResourceKey);
1072
+ let updatedSession;
1073
+ try {
1074
+ updatedSession = await provider.sendRequest(session.sessionId, chat.resource, sendOptions);
1075
+ } finally {
1076
+ this._pendingSendChatResources.delete(chatResourceKey);
1077
+ }
1078
+ if (updatedSession.sessionId !== session.sessionId) {
1079
+ this.logService.info(
1080
+ `[SessionsManagement] sendRequest: active session replaced: ${session.sessionId} -> ${updatedSession.sessionId}`
1081
+ );
1082
+ }
1083
+ this._onDidSendRequest.fire({
1084
+ session: updatedSession,
1085
+ chat,
1086
+ isNewSession: false,
1087
+ isNewChat: true,
1088
+ options
1089
+ });
1090
+ }
1091
+ async _sendRequestInBackground(provider, session, chat, options) {
1092
+ const sendOptions = this._augmentOptionsForTroubleshoot(session, options);
1093
+ const chatResourceKey = ( chat.resource.toString());
1094
+ this._pendingSendChatResources.add(chatResourceKey);
1095
+ let updatedSession;
1096
+ try {
1097
+ updatedSession = await provider.sendRequest(session.sessionId, chat.resource, sendOptions);
1098
+ } finally {
1099
+ this._pendingSendChatResources.delete(chatResourceKey);
1100
+ }
1101
+ if (this._store.isDisposed) {
1102
+ return;
1103
+ }
1104
+ this._onDidSendRequest.fire({
1105
+ session: updatedSession,
1106
+ chat,
1107
+ isNewSession: false,
1108
+ isNewChat: true,
1109
+ options
1110
+ });
1111
+ }
1112
+ _getProvider(session) {
1113
+ return this.sessionsProvidersService.getProviders().find(p => p.id === session.providerId);
1114
+ }
1115
+ async cancelCurrentRequest(session) {
1116
+ const resource = session.mainChat.get().resource;
1117
+ const modelRef = await this.chatService.acquireOrLoadSession(
1118
+ resource,
1119
+ ChatAgentLocation.Chat,
1120
+ CancellationToken.None,
1121
+ "sessionsManagement:cancel"
1122
+ );
1123
+ if (!modelRef) {
1124
+ throw ( new Error(( localize(4903, "Failed to load chat session for cancellation."))));
1125
+ }
1126
+ try {
1127
+ await this.chatService.cancelCurrentRequestForSession(resource, "sessionsManagement");
1128
+ } finally {
1129
+ modelRef.dispose();
1130
+ }
1131
+ }
1132
+ async archiveSession(session) {
1133
+ await this._getProvider(session)?.archiveSession(session.sessionId);
1134
+ this._onDidArchiveSession.fire(session);
1135
+ }
1136
+ async unarchiveSession(session) {
1137
+ await this._getProvider(session)?.unarchiveSession(session.sessionId);
1138
+ this._onDidUnarchiveSession.fire(session);
1139
+ }
1140
+ async setSessionReadState(session, isRead) {
1141
+ await this._getProvider(session)?.setSessionReadState(session.sessionId, isRead);
1142
+ }
1143
+ markRead(session) {
1144
+ return this.setSessionReadState(session, true);
1145
+ }
1146
+ markUnread(session) {
1147
+ return this.setSessionReadState(session, false);
1148
+ }
1149
+ async markAllRead(sessions) {
1150
+ await Promise.all(sessions.map(session => this.setSessionReadState(session, true)));
1151
+ }
1152
+ async deleteSession(session) {
1153
+ await this._getProvider(session)?.deleteSession(session.sessionId);
1154
+ this._onDidDeleteSession.fire(session);
1155
+ }
1156
+ async deleteSessions(sessions) {
1157
+ const byProvider = ( new Map());
1158
+ for (const session of sessions) {
1159
+ const provider = this._getProvider(session);
1160
+ if (!provider) {
1161
+ continue;
1162
+ }
1163
+ const group = byProvider.get(provider);
1164
+ if (group) {
1165
+ group.push(session);
1166
+ } else {
1167
+ byProvider.set(provider, [session]);
1168
+ }
1169
+ }
1170
+ let firstError;
1171
+ for (const [provider, providerSessions] of byProvider) {
1172
+ try {
1173
+ await provider.deleteSessions(providerSessions.map(session => session.sessionId));
1174
+ for (const session of providerSessions) {
1175
+ this._onDidDeleteSession.fire(session);
1176
+ }
1177
+ } catch (error) {
1178
+ firstError ??= error;
1179
+ }
1180
+ }
1181
+ if (firstError !== undefined) {
1182
+ throw firstError;
1183
+ }
1184
+ }
1185
+ async deleteChat(session, chatUri, options) {
1186
+ const deleted = await this._getProvider(session)?.deleteChat(session.sessionId, chatUri, options);
1187
+ if (deleted) {
1188
+ this._onDidDeleteChat.fire(session);
1189
+ }
1190
+ }
1191
+ async renameChat(session, chatUri, title) {
1192
+ await this._getProvider(session)?.renameChat(session.sessionId, chatUri, title);
1193
+ this._onDidRenameChat.fire(session);
1194
+ }
1195
+ async renameSession(session, title) {
1196
+ await this._getProvider(session)?.renameSession(session.sessionId, title);
1197
+ this._onDidRenameSession.fire(session);
1198
+ }
1199
+ async removeSessionArtifact(session, artifactId) {
1200
+ const provider = this._getProvider(session);
1201
+ if (!session.capabilities.get().supportsRemoveArtifacts || !provider?.removeSessionArtifact) {
1202
+ throw ( new Error(( localize(4904, "Removing artifacts is not supported for this session."))));
1203
+ }
1204
+ await provider.removeSessionArtifact(session.sessionId, artifactId);
1205
+ }
1206
+ };
1207
+ SessionsManagementService = ( __decorate([( __param(0, ILogService)), ( __param(1, ISessionsProvidersService)), ( __param(2, IUriIdentityService)), ( __param(3, IChatService)), ( __param(4, IChatWidgetHistoryService)), ( __param(5, IStorageService)), ( __param(6, IPathService)), ( __param(7, IRemoteAgentHostService)), ( __param(8, IWorkspaceTrustManagementService))], SessionsManagementService));
1208
+ function isDeferredNewSessionRequestOptions(options) {
1209
+ return options.kind === "deferred";
1210
+ }
1211
+
1212
+ export { SessionsManagementService };