@codingame/monaco-vscode-extensions-service-override 37.1.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 (207) hide show
  1. package/index.js +2 -17
  2. package/package.json +3 -3
  3. package/service-override/tools/missingMainThreadCustomers.d.ts +1 -0
  4. package/service-override/tools/missingMainThreadCustomers.js +274 -0
  5. package/vscode/src/vs/platform/extensionManagement/common/extensionManagementCLI.js +37 -37
  6. package/vscode/src/vs/workbench/api/browser/mainThreadAgentEditorComments.d.ts +1 -1
  7. package/vscode/src/vs/workbench/api/browser/mainThreadAgentEditorComments.js +3 -3
  8. package/vscode/src/vs/workbench/api/browser/mainThreadAiEmbeddingVector.d.ts +1 -1
  9. package/vscode/src/vs/workbench/api/browser/mainThreadAiEmbeddingVector.js +1 -1
  10. package/vscode/src/vs/workbench/api/browser/mainThreadAiRelatedInformation.d.ts +1 -1
  11. package/vscode/src/vs/workbench/api/browser/mainThreadAiRelatedInformation.js +1 -1
  12. package/vscode/src/vs/workbench/api/browser/mainThreadAiSettingsSearch.d.ts +1 -1
  13. package/vscode/src/vs/workbench/api/browser/mainThreadAiSettingsSearch.js +1 -1
  14. package/vscode/src/vs/workbench/api/browser/mainThreadAuthentication.d.ts +1 -1
  15. package/vscode/src/vs/workbench/api/browser/mainThreadAuthentication.js +32 -32
  16. package/vscode/src/vs/workbench/api/browser/mainThreadBrowserTunnelProxy.d.ts +1 -1
  17. package/vscode/src/vs/workbench/api/browser/mainThreadBrowserTunnelProxy.js +1 -1
  18. package/vscode/src/vs/workbench/api/browser/mainThreadBrowsers.d.ts +1 -1
  19. package/vscode/src/vs/workbench/api/browser/mainThreadBrowsers.js +1 -1
  20. package/vscode/src/vs/workbench/api/browser/mainThreadBulkEdits.d.ts +1 -1
  21. package/vscode/src/vs/workbench/api/browser/mainThreadBulkEdits.js +7 -7
  22. package/vscode/src/vs/workbench/api/browser/mainThreadCLICommands.js +2 -2
  23. package/vscode/src/vs/workbench/api/browser/mainThreadChatOutputRenderer.d.ts +1 -1
  24. package/vscode/src/vs/workbench/api/browser/mainThreadClipboard.d.ts +1 -1
  25. package/vscode/src/vs/workbench/api/browser/mainThreadClipboard.js +1 -1
  26. package/vscode/src/vs/workbench/api/browser/mainThreadCodeInsets.d.ts +1 -1
  27. package/vscode/src/vs/workbench/api/browser/mainThreadCodeInsets.js +1 -1
  28. package/vscode/src/vs/workbench/api/browser/mainThreadCommands.d.ts +1 -1
  29. package/vscode/src/vs/workbench/api/browser/mainThreadCommands.js +1 -1
  30. package/vscode/src/vs/workbench/api/browser/mainThreadComments.d.ts +1 -1
  31. package/vscode/src/vs/workbench/api/browser/mainThreadComments.js +2 -2
  32. package/vscode/src/vs/workbench/api/browser/mainThreadConfiguration.d.ts +1 -1
  33. package/vscode/src/vs/workbench/api/browser/mainThreadConfiguration.js +1 -1
  34. package/vscode/src/vs/workbench/api/browser/mainThreadConsole.d.ts +1 -1
  35. package/vscode/src/vs/workbench/api/browser/mainThreadConsole.js +1 -1
  36. package/vscode/src/vs/workbench/api/browser/mainThreadCustomEditors.d.ts +1 -1
  37. package/vscode/src/vs/workbench/api/browser/mainThreadCustomEditors.js +2 -2
  38. package/vscode/src/vs/workbench/api/browser/mainThreadDataChannels.d.ts +1 -1
  39. package/vscode/src/vs/workbench/api/browser/mainThreadDataChannels.js +9 -9
  40. package/vscode/src/vs/workbench/api/browser/mainThreadDebugService.d.ts +1 -1
  41. package/vscode/src/vs/workbench/api/browser/mainThreadDebugService.js +7 -7
  42. package/vscode/src/vs/workbench/api/browser/mainThreadDecorations.d.ts +1 -1
  43. package/vscode/src/vs/workbench/api/browser/mainThreadDecorations.js +2 -2
  44. package/vscode/src/vs/workbench/api/browser/mainThreadDiagnostics.d.ts +1 -1
  45. package/vscode/src/vs/workbench/api/browser/mainThreadDiagnostics.js +1 -1
  46. package/vscode/src/vs/workbench/api/browser/mainThreadDialogs.d.ts +1 -1
  47. package/vscode/src/vs/workbench/api/browser/mainThreadDialogs.js +1 -1
  48. package/vscode/src/vs/workbench/api/browser/mainThreadDocumentContentProviders.d.ts +1 -1
  49. package/vscode/src/vs/workbench/api/browser/mainThreadDocumentContentProviders.js +4 -2
  50. package/vscode/src/vs/workbench/api/browser/mainThreadDocumentDiff.d.ts +1 -1
  51. package/vscode/src/vs/workbench/api/browser/mainThreadDocumentDiff.js +5 -5
  52. package/vscode/src/vs/workbench/api/browser/mainThreadDocumentsAndEditors.d.ts +1 -1
  53. package/vscode/src/vs/workbench/api/browser/mainThreadDocumentsAndEditors.js +9 -9
  54. package/vscode/src/vs/workbench/api/browser/mainThreadDownloadService.d.ts +1 -1
  55. package/vscode/src/vs/workbench/api/browser/mainThreadDownloadService.js +1 -1
  56. package/vscode/src/vs/workbench/api/browser/mainThreadEditSessionIdentityParticipant.d.ts +1 -1
  57. package/vscode/src/vs/workbench/api/browser/mainThreadEditSessionIdentityParticipant.js +2 -2
  58. package/vscode/src/vs/workbench/api/browser/mainThreadEditor.d.ts +1 -1
  59. package/vscode/src/vs/workbench/api/browser/mainThreadEditor.js +5 -5
  60. package/vscode/src/vs/workbench/api/browser/mainThreadEditorTabs.d.ts +1 -1
  61. package/vscode/src/vs/workbench/api/browser/mainThreadEditorTabs.js +1 -1
  62. package/vscode/src/vs/workbench/api/browser/mainThreadEditors.d.ts +1 -1
  63. package/vscode/src/vs/workbench/api/browser/mainThreadEditors.js +10 -10
  64. package/vscode/src/vs/workbench/api/browser/mainThreadEmbeddings.d.ts +1 -1
  65. package/vscode/src/vs/workbench/api/browser/mainThreadEmbeddings.js +1 -1
  66. package/vscode/src/vs/workbench/api/browser/mainThreadErrors.js +1 -1
  67. package/vscode/src/vs/workbench/api/browser/mainThreadExtensionService.d.ts +1 -1
  68. package/vscode/src/vs/workbench/api/browser/mainThreadExtensionService.js +13 -13
  69. package/vscode/src/vs/workbench/api/browser/mainThreadFileSystem.d.ts +1 -1
  70. package/vscode/src/vs/workbench/api/browser/mainThreadFileSystem.js +3 -3
  71. package/vscode/src/vs/workbench/api/browser/mainThreadFileSystemEventService.d.ts +1 -1
  72. package/vscode/src/vs/workbench/api/browser/mainThreadFileSystemEventService.js +21 -21
  73. package/vscode/src/vs/workbench/api/browser/mainThreadGitExtensionService.d.ts +1 -1
  74. package/vscode/src/vs/workbench/api/browser/mainThreadGitExtensionService.js +5 -5
  75. package/vscode/src/vs/workbench/api/browser/mainThreadInteractive.d.ts +1 -1
  76. package/vscode/src/vs/workbench/api/browser/mainThreadInteractive.js +1 -1
  77. package/vscode/src/vs/workbench/api/browser/mainThreadLabelService.d.ts +1 -1
  78. package/vscode/src/vs/workbench/api/browser/mainThreadLabelService.js +1 -1
  79. package/vscode/src/vs/workbench/api/browser/mainThreadLanguageFeatures.d.ts +1 -1
  80. package/vscode/src/vs/workbench/api/browser/mainThreadLanguageFeatures.js +16 -16
  81. package/vscode/src/vs/workbench/api/browser/mainThreadLanguages.d.ts +1 -1
  82. package/vscode/src/vs/workbench/api/browser/mainThreadLanguages.js +2 -2
  83. package/vscode/src/vs/workbench/api/browser/mainThreadLocalization.d.ts +1 -1
  84. package/vscode/src/vs/workbench/api/browser/mainThreadLocalization.js +1 -1
  85. package/vscode/src/vs/workbench/api/browser/mainThreadLogService.d.ts +1 -1
  86. package/vscode/src/vs/workbench/api/browser/mainThreadLogService.js +1 -1
  87. package/vscode/src/vs/workbench/api/browser/mainThreadManagedSockets.d.ts +1 -1
  88. package/vscode/src/vs/workbench/api/browser/mainThreadManagedSockets.js +1 -1
  89. package/vscode/src/vs/workbench/api/browser/mainThreadMessageService.d.ts +1 -1
  90. package/vscode/src/vs/workbench/api/browser/mainThreadMessageService.js +7 -7
  91. package/vscode/src/vs/workbench/api/browser/mainThreadMeteredConnection.d.ts +1 -1
  92. package/vscode/src/vs/workbench/api/browser/mainThreadMeteredConnection.js +1 -1
  93. package/vscode/src/vs/workbench/api/browser/mainThreadOutputService.d.ts +1 -1
  94. package/vscode/src/vs/workbench/api/browser/mainThreadOutputService.js +4 -4
  95. package/vscode/src/vs/workbench/api/browser/mainThreadPower.d.ts +1 -1
  96. package/vscode/src/vs/workbench/api/browser/mainThreadPower.js +1 -1
  97. package/vscode/src/vs/workbench/api/browser/mainThreadProfileContentHandlers.d.ts +1 -1
  98. package/vscode/src/vs/workbench/api/browser/mainThreadProfileContentHandlers.js +1 -1
  99. package/vscode/src/vs/workbench/api/browser/mainThreadProgress.d.ts +1 -1
  100. package/vscode/src/vs/workbench/api/browser/mainThreadProgress.js +2 -2
  101. package/vscode/src/vs/workbench/api/browser/mainThreadQuickDiff.d.ts +1 -1
  102. package/vscode/src/vs/workbench/api/browser/mainThreadQuickDiff.js +3 -3
  103. package/vscode/src/vs/workbench/api/browser/mainThreadQuickOpen.d.ts +1 -1
  104. package/vscode/src/vs/workbench/api/browser/mainThreadQuickOpen.js +4 -4
  105. package/vscode/src/vs/workbench/api/browser/mainThreadRemoteConnectionData.d.ts +1 -1
  106. package/vscode/src/vs/workbench/api/browser/mainThreadRemoteConnectionData.js +1 -1
  107. package/vscode/src/vs/workbench/api/browser/mainThreadSCM.d.ts +1 -1
  108. package/vscode/src/vs/workbench/api/browser/mainThreadSCM.js +8 -8
  109. package/vscode/src/vs/workbench/api/browser/mainThreadSaveParticipant.d.ts +1 -1
  110. package/vscode/src/vs/workbench/api/browser/mainThreadSaveParticipant.js +2 -2
  111. package/vscode/src/vs/workbench/api/browser/mainThreadSearch.d.ts +1 -1
  112. package/vscode/src/vs/workbench/api/browser/mainThreadSearch.js +1 -1
  113. package/vscode/src/vs/workbench/api/browser/mainThreadSecretState.d.ts +1 -1
  114. package/vscode/src/vs/workbench/api/browser/mainThreadSecretState.js +3 -3
  115. package/vscode/src/vs/workbench/api/browser/mainThreadShare.d.ts +1 -1
  116. package/vscode/src/vs/workbench/api/browser/mainThreadShare.js +1 -1
  117. package/vscode/src/vs/workbench/api/browser/mainThreadSpeech.d.ts +1 -1
  118. package/vscode/src/vs/workbench/api/browser/mainThreadSpeech.js +1 -1
  119. package/vscode/src/vs/workbench/api/browser/mainThreadStatusBar.d.ts +1 -1
  120. package/vscode/src/vs/workbench/api/browser/mainThreadStatusBar.js +1 -1
  121. package/vscode/src/vs/workbench/api/browser/mainThreadStorage.d.ts +1 -1
  122. package/vscode/src/vs/workbench/api/browser/mainThreadStorage.js +1 -1
  123. package/vscode/src/vs/workbench/api/browser/mainThreadTask.d.ts +1 -1
  124. package/vscode/src/vs/workbench/api/browser/mainThreadTask.js +3 -3
  125. package/vscode/src/vs/workbench/api/browser/mainThreadTelemetry.d.ts +1 -1
  126. package/vscode/src/vs/workbench/api/browser/mainThreadTelemetry.js +1 -1
  127. package/vscode/src/vs/workbench/api/browser/mainThreadTerminalService.d.ts +2 -2
  128. package/vscode/src/vs/workbench/api/browser/mainThreadTerminalService.js +6 -6
  129. package/vscode/src/vs/workbench/api/browser/mainThreadTerminalShellIntegration.d.ts +1 -1
  130. package/vscode/src/vs/workbench/api/browser/mainThreadTerminalShellIntegration.js +2 -2
  131. package/vscode/src/vs/workbench/api/browser/mainThreadTesting.d.ts +1 -1
  132. package/vscode/src/vs/workbench/api/browser/mainThreadTesting.js +13 -7
  133. package/vscode/src/vs/workbench/api/browser/mainThreadTheming.d.ts +1 -1
  134. package/vscode/src/vs/workbench/api/browser/mainThreadTheming.js +1 -1
  135. package/vscode/src/vs/workbench/api/browser/mainThreadTimeline.d.ts +1 -1
  136. package/vscode/src/vs/workbench/api/browser/mainThreadTimeline.js +1 -1
  137. package/vscode/src/vs/workbench/api/browser/mainThreadTreeViews.d.ts +1 -1
  138. package/vscode/src/vs/workbench/api/browser/mainThreadTreeViews.js +14 -9
  139. package/vscode/src/vs/workbench/api/browser/mainThreadTunnelService.d.ts +1 -1
  140. package/vscode/src/vs/workbench/api/browser/mainThreadTunnelService.js +7 -7
  141. package/vscode/src/vs/workbench/api/browser/mainThreadUriOpeners.d.ts +1 -1
  142. package/vscode/src/vs/workbench/api/browser/mainThreadUriOpeners.js +3 -3
  143. package/vscode/src/vs/workbench/api/browser/mainThreadUrls.d.ts +1 -1
  144. package/vscode/src/vs/workbench/api/browser/mainThreadUrls.js +1 -1
  145. package/vscode/src/vs/workbench/api/browser/mainThreadWebviewManager.d.ts +1 -1
  146. package/vscode/src/vs/workbench/api/browser/mainThreadWebviewManager.js +1 -1
  147. package/vscode/src/vs/workbench/api/browser/mainThreadWebviewPanels.d.ts +1 -1
  148. package/vscode/src/vs/workbench/api/browser/mainThreadWebviewViews.d.ts +1 -1
  149. package/vscode/src/vs/workbench/api/browser/mainThreadWebviews.d.ts +1 -1
  150. package/vscode/src/vs/workbench/api/browser/mainThreadWebviews.js +2 -2
  151. package/vscode/src/vs/workbench/api/browser/mainThreadWindow.d.ts +1 -1
  152. package/vscode/src/vs/workbench/api/browser/mainThreadWindow.js +1 -1
  153. package/vscode/src/vs/workbench/api/browser/mainThreadWorkspace.d.ts +1 -1
  154. package/vscode/src/vs/workbench/api/browser/mainThreadWorkspace.js +15 -13
  155. package/vscode/src/vs/workbench/contrib/customEditor/common/customTextEditorModel.js +1 -1
  156. package/vscode/src/vs/workbench/services/extensionManagement/browser/extensionBisect.js +25 -25
  157. package/vscode/src/vs/workbench/services/extensionManagement/browser/webExtensionsScannerService.js +37 -32
  158. package/vscode/src/vs/workbench/services/extensions/browser/extensionService.js +18 -10
  159. package/vscode/src/vs/workbench/services/extensions/common/abstractExtensionService.js +55 -45
  160. package/vscode/src/vs/workbench/services/extensions/common/extensionHostManager.js +5 -5
  161. package/vscode/src/vs/workbench/services/extensions/common/extensionRunningLocationTracker.js +3 -1
  162. package/vscode/src/vs/workbench/services/extensions/common/extensionsProposedApi.js +4 -2
  163. package/vscode/src/vs/workbench/services/extensions/common/extensionsUtil.js +4 -4
  164. package/vscode/src/vs/workbench/services/extensions/common/lazyCreateExtensionHostManager.js +4 -2
  165. package/vscode/src/vs/workbench/services/themes/browser/cssExtensionPoint.js +5 -5
  166. package/vscode/src/vs/workbench/api/browser/mainThreadChatAgents2.d.ts +0 -104
  167. package/vscode/src/vs/workbench/api/browser/mainThreadChatAgents2.js +0 -827
  168. package/vscode/src/vs/workbench/api/browser/mainThreadChatCodeMapper.d.ts +0 -15
  169. package/vscode/src/vs/workbench/api/browser/mainThreadChatCodeMapper.js +0 -71
  170. package/vscode/src/vs/workbench/api/browser/mainThreadChatContext.d.ts +0 -16
  171. package/vscode/src/vs/workbench/api/browser/mainThreadChatContext.js +0 -95
  172. package/vscode/src/vs/workbench/api/browser/mainThreadChatDebug.d.ts +0 -22
  173. package/vscode/src/vs/workbench/api/browser/mainThreadChatDebug.js +0 -286
  174. package/vscode/src/vs/workbench/api/browser/mainThreadChatInputNotification.d.ts +0 -10
  175. package/vscode/src/vs/workbench/api/browser/mainThreadChatInputNotification.js +0 -38
  176. package/vscode/src/vs/workbench/api/browser/mainThreadChatQuota.d.ts +0 -9
  177. package/vscode/src/vs/workbench/api/browser/mainThreadChatQuota.js +0 -22
  178. package/vscode/src/vs/workbench/api/browser/mainThreadChatSessions.d.ts +0 -130
  179. package/vscode/src/vs/workbench/api/browser/mainThreadChatSessions.js +0 -907
  180. package/vscode/src/vs/workbench/api/browser/mainThreadChatStatus.d.ts +0 -10
  181. package/vscode/src/vs/workbench/api/browser/mainThreadChatStatus.js +0 -28
  182. package/vscode/src/vs/workbench/api/browser/mainThreadDocuments.d.ts +0 -63
  183. package/vscode/src/vs/workbench/api/browser/mainThreadDocuments.js +0 -305
  184. package/vscode/src/vs/workbench/api/browser/mainThreadLanguageModelTools.d.ts +0 -27
  185. package/vscode/src/vs/workbench/api/browser/mainThreadLanguageModelTools.js +0 -167
  186. package/vscode/src/vs/workbench/api/browser/mainThreadLanguageModels.d.ts +0 -46
  187. package/vscode/src/vs/workbench/api/browser/mainThreadLanguageModels.js +0 -356
  188. package/vscode/src/vs/workbench/api/browser/mainThreadMcp.d.ts +0 -108
  189. package/vscode/src/vs/workbench/api/browser/mainThreadMcp.js +0 -698
  190. package/vscode/src/vs/workbench/api/browser/mainThreadNotebook.d.ts +0 -22
  191. package/vscode/src/vs/workbench/api/browser/mainThreadNotebook.js +0 -210
  192. package/vscode/src/vs/workbench/api/browser/mainThreadNotebookDocuments.d.ts +0 -24
  193. package/vscode/src/vs/workbench/api/browser/mainThreadNotebookDocuments.js +0 -138
  194. package/vscode/src/vs/workbench/api/browser/mainThreadNotebookDocumentsAndEditors.d.ts +0 -29
  195. package/vscode/src/vs/workbench/api/browser/mainThreadNotebookDocumentsAndEditors.js +0 -194
  196. package/vscode/src/vs/workbench/api/browser/mainThreadNotebookDto.d.ts +0 -17
  197. package/vscode/src/vs/workbench/api/browser/mainThreadNotebookDto.js +0 -128
  198. package/vscode/src/vs/workbench/api/browser/mainThreadNotebookEditors.d.ts +0 -27
  199. package/vscode/src/vs/workbench/api/browser/mainThreadNotebookEditors.js +0 -149
  200. package/vscode/src/vs/workbench/api/browser/mainThreadNotebookKernels.d.ts +0 -49
  201. package/vscode/src/vs/workbench/api/browser/mainThreadNotebookKernels.js +0 -372
  202. package/vscode/src/vs/workbench/api/browser/mainThreadNotebookRenderers.d.ts +0 -10
  203. package/vscode/src/vs/workbench/api/browser/mainThreadNotebookRenderers.js +0 -26
  204. package/vscode/src/vs/workbench/api/browser/mainThreadNotebookSaveParticipant.d.ts +0 -9
  205. package/vscode/src/vs/workbench/api/browser/mainThreadNotebookSaveParticipant.js +0 -43
  206. package/vscode/src/vs/workbench/services/extensions/common/extHostCustomers.d.ts +0 -32
  207. package/vscode/src/vs/workbench/services/extensions/common/extHostCustomers.js +0 -45
@@ -1,907 +0,0 @@
1
-
2
- import { __decorate, __param } from '@codingame/monaco-vscode-api/external/tslib/tslib.es6';
3
- import { raceCancellationError } from '@codingame/monaco-vscode-api/vscode/vs/base/common/async';
4
- import { CancellationToken } from '@codingame/monaco-vscode-api/vscode/vs/base/common/cancellation';
5
- import { isCancellationError } from '@codingame/monaco-vscode-api/vscode/vs/base/common/errors';
6
- import { Emitter } from '@codingame/monaco-vscode-api/vscode/vs/base/common/event';
7
- import { markdownStringEqual, MarkdownString } from '@codingame/monaco-vscode-api/vscode/vs/base/common/htmlContent';
8
- import { Disposable, DisposableResourceMap, DisposableMap, DisposableStore } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
9
- import { ResourceMap } from '@codingame/monaco-vscode-api/vscode/vs/base/common/map';
10
- import { revive } from '@codingame/monaco-vscode-api/vscode/vs/base/common/marshalling';
11
- import { equals } from '@codingame/monaco-vscode-api/vscode/vs/base/common/objects';
12
- import '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/index';
13
- import { isEqual } from '@codingame/monaco-vscode-api/vscode/vs/base/common/resources';
14
- import { URI } from '@codingame/monaco-vscode-api/vscode/vs/base/common/uri';
15
- import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
16
- import { IDialogService } from '@codingame/monaco-vscode-api/vscode/vs/platform/dialogs/common/dialogs.service';
17
- import { IInstantiationService } from '@codingame/monaco-vscode-api/vscode/vs/platform/instantiation/common/instantiation';
18
- import { ILogService } from '@codingame/monaco-vscode-api/vscode/vs/platform/log/common/log.service';
19
- import { hasValidDiff } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsModel';
20
- import { IAgentSessionsService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsService.service';
21
- import { isIChatViewViewContext } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/chat';
22
- import { IChatWidgetService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/chat.service';
23
- import { getInProgressSessionDescription } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/chatSessions/chatSessionDescription';
24
- import { getSessionStatusForModel } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/chatSessions/chatSessions.contribution';
25
- import { ChatEditorInput } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/widgetHosts/editor/chatEditorInput';
26
- import { IChatDebugService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/chatDebugService.service';
27
- import { IChatService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/chatService/chatService.service';
28
- import { ChatSessionOptionsMap } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/chatSessionsService';
29
- import { IChatSessionsService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/chatSessionsService.service';
30
- import { ChatAgentLocation } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/constants';
31
- import { getChatSessionType } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/model/chatUri';
32
- import { IChatArtifactsService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/tools/chatArtifactsService.service';
33
- import { IChatTodoListService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/tools/chatTodoListService.service';
34
- import { IEditorGroupsService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/editor/common/editorGroupsService.service';
35
- import { IEditorService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/editor/common/editorService.service';
36
- import { extHostNamedCustomer } from '../../services/extensions/common/extHostCustomers.js';
37
- import { ExtHostContext, MainContext } from '@codingame/monaco-vscode-api/vscode/vs/workbench/api/common/extHost.protocol';
38
- import { observableValue } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/observables/observableValue';
39
- import { autorun } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/reactions/autorun';
40
- import { observableSignalFromEvent } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/observables/observableSignalFromEvent';
41
-
42
- function stringOrMarkdownEqual(a, b) {
43
- if (a === b) {
44
- return true;
45
- }
46
- if (!a || !b) {
47
- return false;
48
- }
49
- if (typeof a === "string" || typeof b === "string") {
50
- return false;
51
- }
52
- return markdownStringEqual(a, b);
53
- }
54
- class ObservableChatSession extends Disposable {
55
- get options() {
56
- return this._options ? ( new Map(this._options)) : undefined;
57
- }
58
- get progressObs() {
59
- return this._progressObservable;
60
- }
61
- get isCompleteObs() {
62
- return this._isCompleteObservable;
63
- }
64
- constructor(resource, providerHandle, proxy, logService, dialogService) {
65
- super();
66
- this._progressObservable = observableValue(this, []);
67
- this._isCompleteObservable = observableValue(this, false);
68
- this._onWillDispose = ( new Emitter());
69
- this.onWillDispose = this._onWillDispose.event;
70
- this._pendingProgressChunks = ( new Map());
71
- this._isInitialized = false;
72
- this._interruptionWasCanceled = false;
73
- this._disposalPending = false;
74
- this._inFlightRequestCount = 0;
75
- this.sessionResource = resource;
76
- this.providerHandle = providerHandle;
77
- this.history = [];
78
- this._proxy = proxy;
79
- this._providerHandle = providerHandle;
80
- this._logService = logService;
81
- this._dialogService = dialogService;
82
- }
83
- initialize(token, context) {
84
- if (!this._initializationPromise) {
85
- this._initializationPromise = this._doInitializeContent(token, context);
86
- }
87
- return this._initializationPromise;
88
- }
89
- async _doInitializeContent(token, context) {
90
- try {
91
- const sessionContent = await raceCancellationError(
92
- this._proxy.$provideChatSessionContent(this._providerHandle, this.sessionResource, context, token),
93
- token
94
- );
95
- this._options = sessionContent.options ? ChatSessionOptionsMap.fromRecord(sessionContent.options) : undefined;
96
- this.title = sessionContent.title;
97
- this.history.length = 0;
98
- this.history.push(...( sessionContent.history.map(turn => {
99
- if (turn.type === "request") {
100
- const variables = turn.variableData?.variables.map(v => {
101
- const entry = {
102
- ...v,
103
- value: revive(v.value)
104
- };
105
- return entry;
106
- });
107
- return {
108
- type: "request",
109
- prompt: turn.prompt,
110
- participant: turn.participant,
111
- command: turn.command,
112
- variableData: variables ? {
113
- variables
114
- } : undefined,
115
- id: turn.id,
116
- modelId: turn.modelId,
117
- modeInstructions: turn.modeInstructions ? revive(turn.modeInstructions) : undefined
118
- };
119
- }
120
- return {
121
- type: "response",
122
- parts: ( turn.parts.map(part => revive(part))),
123
- participant: turn.participant,
124
- details: turn.details
125
- };
126
- })));
127
- if (sessionContent.hasActiveResponseCallback && !this.interruptActiveResponseCallback) {
128
- this.interruptActiveResponseCallback = async () => {
129
- const confirmInterrupt = () => {
130
- if (this._disposalPending) {
131
- this._proxy.$disposeChatSessionContent(this._providerHandle, this.sessionResource);
132
- this._disposalPending = false;
133
- }
134
- this._proxy.$interruptChatSessionActiveResponse(this._providerHandle, this.sessionResource, "ongoing");
135
- return true;
136
- };
137
- if (sessionContent.supportsInterruption) {
138
- return confirmInterrupt();
139
- }
140
- return this._dialogService.confirm({
141
- message: ( localize(2973, "Are you sure you want to interrupt the active session?"))
142
- }).then(confirmed => {
143
- if (confirmed.confirmed) {
144
- return confirmInterrupt();
145
- } else {
146
- this._addProgress([{
147
- kind: "progressMessage",
148
- content: {
149
- value: "",
150
- isTrusted: false
151
- }
152
- }]);
153
- this._interruptionWasCanceled = true;
154
- if (this._disposalPending) {
155
- this._logService.info(
156
- `Canceling deferred disposal for session ${this.sessionResource} (user canceled interruption)`
157
- );
158
- this._disposalPending = false;
159
- }
160
- return false;
161
- }
162
- });
163
- };
164
- }
165
- if (sessionContent.hasRequestHandler && !this.requestHandler) {
166
- this.requestHandler = async (request, progress, history, token) => {
167
- this._inFlightRequestCount++;
168
- this._progressObservable.set([], undefined);
169
- this._isCompleteObservable.set(false, undefined);
170
- let lastProgressLength = 0;
171
- const progressDisposable = autorun(reader => {
172
- const progressArray = this._progressObservable.read(reader);
173
- const isComplete = this._isCompleteObservable.read(reader);
174
- if (progressArray.length > lastProgressLength) {
175
- const newProgress = progressArray.slice(lastProgressLength);
176
- progress(newProgress);
177
- lastProgressLength = progressArray.length;
178
- }
179
- if (isComplete) {
180
- progressDisposable.dispose();
181
- }
182
- });
183
- try {
184
- await this._proxy.$invokeChatSessionRequestHandler(this._providerHandle, this.sessionResource, request, history, token);
185
- if (!this._isCompleteObservable.get() && !this.interruptActiveResponseCallback) {
186
- this._markComplete();
187
- }
188
- } catch (error) {
189
- const errorProgress = {
190
- kind: "progressMessage",
191
- content: {
192
- value: `Error: ${error instanceof Error ? error.message : String(error)}`,
193
- isTrusted: false
194
- }
195
- };
196
- this._addProgress([errorProgress]);
197
- this._markComplete();
198
- throw error;
199
- } finally {
200
- progressDisposable.dispose();
201
- this._inFlightRequestCount--;
202
- if (this._disposalPending && this._inFlightRequestCount === 0 && !this.interruptActiveResponseCallback) {
203
- this._disposalPending = false;
204
- this._proxy.$disposeChatSessionContent(this._providerHandle, this.sessionResource);
205
- }
206
- }
207
- };
208
- }
209
- if (sessionContent.hasForkHandler && !this.forkSession) {
210
- this.forkSession = async (request, token) => {
211
- const result = await this._proxy.$forkChatSession(
212
- this._providerHandle,
213
- this.sessionResource,
214
- request ? this.toRequestDto(request) : undefined,
215
- token
216
- );
217
- return revive(result);
218
- };
219
- }
220
- this._isInitialized = true;
221
- const hasActiveResponse = sessionContent.hasActiveResponseCallback;
222
- const hasRequestHandler = sessionContent.hasRequestHandler;
223
- const hasAnyCapability = hasActiveResponse || hasRequestHandler;
224
- for (const [requestId, chunks] of this._pendingProgressChunks) {
225
- this._logService.debug(
226
- `Processing ${chunks.length} pending progress chunks for session ${this.sessionResource}, requestId ${requestId}`
227
- );
228
- this._addProgress(chunks);
229
- }
230
- this._pendingProgressChunks.clear();
231
- if (!hasAnyCapability) {
232
- this._isCompleteObservable.set(true, undefined);
233
- }
234
- } catch (error) {
235
- this._logService.error(`Failed to initialize chat session ${this.sessionResource}:`, error);
236
- throw error;
237
- }
238
- }
239
- handleProgressChunk(requestId, progress) {
240
- if (!this._isInitialized) {
241
- const existing = this._pendingProgressChunks.get(requestId) || [];
242
- this._pendingProgressChunks.set(requestId, [...existing, ...progress]);
243
- this._logService.debug(
244
- `Queuing ${progress.length} progress chunks for session ${this.sessionResource}, requestId ${requestId} (session not initialized)`
245
- );
246
- return;
247
- }
248
- this._addProgress(progress);
249
- }
250
- handleProgressComplete(requestId) {
251
- this._pendingProgressChunks.delete(requestId);
252
- if (this._isInitialized) {
253
- if (!this._interruptionWasCanceled) {
254
- this._markComplete();
255
- } else {
256
- this._interruptionWasCanceled = false;
257
- }
258
- }
259
- }
260
- _addProgress(progress) {
261
- const currentProgress = this._progressObservable.get();
262
- this._progressObservable.set([...currentProgress, ...progress], undefined);
263
- }
264
- _markComplete() {
265
- if (!this._isCompleteObservable.get()) {
266
- this._isCompleteObservable.set(true, undefined);
267
- }
268
- }
269
- toRequestDto(request) {
270
- return {
271
- type: "request",
272
- id: request.id,
273
- prompt: request.prompt,
274
- participant: request.participant,
275
- command: request.command,
276
- variableData: undefined,
277
- modelId: request.modelId,
278
- modeInstructions: request.modeInstructions
279
- };
280
- }
281
- dispose() {
282
- this._onWillDispose.fire();
283
- this._onWillDispose.dispose();
284
- this._pendingProgressChunks.clear();
285
- if (this.interruptActiveResponseCallback && !this._interruptionWasCanceled) {
286
- this._disposalPending = true;
287
- } else if (this._inFlightRequestCount > 0) {
288
- this._disposalPending = true;
289
- } else {
290
- this._proxy.$disposeChatSessionContent(this._providerHandle, this.sessionResource);
291
- }
292
- super.dispose();
293
- }
294
- }
295
- let MainThreadChatSessionItemController = class MainThreadChatSessionItemController extends Disposable {
296
- constructor(proxy, chatSessionType, handle, supportsResolve, _chatService) {
297
- super();
298
- this._chatService = _chatService;
299
- this._onDidChangeChatSessionItems = this._register(( new Emitter()));
300
- this.onDidChangeChatSessionItems = this._onDidChangeChatSessionItems.event;
301
- this._modelListeners = this._register(( new DisposableResourceMap()));
302
- this._resolveCache = ( new ResourceMap());
303
- this._resolving = ( new ResourceMap());
304
- this._isDisposed = false;
305
- this._items = ( new ResourceMap());
306
- this._proxy = proxy;
307
- this._handle = handle;
308
- this._supportsResolve = supportsResolve;
309
- const addModelListeners = async model => {
310
- if (getChatSessionType(model.sessionResource) !== chatSessionType) {
311
- return;
312
- }
313
- await this.refresh(CancellationToken.None);
314
- if (this._isDisposed) {
315
- return;
316
- }
317
- this.tryUpdateItemForModel(model);
318
- const requestChangeListener = ( model.lastRequestObs.map(
319
- last => last?.response && observableSignalFromEvent("chatSessions.modelRequestChangeListener", last.response.onDidChange)
320
- ));
321
- const modelChangeListener = observableSignalFromEvent("chatSessions.modelChangeListener", model.onDidChange);
322
- this._modelListeners.set(model.sessionResource, autorun(reader => {
323
- requestChangeListener.read(reader)?.read(reader);
324
- modelChangeListener.read(reader);
325
- this.tryUpdateItemForModel(model);
326
- }));
327
- };
328
- this._register(_chatService.onDidCreateModel(model => addModelListeners(model)));
329
- for (const model of _chatService.chatModels.get()) {
330
- addModelListeners(model);
331
- }
332
- this._register(_chatService.onDidDisposeSession(e => {
333
- for (const sessionResource of e.sessionResources) {
334
- this._modelListeners.deleteAndDispose(sessionResource);
335
- }
336
- }));
337
- }
338
- dispose() {
339
- this._isDisposed = true;
340
- this._resolveCache.clear();
341
- super.dispose();
342
- }
343
- get items() {
344
- return Array.from(( this._items.values()));
345
- }
346
- refresh(token) {
347
- return this._proxy.$refreshChatSessionItems(this._handle, token);
348
- }
349
- async newChatSessionItem(request, token) {
350
- const dto = await raceCancellationError(this._proxy.$newChatSessionItem(this._handle, {
351
- prompt: request.prompt,
352
- command: request.command,
353
- initialSessionOptions: request.initialSessionOptions ? ChatSessionOptionsMap.toStrValueArray(request.initialSessionOptions) : undefined
354
- }, token), token);
355
- if (!dto) {
356
- return undefined;
357
- }
358
- const item = this.addOrUpdateItem(dto);
359
- return item;
360
- }
361
- async acceptChange(change) {
362
- const addedOrUpdatedItems = [];
363
- for (const item of change.addedOrUpdated) {
364
- const resource = URI.revive(item.resource);
365
- if (!( this._resolving.has(resource))) {
366
- this._resolveCache.delete(resource);
367
- }
368
- addedOrUpdatedItems.push(await this.addOrUpdateItem(item));
369
- }
370
- for (const uri of change.removed) {
371
- this._resolveCache.delete(uri);
372
- this._items.delete(uri);
373
- }
374
- this._onDidChangeChatSessionItems.fire({
375
- addedOrUpdated: addedOrUpdatedItems,
376
- removed: change.removed
377
- });
378
- }
379
- async addOrUpdateItem(dto) {
380
- const resource = URI.revive(dto.resource);
381
- const existing = this._items.get(resource);
382
- const updated = ( new MainThreadChatSessionItem(
383
- dto,
384
- this._chatService.getSession(resource),
385
- await this._chatService.getMetadataForSession(resource)
386
- ));
387
- if (existing?.isEqual(updated)) {
388
- return existing;
389
- }
390
- if (existing && existing.label !== updated.label && this._chatService.getSession(resource)) {
391
- this._chatService.setSessionTitle(resource, updated.label);
392
- }
393
- this._items.set(resource, updated);
394
- this._onDidChangeChatSessionItems.fire({
395
- addedOrUpdated: [updated]
396
- });
397
- return updated;
398
- }
399
- async tryUpdateItemForModel(model) {
400
- const resource = model.sessionResource;
401
- const existing = this._items.get(resource);
402
- if (existing) {
403
- this.addOrUpdateItem(existing);
404
- }
405
- }
406
- async getNewChatSessionInputState(sessionResource, token) {
407
- const optionGroups = await this._proxy.$provideChatSessionInputState(this._handle, sessionResource, token);
408
- if (!optionGroups?.length) {
409
- return undefined;
410
- }
411
- return optionGroups;
412
- }
413
- async resolveChatSessionItem(resource, token) {
414
- if (!this._supportsResolve) {
415
- return undefined;
416
- }
417
- const cached = this._resolveCache.get(resource);
418
- if (cached) {
419
- return cached;
420
- }
421
- const promise = this._doResolveItem(resource, token).catch(err => {
422
- this._resolveCache.delete(resource);
423
- throw err;
424
- });
425
- this._resolveCache.set(resource, promise);
426
- return promise;
427
- }
428
- async _doResolveItem(resource, token) {
429
- const expectedItem = this._items.get(resource);
430
- this._resolving.set(resource, true);
431
- let dto;
432
- try {
433
- dto = await raceCancellationError(this._proxy.$resolveChatSessionItem(this._handle, resource, token), token);
434
- } finally {
435
- this._resolving.delete(resource);
436
- }
437
- if (!dto) {
438
- return undefined;
439
- }
440
- if (this._items.get(resource) !== expectedItem) {
441
- return this._items.get(resource);
442
- }
443
- const updated = ( new MainThreadChatSessionItem(
444
- dto,
445
- this._chatService.getSession(resource),
446
- await this._chatService.getMetadataForSession(resource)
447
- ));
448
- if (this._items.get(resource) !== expectedItem) {
449
- return this._items.get(resource);
450
- }
451
- if (expectedItem?.isEqual(updated)) {
452
- return expectedItem;
453
- }
454
- this._items.set(resource, updated);
455
- this._onDidChangeChatSessionItems.fire({
456
- addedOrUpdated: [updated]
457
- });
458
- return updated;
459
- }
460
- setSupportsResolve(supportsResolve) {
461
- if (this._supportsResolve === supportsResolve) {
462
- return;
463
- }
464
- this._supportsResolve = supportsResolve;
465
- if (supportsResolve) {
466
- this._resolveCache.clear();
467
- }
468
- }
469
- };
470
- MainThreadChatSessionItemController = ( __decorate([( __param(4, IChatService))], MainThreadChatSessionItemController));
471
- class MainThreadChatSessionItem {
472
- constructor(dto, model, detailOverrides) {
473
- this.resource = URI.revive(dto.resource);
474
- this.label = dto.label;
475
- this.timing = dto.timing;
476
- this.iconPath = dto.iconPath;
477
- this.badge = reviveMarkdownString(dto.badge);
478
- this.tooltip = reviveMarkdownString(dto.tooltip);
479
- this.archived = dto.archived;
480
- this.metadata = dto.metadata;
481
- this.legacyResource = dto.legacyResource ? URI.revive(dto.legacyResource) : undefined;
482
- this.description = (model && getInProgressSessionDescription(model)) ?? reviveMarkdownString(dto.description);
483
- this.status = (model && getSessionStatusForModel(model)) ?? dto.status;
484
- this.changes = revive(dto.changes);
485
- if (detailOverrides && !this.changes) {
486
- const diffs = {
487
- files: detailOverrides.stats?.fileCount || 0,
488
- insertions: detailOverrides.stats?.added || 0,
489
- deletions: detailOverrides.stats?.removed || 0
490
- };
491
- if (hasValidDiff(diffs)) {
492
- this.changes = diffs;
493
- }
494
- }
495
- }
496
- isEqual(other) {
497
- return isEqual(this.resource, other.resource) && this.label === other.label && this.description === other.description && this.status === other.status && this.timing.created === other.timing.created && this.timing.lastRequestStarted === other.timing.lastRequestStarted && this.timing.lastRequestEnded === other.timing.lastRequestEnded && equals(this.changes, other.changes) && equals(this.iconPath, other.iconPath) && stringOrMarkdownEqual(this.badge, other.badge) && stringOrMarkdownEqual(this.tooltip, other.tooltip) && this.archived === other.archived && equals(this.metadata, other.metadata) && isEqual(this.legacyResource, other.legacyResource);
498
- }
499
- }
500
- let MainThreadChatSessions = class MainThreadChatSessions extends Disposable {
501
- constructor(
502
- _extHostContext,
503
- _agentSessionsService,
504
- _chatSessionsService,
505
- _chatService,
506
- _chatWidgetService,
507
- _chatTodoListService,
508
- _chatArtifactsService,
509
- _chatDebugService,
510
- _dialogService,
511
- _editorService,
512
- editorGroupService,
513
- _logService,
514
- _instantiationService
515
- ) {
516
- super();
517
- this._extHostContext = _extHostContext;
518
- this._agentSessionsService = _agentSessionsService;
519
- this._chatSessionsService = _chatSessionsService;
520
- this._chatService = _chatService;
521
- this._chatWidgetService = _chatWidgetService;
522
- this._chatTodoListService = _chatTodoListService;
523
- this._chatArtifactsService = _chatArtifactsService;
524
- this._chatDebugService = _chatDebugService;
525
- this._dialogService = _dialogService;
526
- this._editorService = _editorService;
527
- this.editorGroupService = editorGroupService;
528
- this._logService = _logService;
529
- this._instantiationService = _instantiationService;
530
- this._itemControllerRegistrations = this._register(( new DisposableMap()));
531
- this._contentProvidersRegistrations = this._register(( new DisposableMap()));
532
- this._sessionTypeToHandle = ( new Map());
533
- this._activeSessions = ( new ResourceMap());
534
- this._sessionDisposables = ( new ResourceMap());
535
- this._proxy = ( this._extHostContext.getProxy(ExtHostContext.ExtHostChatSessions));
536
- this._register(this._chatSessionsService.onDidChangeSessionOptions((
537
- {
538
- sessionResource,
539
- updates
540
- }
541
- ) => {
542
- const sessionType = getChatSessionType(sessionResource);
543
- const handle = this._getHandleForSessionType(sessionType);
544
- this._logService.trace(
545
- `[MainThreadChatSessions] onRequestNotifyExtension received: sessionType '${sessionType}', handle ${handle}, ${updates.size} update(s)`
546
- );
547
- if (handle !== undefined) {
548
- this.notifyOptionsChange(handle, sessionResource, updates);
549
- } else {
550
- this._logService.warn(
551
- `[MainThreadChatSessions] Cannot notify option change for sessionType '${sessionType}': no provider registered. Registered types: [${Array.from(( this._sessionTypeToHandle.keys())).join(", ")}]`
552
- );
553
- }
554
- }));
555
- this._register(
556
- this._agentSessionsService.model.onDidChangeSessionArchivedState(session => {
557
- for (const [handle, {
558
- chatSessionType
559
- }] of this._itemControllerRegistrations) {
560
- if (chatSessionType === session.providerType) {
561
- this._proxy.$onDidChangeChatSessionItemState(handle, session.resource, session.isArchived());
562
- }
563
- }
564
- })
565
- );
566
- }
567
- _getHandleForSessionType(chatSessionType) {
568
- return this._sessionTypeToHandle.get(chatSessionType);
569
- }
570
- $registerChatSessionItemController(handle, chatSessionType, supportsResolve) {
571
- const disposables = ( new DisposableStore());
572
- const controller = disposables.add(this._instantiationService.createInstance(
573
- MainThreadChatSessionItemController,
574
- this._proxy,
575
- chatSessionType,
576
- handle,
577
- supportsResolve
578
- ));
579
- disposables.add(
580
- this._chatSessionsService.registerChatSessionItemController(chatSessionType, controller)
581
- );
582
- this._itemControllerRegistrations.set(handle, {
583
- chatSessionType,
584
- controller,
585
- dispose: () => disposables.dispose()
586
- });
587
- this._refreshControllerInputState(handle, chatSessionType);
588
- }
589
- $updateChatSessionItemControllerCapabilities(handle, supportsResolve) {
590
- const registration = this._itemControllerRegistrations.get(handle);
591
- if (!registration) {
592
- this._logService.warn(`No chat session item controller found for handle ${handle}`);
593
- return;
594
- }
595
- registration.controller.setSupportsResolve(supportsResolve);
596
- }
597
- _refreshControllerInputState(handle, chatSessionType) {
598
- this._proxy.$provideChatSessionInputState(handle, undefined, CancellationToken.None).then(optionGroups => {
599
- if (optionGroups?.length) {
600
- this._applyOptionGroups(handle, chatSessionType, undefined, optionGroups);
601
- }
602
- }).catch(
603
- err => this._logService.error("Error fetching chat session input state", err)
604
- );
605
- }
606
- _applyOptionGroups(handle, chatSessionType, sessionResourceComponents, optionGroups) {
607
- this._chatSessionsService.setOptionGroupsForSessionType(chatSessionType, handle, optionGroups);
608
- if (sessionResourceComponents) {
609
- const sessionResource = URI.revive(sessionResourceComponents);
610
- optionGroups.forEach(group => {
611
- if (group.selected) {
612
- this._chatSessionsService.setSessionOption(sessionResource, group.id, group.selected);
613
- }
614
- });
615
- }
616
- }
617
- getController(handle) {
618
- const registration = this._itemControllerRegistrations.get(handle);
619
- if (!registration) {
620
- throw ( new Error(`No chat session controller registered for handle ${handle}`));
621
- }
622
- return registration.controller;
623
- }
624
- async $updateChatSessionItems(controllerHandle, change) {
625
- const controller = this.getController(controllerHandle);
626
- controller.acceptChange({
627
- addedOrUpdated: change.addedOrUpdated,
628
- removed: ( change.removed.map(uri => URI.revive(uri)))
629
- });
630
- }
631
- async $addOrUpdateChatSessionItem(controllerHandle, item) {
632
- const controller = this.getController(controllerHandle);
633
- controller.acceptChange({
634
- addedOrUpdated: [item],
635
- removed: []
636
- });
637
- }
638
- $onDidChangeChatSessionOptions(handle, sessionResourceComponents, updates) {
639
- const sessionResource = URI.revive(sessionResourceComponents);
640
- this._chatSessionsService.updateSessionOptions(sessionResource, ChatSessionOptionsMap.fromRecord(updates));
641
- }
642
- async $onDidCommitChatSessionItem(handle, originalComponents, modifiedCompoennts) {
643
- const originalResource = URI.revive(originalComponents);
644
- const modifiedResource = URI.revive(modifiedCompoennts);
645
- this._logService.trace(
646
- `$onDidCommitChatSessionItem: handle(${handle}), original(${originalResource}), modified(${modifiedResource})`
647
- );
648
- const chatSessionType = this._itemControllerRegistrations.get(handle)?.chatSessionType;
649
- if (!chatSessionType) {
650
- this._logService.error(`No chat session type found for provider handle ${handle}`);
651
- return;
652
- }
653
- const originalEditor = this._editorService.editors.find(editor => editor.resource?.toString() === ( originalResource.toString()));
654
- const originalModel = this._chatService.acquireExistingSession(originalResource);
655
- const contribution = this._chatSessionsService.getAllChatSessionContributions().find(c => c.type === chatSessionType);
656
- try {
657
- this._chatTodoListService.migrateTodos(originalResource, modifiedResource);
658
- this._chatArtifactsService.getArtifacts(originalResource).migrate(this._chatArtifactsService.getArtifacts(modifiedResource));
659
- if (chatSessionType === "copilotcli") {
660
- this._chatDebugService.invokeProviders(modifiedResource).catch(() => {});
661
- }
662
- const originalGroup = this.editorGroupService.groups.find(group => ( group.editors.some(editor => isEqual(editor.resource, originalResource)))) ?? this.editorGroupService.activeGroup;
663
- const options = {
664
- title: {
665
- preferred: originalEditor?.getName() || undefined,
666
- fallback: ( localize(2974, "{0}", contribution?.displayName))
667
- }
668
- };
669
- const newSession = await this._chatSessionsService.getOrCreateChatSession(URI.revive(modifiedResource), CancellationToken.None);
670
- if (originalEditor) {
671
- newSession.transferredState = originalEditor instanceof ChatEditorInput ? {
672
- editingSession: originalEditor.transferOutEditingSession(),
673
- inputState: originalModel?.object?.inputModel.toJSON()
674
- } : undefined;
675
- await this._editorService.replaceEditors([{
676
- editor: originalEditor,
677
- replacement: {
678
- resource: modifiedResource,
679
- options
680
- }
681
- }], originalGroup);
682
- this._resendPendingRequests(originalResource, modifiedResource);
683
- return;
684
- }
685
- if (originalModel) {
686
- newSession.transferredState = {
687
- editingSession: originalModel.object.editingSession,
688
- inputState: originalModel.object.inputModel.toJSON()
689
- };
690
- }
691
- const chatViewWidget = this._chatWidgetService.getWidgetBySessionResource(originalResource);
692
- if (chatViewWidget && isIChatViewViewContext(chatViewWidget.viewContext)) {
693
- await this._chatWidgetService.openSession(modifiedResource, undefined, {
694
- preserveFocus: true
695
- });
696
- } else if (!chatViewWidget) {
697
- const ref = await this._chatService.acquireOrLoadSession(modifiedResource, ChatAgentLocation.Chat, CancellationToken.None);
698
- ref?.dispose();
699
- }
700
- this._resendPendingRequests(originalResource, modifiedResource);
701
- this._chatSessionsService.fireSessionCommitted(originalResource, modifiedResource);
702
- } finally {
703
- originalModel?.dispose();
704
- }
705
- }
706
- _resendPendingRequests(originalResource, modifiedResource) {
707
- this._chatService.migrateRequests(originalResource, modifiedResource);
708
- }
709
- async _provideChatSessionContent(providerHandle, sessionResource, token) {
710
- const t0 = Date.now();
711
- this._logService.trace(
712
- `[MainThreadChatSessions] _provideChatSessionContent start handle=${providerHandle} uri=${( sessionResource.toString())}`
713
- );
714
- let session = this._activeSessions.get(sessionResource);
715
- if (!session) {
716
- session = ( new ObservableChatSession(
717
- sessionResource,
718
- providerHandle,
719
- this._proxy,
720
- this._logService,
721
- this._dialogService
722
- ));
723
- this._activeSessions.set(sessionResource, session);
724
- const disposable = session.onWillDispose(() => {
725
- this._activeSessions.delete(sessionResource);
726
- this._sessionDisposables.get(sessionResource)?.dispose();
727
- this._sessionDisposables.delete(sessionResource);
728
- });
729
- this._sessionDisposables.set(sessionResource, disposable);
730
- }
731
- try {
732
- const initialSessionOptions = this._chatSessionsService.getSessionOptions(sessionResource);
733
- await session.initialize(token, {
734
- initialSessionOptions: initialSessionOptions ? ( [...initialSessionOptions].map(([optionId, value]) => ({
735
- optionId,
736
- value: typeof value === "string" ? value : value?.id
737
- }))) : undefined
738
- });
739
- if (session.options) {
740
- for (const [_, handle] of this._sessionTypeToHandle) {
741
- if (handle === providerHandle) {
742
- for (const [optionId, value] of session.options) {
743
- this._chatSessionsService.setSessionOption(sessionResource, optionId, value);
744
- }
745
- break;
746
- }
747
- }
748
- }
749
- this._logService.trace(
750
- `[MainThreadChatSessions] _provideChatSessionContent done total=${Date.now() - t0}ms handle=${providerHandle} uri=${( sessionResource.toString())}`
751
- );
752
- return session;
753
- } catch (error) {
754
- session.dispose();
755
- this._logService.error(
756
- `Error providing chat session content for handle ${providerHandle} and resource ${( sessionResource.toString())}:`,
757
- error
758
- );
759
- throw error;
760
- }
761
- }
762
- $unregisterChatSessionItemController(handle) {
763
- this._itemControllerRegistrations.deleteAndDispose(handle);
764
- }
765
- $registerChatSessionContentProvider(handle, chatSessionScheme) {
766
- const provider = {
767
- provideChatSessionContent: (resource, token) => this._provideChatSessionContent(handle, resource, token)
768
- };
769
- this._sessionTypeToHandle.set(chatSessionScheme, handle);
770
- this._contentProvidersRegistrations.set(
771
- handle,
772
- this._chatSessionsService.registerChatSessionContentProvider(chatSessionScheme, provider)
773
- );
774
- this._refreshProviderOptions(handle, chatSessionScheme);
775
- }
776
- $unregisterChatSessionContentProvider(handle) {
777
- this._contentProvidersRegistrations.deleteAndDispose(handle);
778
- for (const [sessionType, h] of this._sessionTypeToHandle) {
779
- if (h === handle) {
780
- this._sessionTypeToHandle.delete(sessionType);
781
- break;
782
- }
783
- }
784
- for (const [key, session] of this._activeSessions) {
785
- if (session.providerHandle === handle) {
786
- session.dispose();
787
- this._activeSessions.delete(key);
788
- }
789
- }
790
- }
791
- async $handleProgressChunk(handle, sessionResource, requestId, chunks) {
792
- const resource = URI.revive(sessionResource);
793
- const observableSession = this._activeSessions.get(resource);
794
- if (!observableSession) {
795
- this._logService.warn(
796
- `No session found for progress chunks: handle ${handle}, sessionResource ${resource}, requestId ${requestId}`
797
- );
798
- return;
799
- }
800
- const chatProgressParts = ( chunks.map(chunk => {
801
- const [progress] = Array.isArray(chunk) ? chunk : [chunk];
802
- return revive(progress);
803
- }));
804
- observableSession.handleProgressChunk(requestId, chatProgressParts);
805
- }
806
- $handleProgressComplete(handle, sessionResource, requestId) {
807
- const resource = URI.revive(sessionResource);
808
- const observableSession = this._activeSessions.get(resource);
809
- if (!observableSession) {
810
- this._logService.warn(
811
- `No session found for progress completion: handle ${handle}, sessionResource ${resource}, requestId ${requestId}`
812
- );
813
- return;
814
- }
815
- observableSession.handleProgressComplete(requestId);
816
- }
817
- $handleAnchorResolve(handle, sesssionResource, requestId, requestHandle, anchor) {}
818
- $onDidChangeChatSessionProviderOptions(handle) {
819
- let sessionType;
820
- for (const [type, h] of this._sessionTypeToHandle) {
821
- if (h === handle) {
822
- sessionType = type;
823
- break;
824
- }
825
- }
826
- if (!sessionType) {
827
- this._logService.warn(
828
- `No session type found for chat session content provider handle ${handle} when refreshing provider options`
829
- );
830
- return;
831
- }
832
- this._refreshProviderOptions(handle, sessionType);
833
- }
834
- $updateChatSessionInputState(controllerHandle, sessionResource, optionGroups) {
835
- const registration = this._itemControllerRegistrations.get(controllerHandle);
836
- if (!registration) {
837
- this._logService.warn(
838
- `No controller found for handle ${controllerHandle} when updating input state`
839
- );
840
- return;
841
- }
842
- this._applyOptionGroups(
843
- controllerHandle,
844
- registration.chatSessionType,
845
- sessionResource,
846
- optionGroups
847
- );
848
- }
849
- _refreshProviderOptions(handle, chatSessionScheme) {
850
- this._proxy.$provideChatSessionProviderOptions(handle, CancellationToken.None).then(options => {
851
- if (options?.optionGroups && options.optionGroups.length) {
852
- this._chatSessionsService.setOptionGroupsForSessionType(chatSessionScheme, handle, [...options.optionGroups]);
853
- }
854
- }).catch(err => {
855
- if (!isCancellationError(err)) {
856
- this._logService.error("Error fetching chat session options", err);
857
- }
858
- });
859
- }
860
- dispose() {
861
- for (const session of ( this._activeSessions.values())) {
862
- session.dispose();
863
- }
864
- this._activeSessions.clear();
865
- for (const disposable of ( this._sessionDisposables.values())) {
866
- disposable.dispose();
867
- }
868
- this._sessionDisposables.clear();
869
- super.dispose();
870
- }
871
- async notifyOptionsChange(handle, sessionResource, updates) {
872
- this._logService.trace(
873
- `[MainThreadChatSessions] notifyOptionsChange: starting proxy call for handle ${handle}, sessionResource ${sessionResource}`
874
- );
875
- try {
876
- await this._proxy.$provideHandleOptionsChange(
877
- handle,
878
- sessionResource,
879
- Object.fromEntries(updates),
880
- CancellationToken.None
881
- );
882
- this._logService.trace(
883
- `[MainThreadChatSessions] notifyOptionsChange: proxy call completed for handle ${handle}, sessionResource ${sessionResource}`
884
- );
885
- } catch (error) {
886
- this._logService.error(
887
- `[MainThreadChatSessions] notifyOptionsChange: error for handle ${handle}, sessionResource ${sessionResource}:`,
888
- error
889
- );
890
- }
891
- }
892
- };
893
- MainThreadChatSessions = __decorate([extHostNamedCustomer(MainContext.MainThreadChatSessions), ( __param(1, IAgentSessionsService)), ( __param(2, IChatSessionsService)), ( __param(3, IChatService)), ( __param(4, IChatWidgetService)), ( __param(5, IChatTodoListService)), ( __param(6, IChatArtifactsService)), ( __param(7, IChatDebugService)), ( __param(8, IDialogService)), ( __param(9, IEditorService)), ( __param(10, IEditorGroupsService)), ( __param(11, ILogService)), ( __param(12, IInstantiationService))], MainThreadChatSessions);
894
- function reviveMarkdownString(value) {
895
- if (!value) {
896
- return undefined;
897
- }
898
- if (typeof value === "string") {
899
- return value;
900
- }
901
- if (typeof value === "object" && "value" in value) {
902
- return MarkdownString.lift(value);
903
- }
904
- return undefined;
905
- }
906
-
907
- export { MainThreadChatSessions, ObservableChatSession };