@vscode/chat-lib 0.4.1-1 → 0.4.1-11

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 (175) hide show
  1. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/completionsFromNetwork.js +1 -1
  2. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/completionsFromNetwork.js.map +1 -1
  3. package/dist/src/_internal/extension/inlineEdits/common/delay.d.ts +3 -1
  4. package/dist/src/_internal/extension/inlineEdits/common/delay.d.ts.map +1 -1
  5. package/dist/src/_internal/extension/inlineEdits/common/delay.js +6 -0
  6. package/dist/src/_internal/extension/inlineEdits/common/delay.js.map +1 -1
  7. package/dist/src/_internal/extension/inlineEdits/common/editRebase.d.ts.map +1 -1
  8. package/dist/src/_internal/extension/inlineEdits/common/editRebase.js +2 -35
  9. package/dist/src/_internal/extension/inlineEdits/common/editRebase.js.map +1 -1
  10. package/dist/src/_internal/extension/inlineEdits/common/userInteractionMonitor.d.ts +6 -0
  11. package/dist/src/_internal/extension/inlineEdits/common/userInteractionMonitor.d.ts.map +1 -1
  12. package/dist/src/_internal/extension/inlineEdits/common/userInteractionMonitor.js +19 -35
  13. package/dist/src/_internal/extension/inlineEdits/common/userInteractionMonitor.js.map +1 -1
  14. package/dist/src/_internal/extension/inlineEdits/node/nextEditCache.d.ts +1 -0
  15. package/dist/src/_internal/extension/inlineEdits/node/nextEditCache.d.ts.map +1 -1
  16. package/dist/src/_internal/extension/inlineEdits/node/nextEditProvider.d.ts +12 -1
  17. package/dist/src/_internal/extension/inlineEdits/node/nextEditProvider.d.ts.map +1 -1
  18. package/dist/src/_internal/extension/inlineEdits/node/nextEditProvider.js +147 -95
  19. package/dist/src/_internal/extension/inlineEdits/node/nextEditProvider.js.map +1 -1
  20. package/dist/src/_internal/extension/inlineEdits/node/nextEditProviderTelemetry.d.ts +7 -0
  21. package/dist/src/_internal/extension/inlineEdits/node/nextEditProviderTelemetry.d.ts.map +1 -1
  22. package/dist/src/_internal/extension/inlineEdits/node/nextEditProviderTelemetry.js +18 -3
  23. package/dist/src/_internal/extension/inlineEdits/node/nextEditProviderTelemetry.js.map +1 -1
  24. package/dist/src/_internal/extension/inlineEdits/node/nextEditResult.d.ts +2 -0
  25. package/dist/src/_internal/extension/inlineEdits/node/nextEditResult.d.ts.map +1 -1
  26. package/dist/src/_internal/extension/inlineEdits/node/nextEditResult.js.map +1 -1
  27. package/dist/src/_internal/extension/prompt/node/chatMLFetcher.d.ts +11 -1
  28. package/dist/src/_internal/extension/prompt/node/chatMLFetcher.d.ts.map +1 -1
  29. package/dist/src/_internal/extension/prompt/node/chatMLFetcher.js +144 -52
  30. package/dist/src/_internal/extension/prompt/node/chatMLFetcher.js.map +1 -1
  31. package/dist/src/_internal/extension/prompt/node/chatMLFetcherTelemetry.d.ts +6 -3
  32. package/dist/src/_internal/extension/prompt/node/chatMLFetcherTelemetry.d.ts.map +1 -1
  33. package/dist/src/_internal/extension/prompt/node/chatMLFetcherTelemetry.js +9 -3
  34. package/dist/src/_internal/extension/prompt/node/chatMLFetcherTelemetry.js.map +1 -1
  35. package/dist/src/_internal/extension/xtab/common/diffHistoryForPrompt.d.ts +6 -1
  36. package/dist/src/_internal/extension/xtab/common/diffHistoryForPrompt.d.ts.map +1 -1
  37. package/dist/src/_internal/extension/xtab/common/diffHistoryForPrompt.js +3 -1
  38. package/dist/src/_internal/extension/xtab/common/diffHistoryForPrompt.js.map +1 -1
  39. package/dist/src/_internal/extension/xtab/common/lintErrors.js +2 -1
  40. package/dist/src/_internal/extension/xtab/common/lintErrors.js.map +1 -1
  41. package/dist/src/_internal/extension/xtab/common/promptCrafting.d.ts +6 -1
  42. package/dist/src/_internal/extension/xtab/common/promptCrafting.d.ts.map +1 -1
  43. package/dist/src/_internal/extension/xtab/common/promptCrafting.js +43 -6
  44. package/dist/src/_internal/extension/xtab/common/promptCrafting.js.map +1 -1
  45. package/dist/src/_internal/extension/xtab/common/recentFilesForPrompt.d.ts +22 -0
  46. package/dist/src/_internal/extension/xtab/common/recentFilesForPrompt.d.ts.map +1 -1
  47. package/dist/src/_internal/extension/xtab/common/recentFilesForPrompt.js +116 -17
  48. package/dist/src/_internal/extension/xtab/common/recentFilesForPrompt.js.map +1 -1
  49. package/dist/src/_internal/extension/xtab/common/similarFilesContextService.d.ts +10 -0
  50. package/dist/src/_internal/extension/xtab/common/similarFilesContextService.d.ts.map +1 -0
  51. package/dist/src/_internal/extension/xtab/common/similarFilesContextService.js +10 -0
  52. package/dist/src/_internal/extension/xtab/common/similarFilesContextService.js.map +1 -0
  53. package/dist/src/_internal/extension/xtab/common/tags.d.ts +1 -0
  54. package/dist/src/_internal/extension/xtab/common/tags.d.ts.map +1 -1
  55. package/dist/src/_internal/extension/xtab/common/tags.js +1 -0
  56. package/dist/src/_internal/extension/xtab/common/tags.js.map +1 -1
  57. package/dist/src/_internal/extension/xtab/node/xtabCustomDiffPatchResponseHandler.js +1 -1
  58. package/dist/src/_internal/extension/xtab/node/xtabCustomDiffPatchResponseHandler.js.map +1 -1
  59. package/dist/src/_internal/extension/xtab/node/xtabEndpoint.d.ts.map +1 -1
  60. package/dist/src/_internal/extension/xtab/node/xtabEndpoint.js +1 -0
  61. package/dist/src/_internal/extension/xtab/node/xtabEndpoint.js.map +1 -1
  62. package/dist/src/_internal/extension/xtab/node/xtabNextCursorPredictor.d.ts.map +1 -1
  63. package/dist/src/_internal/extension/xtab/node/xtabNextCursorPredictor.js +3 -2
  64. package/dist/src/_internal/extension/xtab/node/xtabNextCursorPredictor.js.map +1 -1
  65. package/dist/src/_internal/extension/xtab/node/xtabProvider.d.ts +4 -1
  66. package/dist/src/_internal/extension/xtab/node/xtabProvider.d.ts.map +1 -1
  67. package/dist/src/_internal/extension/xtab/node/xtabProvider.js +91 -20
  68. package/dist/src/_internal/extension/xtab/node/xtabProvider.js.map +1 -1
  69. package/dist/src/_internal/platform/authentication/common/copilotToken.d.ts +4 -0
  70. package/dist/src/_internal/platform/authentication/common/copilotToken.d.ts.map +1 -1
  71. package/dist/src/_internal/platform/authentication/common/copilotToken.js +6 -0
  72. package/dist/src/_internal/platform/authentication/common/copilotToken.js.map +1 -1
  73. package/dist/src/_internal/platform/configuration/common/configurationService.d.ts +26 -15
  74. package/dist/src/_internal/platform/configuration/common/configurationService.d.ts.map +1 -1
  75. package/dist/src/_internal/platform/configuration/common/configurationService.js +29 -18
  76. package/dist/src/_internal/platform/configuration/common/configurationService.js.map +1 -1
  77. package/dist/src/_internal/platform/endpoint/common/capiClient.d.ts.map +1 -1
  78. package/dist/src/_internal/platform/endpoint/common/capiClient.js +1 -0
  79. package/dist/src/_internal/platform/endpoint/common/capiClient.js.map +1 -1
  80. package/dist/src/_internal/platform/endpoint/common/chatModelCapabilities.d.ts +1 -0
  81. package/dist/src/_internal/platform/endpoint/common/chatModelCapabilities.d.ts.map +1 -1
  82. package/dist/src/_internal/platform/endpoint/common/chatModelCapabilities.js +13 -3
  83. package/dist/src/_internal/platform/endpoint/common/chatModelCapabilities.js.map +1 -1
  84. package/dist/src/_internal/platform/endpoint/common/endpointProvider.d.ts +1 -0
  85. package/dist/src/_internal/platform/endpoint/common/endpointProvider.d.ts.map +1 -1
  86. package/dist/src/_internal/platform/endpoint/common/endpointProvider.js.map +1 -1
  87. package/dist/src/_internal/platform/endpoint/node/autoChatEndpoint.d.ts.map +1 -1
  88. package/dist/src/_internal/platform/endpoint/node/autoChatEndpoint.js +1 -0
  89. package/dist/src/_internal/platform/endpoint/node/autoChatEndpoint.js.map +1 -1
  90. package/dist/src/_internal/platform/endpoint/node/chatEndpoint.d.ts +1 -0
  91. package/dist/src/_internal/platform/endpoint/node/chatEndpoint.d.ts.map +1 -1
  92. package/dist/src/_internal/platform/endpoint/node/chatEndpoint.js +3 -2
  93. package/dist/src/_internal/platform/endpoint/node/chatEndpoint.js.map +1 -1
  94. package/dist/src/_internal/platform/endpoint/node/messagesApi.d.ts +6 -1
  95. package/dist/src/_internal/platform/endpoint/node/messagesApi.d.ts.map +1 -1
  96. package/dist/src/_internal/platform/endpoint/node/messagesApi.js +20 -12
  97. package/dist/src/_internal/platform/endpoint/node/messagesApi.js.map +1 -1
  98. package/dist/src/_internal/platform/endpoint/node/proxyXtabEndpoint.d.ts.map +1 -1
  99. package/dist/src/_internal/platform/endpoint/node/proxyXtabEndpoint.js +1 -0
  100. package/dist/src/_internal/platform/endpoint/node/proxyXtabEndpoint.js.map +1 -1
  101. package/dist/src/_internal/platform/endpoint/node/responsesApi.d.ts +1 -0
  102. package/dist/src/_internal/platform/endpoint/node/responsesApi.d.ts.map +1 -1
  103. package/dist/src/_internal/platform/endpoint/node/responsesApi.js +14 -10
  104. package/dist/src/_internal/platform/endpoint/node/responsesApi.js.map +1 -1
  105. package/dist/src/_internal/platform/inlineEdits/common/dataTypes/triggerOptions.d.ts +8 -0
  106. package/dist/src/_internal/platform/inlineEdits/common/dataTypes/triggerOptions.d.ts.map +1 -0
  107. package/dist/src/_internal/platform/inlineEdits/common/dataTypes/triggerOptions.js +17 -0
  108. package/dist/src/_internal/platform/inlineEdits/common/dataTypes/triggerOptions.js.map +1 -0
  109. package/dist/src/_internal/platform/inlineEdits/common/dataTypes/xtabPromptOptions.d.ts +44 -0
  110. package/dist/src/_internal/platform/inlineEdits/common/dataTypes/xtabPromptOptions.d.ts.map +1 -1
  111. package/dist/src/_internal/platform/inlineEdits/common/dataTypes/xtabPromptOptions.js +71 -2
  112. package/dist/src/_internal/platform/inlineEdits/common/dataTypes/xtabPromptOptions.js.map +1 -1
  113. package/dist/src/_internal/platform/inlineEdits/common/inlineEditLogContext.js +5 -5
  114. package/dist/src/_internal/platform/inlineEdits/common/inlineEditLogContext.js.map +1 -1
  115. package/dist/src/_internal/platform/inlineEdits/common/statelessNextEditProvider.d.ts +15 -1
  116. package/dist/src/_internal/platform/inlineEdits/common/statelessNextEditProvider.d.ts.map +1 -1
  117. package/dist/src/_internal/platform/inlineEdits/common/statelessNextEditProvider.js +22 -1
  118. package/dist/src/_internal/platform/inlineEdits/common/statelessNextEditProvider.js.map +1 -1
  119. package/dist/src/_internal/platform/inlineEdits/node/inlineEditsModelService.d.ts.map +1 -1
  120. package/dist/src/_internal/platform/inlineEdits/node/inlineEditsModelService.js +9 -44
  121. package/dist/src/_internal/platform/inlineEdits/node/inlineEditsModelService.js.map +1 -1
  122. package/dist/src/_internal/platform/nesFetch/common/responseStream.js +2 -35
  123. package/dist/src/_internal/platform/nesFetch/common/responseStream.js.map +1 -1
  124. package/dist/src/_internal/platform/nesFetch/node/completionsFetchServiceImpl.js +3 -36
  125. package/dist/src/_internal/platform/nesFetch/node/completionsFetchServiceImpl.js.map +1 -1
  126. package/dist/src/_internal/platform/networking/common/anthropic.d.ts +5 -2
  127. package/dist/src/_internal/platform/networking/common/anthropic.d.ts.map +1 -1
  128. package/dist/src/_internal/platform/networking/common/anthropic.js +13 -3
  129. package/dist/src/_internal/platform/networking/common/anthropic.js.map +1 -1
  130. package/dist/src/_internal/platform/networking/common/fetcherService.d.ts +43 -1
  131. package/dist/src/_internal/platform/networking/common/fetcherService.d.ts.map +1 -1
  132. package/dist/src/_internal/platform/networking/common/fetcherService.js +29 -4
  133. package/dist/src/_internal/platform/networking/common/fetcherService.js.map +1 -1
  134. package/dist/src/_internal/platform/networking/common/networking.d.ts +40 -4
  135. package/dist/src/_internal/platform/networking/common/networking.d.ts.map +1 -1
  136. package/dist/src/_internal/platform/networking/common/networking.js +20 -6
  137. package/dist/src/_internal/platform/networking/common/networking.js.map +1 -1
  138. package/dist/src/_internal/platform/networking/node/chatWebSocketManager.d.ts +71 -0
  139. package/dist/src/_internal/platform/networking/node/chatWebSocketManager.d.ts.map +1 -0
  140. package/dist/src/_internal/platform/networking/node/chatWebSocketManager.js +308 -0
  141. package/dist/src/_internal/platform/networking/node/chatWebSocketManager.js.map +1 -0
  142. package/dist/src/_internal/platform/proxyModels/node/proxyModelsService.js +4 -37
  143. package/dist/src/_internal/platform/proxyModels/node/proxyModelsService.js.map +1 -1
  144. package/dist/src/_internal/platform/requestLogger/node/nullRequestLogger.d.ts +1 -0
  145. package/dist/src/_internal/platform/requestLogger/node/nullRequestLogger.d.ts.map +1 -1
  146. package/dist/src/_internal/platform/requestLogger/node/nullRequestLogger.js +3 -0
  147. package/dist/src/_internal/platform/requestLogger/node/nullRequestLogger.js.map +1 -1
  148. package/dist/src/_internal/platform/requestLogger/node/requestLogger.d.ts +2 -0
  149. package/dist/src/_internal/platform/requestLogger/node/requestLogger.d.ts.map +1 -1
  150. package/dist/src/_internal/platform/requestLogger/node/requestLogger.js.map +1 -1
  151. package/dist/src/_internal/platform/telemetry/common/telemetry.d.ts +9 -1
  152. package/dist/src/_internal/platform/telemetry/common/telemetry.d.ts.map +1 -1
  153. package/dist/src/_internal/platform/telemetry/common/telemetry.js +33 -15
  154. package/dist/src/_internal/platform/telemetry/common/telemetry.js.map +1 -1
  155. package/dist/src/_internal/platform/telemetry/node/azureInsightsReporter.d.ts +1 -1
  156. package/dist/src/_internal/platform/telemetry/node/azureInsightsReporter.d.ts.map +1 -1
  157. package/dist/src/_internal/platform/telemetry/node/azureInsightsReporter.js +3 -2
  158. package/dist/src/_internal/platform/telemetry/node/azureInsightsReporter.js.map +1 -1
  159. package/dist/src/_internal/util/common/errors.d.ts +4 -2
  160. package/dist/src/_internal/util/common/errors.d.ts.map +1 -1
  161. package/dist/src/_internal/util/common/errors.js +16 -12
  162. package/dist/src/_internal/util/common/errors.js.map +1 -1
  163. package/dist/src/_internal/util/common/result.js +4 -37
  164. package/dist/src/_internal/util/common/result.js.map +1 -1
  165. package/dist/src/_internal/util/common/test/shims/chatTypes.d.ts +14 -2
  166. package/dist/src/_internal/util/common/test/shims/chatTypes.d.ts.map +1 -1
  167. package/dist/src/_internal/util/common/test/shims/chatTypes.js +17 -3
  168. package/dist/src/_internal/util/common/test/shims/chatTypes.js.map +1 -1
  169. package/dist/src/_internal/util/common/test/shims/vscodeTypesShim.js +1 -1
  170. package/dist/src/_internal/util/common/test/shims/vscodeTypesShim.js.map +1 -1
  171. package/dist/src/main.d.ts.map +1 -1
  172. package/dist/src/main.js +10 -0
  173. package/dist/src/main.js.map +1 -1
  174. package/dist/src/package.json +185 -249
  175. package/package.json +3 -3
@@ -3,45 +3,12 @@
3
3
  * Copyright (c) Microsoft Corporation. All rights reserved.
4
4
  * Licensed under the MIT License. See License.txt in the project root for license information.
5
5
  *--------------------------------------------------------------------------------------------*/
6
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
- if (k2 === undefined) k2 = k;
8
- var desc = Object.getOwnPropertyDescriptor(m, k);
9
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
- desc = { enumerable: true, get: function() { return m[k]; } };
11
- }
12
- Object.defineProperty(o, k2, desc);
13
- }) : (function(o, m, k, k2) {
14
- if (k2 === undefined) k2 = k;
15
- o[k2] = m[k];
16
- }));
17
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
- Object.defineProperty(o, "default", { enumerable: true, value: v });
19
- }) : function(o, v) {
20
- o["default"] = v;
21
- });
22
6
  var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
23
7
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
24
8
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
25
9
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
26
10
  return c > 3 && r && Object.defineProperty(target, key, r), r;
27
11
  };
28
- var __importStar = (this && this.__importStar) || (function () {
29
- var ownKeys = function(o) {
30
- ownKeys = Object.getOwnPropertyNames || function (o) {
31
- var ar = [];
32
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
33
- return ar;
34
- };
35
- return ownKeys(o);
36
- };
37
- return function (mod) {
38
- if (mod && mod.__esModule) return mod;
39
- var result = {};
40
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
41
- __setModuleDefault(result, mod);
42
- return result;
43
- };
44
- })();
45
12
  var __param = (this && this.__param) || function (paramIndex, decorator) {
46
13
  return function (target, key) { decorator(target, key, paramIndex); }
47
14
  };
@@ -68,6 +35,7 @@ const fetcherService_1 = require("../../../platform/networking/common/fetcherSer
68
35
  const networking_1 = require("../../../platform/networking/common/networking");
69
36
  const openai_1 = require("../../../platform/networking/common/openai");
70
37
  const chatStream_1 = require("../../../platform/networking/node/chatStream");
38
+ const chatWebSocketManager_1 = require("../../../platform/networking/node/chatWebSocketManager");
71
39
  const stream_1 = require("../../../platform/networking/node/stream");
72
40
  const fetch_2 = require("../../../platform/openai/node/fetch");
73
41
  const requestLogger_1 = require("../../../platform/requestLogger/node/requestLogger");
@@ -75,14 +43,14 @@ const nullExperimentationService_1 = require("../../../platform/telemetry/common
75
43
  const telemetry_1 = require("../../../platform/telemetry/common/telemetry");
76
44
  const telemetryData_1 = require("../../../platform/telemetry/common/telemetryData");
77
45
  const anomalyDetection_1 = require("../../../util/common/anomalyDetection");
78
- const crypto_1 = require("../../../util/common/crypto");
79
- const errorsUtil = __importStar(require("../../../util/common/errors"));
46
+ const errors_1 = require("../../../util/common/errors");
80
47
  const async_1 = require("../../../util/vs/base/common/async");
81
- const errors_1 = require("../../../util/vs/base/common/errors");
48
+ const errors_2 = require("../../../util/vs/base/common/errors");
82
49
  const event_1 = require("../../../util/vs/base/common/event");
83
50
  const lifecycle_1 = require("../../../util/vs/base/common/lifecycle");
84
51
  const strings_1 = require("../../../util/vs/base/common/strings");
85
52
  const uuid_1 = require("../../../util/vs/base/common/uuid");
53
+ const instantiation_1 = require("../../../util/vs/platform/instantiation/common/instantiation");
86
54
  const openAIEndpoint_1 = require("../../byok/node/openAIEndpoint");
87
55
  const constants_1 = require("../../common/constants");
88
56
  const powerService_1 = require("../../power/common/powerService");
@@ -116,7 +84,7 @@ class AbstractChatMLFetcher extends lifecycle_1.Disposable {
116
84
  }
117
85
  exports.AbstractChatMLFetcher = AbstractChatMLFetcher;
118
86
  let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
119
- constructor(_fetcherService, _telemetryService, _requestLogger, _logService, _authenticationService, _interactionService, _chatQuotaService, _capiClientService, options, _configurationService, _experimentationService, _powerService) {
87
+ constructor(_fetcherService, _telemetryService, _requestLogger, _logService, _authenticationService, _interactionService, _chatQuotaService, _capiClientService, options, _configurationService, _experimentationService, _powerService, _instantiationService, _webSocketManager) {
120
88
  super(options);
121
89
  this._fetcherService = _fetcherService;
122
90
  this._telemetryService = _telemetryService;
@@ -129,6 +97,8 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
129
97
  this._configurationService = _configurationService;
130
98
  this._experimentationService = _experimentationService;
131
99
  this._powerService = _powerService;
100
+ this._instantiationService = _instantiationService;
101
+ this._webSocketManager = _webSocketManager;
132
102
  /**
133
103
  * Delays (in ms) between connectivity check attempts before retrying a failed request.
134
104
  * Configurable for testing purposes.
@@ -139,13 +109,20 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
139
109
  * Note: the returned array of strings may be less than `n` (e.g., in case there were errors during streaming)
140
110
  */
141
111
  async fetchMany(opts, token) {
142
- let { debugName, endpoint: chatEndpoint, finishedCb, location, messages, requestOptions, source, telemetryProperties, userInitiatedRequest } = opts;
112
+ let { debugName, endpoint: chatEndpoint, finishedCb, location, messages, requestOptions, source, telemetryProperties, userInitiatedRequest, requestKindOptions, conversationId, turnId } = opts;
143
113
  if (!telemetryProperties) {
144
114
  telemetryProperties = {};
145
115
  }
146
116
  if (!telemetryProperties.messageSource) {
147
117
  telemetryProperties.messageSource = debugName;
148
118
  }
119
+ // When WebSocket is enabled, default to using the stateful marker so
120
+ // only delta history is sent once the server has context from this turn.
121
+ const useWebSocket = !!(turnId && conversationId
122
+ && chatEndpoint.apiType === 'responses'
123
+ && this._configurationService.getExperimentBasedConfig(configurationService_1.ConfigKey.TeamInternal.ResponsesApiWebSocketEnabled, this._experimentationService));
124
+ const transport = useWebSocket ? 'websocket' : 'http';
125
+ const ignoreStatefulMarker = useWebSocket ? (opts.ignoreStatefulMarker ?? false) : opts.ignoreStatefulMarker;
149
126
  // TODO @lramos15 telemetry should not drive request ids
150
127
  const ourRequestId = telemetryProperties.requestId ?? telemetryProperties.messageId ?? (0, uuid_1.generateUuid)();
151
128
  const maxResponseTokens = chatEndpoint.maxOutputTokens;
@@ -159,6 +136,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
159
136
  const postOptions = this.preparePostOptions(requestOptions);
160
137
  const requestBody = chatEndpoint.createRequestBody({
161
138
  ...opts,
139
+ ignoreStatefulMarker,
162
140
  requestId: ourRequestId,
163
141
  postOptions
164
142
  });
@@ -173,7 +151,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
173
151
  ourRequestId,
174
152
  location: opts.location,
175
153
  body: requestBody,
176
- ignoreStatefulMarker: opts.ignoreStatefulMarker,
154
+ ignoreStatefulMarker,
177
155
  isConversationRequest: opts.isConversationRequest,
178
156
  customMetadata: opts.customMetadata
179
157
  });
@@ -201,7 +179,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
201
179
  else {
202
180
  const copilotToken = await this._authenticationService.getCopilotToken();
203
181
  usernameToScrub = copilotToken.username;
204
- const fetchResult = await this._fetchAndStreamChat(chatEndpoint, requestBody, baseTelemetry, streamRecorder.callback, requestOptions.secretKey, copilotToken, opts.location, ourRequestId, postOptions.n, token, userInitiatedRequest, telemetryProperties, opts.useFetcher, canRetryOnce);
182
+ const fetchResult = await this._fetchAndStreamChat(chatEndpoint, requestBody, baseTelemetry, streamRecorder.callback, requestOptions.secretKey, copilotToken, opts.location, ourRequestId, postOptions.n, token, userInitiatedRequest, useWebSocket, turnId, conversationId, telemetryProperties, opts.useFetcher, canRetryOnce, requestKindOptions);
205
183
  response = fetchResult.result;
206
184
  actualFetcher = fetchResult.fetcher;
207
185
  actualBytesReceived = fetchResult.bytesReceived;
@@ -221,7 +199,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
221
199
  pendingLoggedChatRequest?.markTimeToFirstToken(timeToFirstToken);
222
200
  switch (response.type) {
223
201
  case fetch_2.FetchResponseKind.Success: {
224
- const result = await this.processSuccessfulResponse(response, messages, requestBody, ourRequestId, maxResponseTokens, tokenCount, timeToFirstToken, streamRecorder, baseTelemetry, chatEndpoint, userInitiatedRequest, actualFetcher, actualBytesReceived, suspendEventSeen, resumeEventSeen);
202
+ const result = await this.processSuccessfulResponse(response, messages, requestBody, ourRequestId, maxResponseTokens, tokenCount, timeToFirstToken, streamRecorder, baseTelemetry, chatEndpoint, userInitiatedRequest, transport, actualFetcher, actualBytesReceived, suspendEventSeen, resumeEventSeen);
225
203
  // Handle FilteredRetry case with augmented messages
226
204
  if (result.type === commonTypes_1.ChatFetchResponseType.FilteredRetry) {
227
205
  if (opts.enableRetryOnFilter) {
@@ -277,6 +255,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
277
255
  requestId: ourRequestId,
278
256
  model: chatEndpoint.model,
279
257
  apiType: chatEndpoint.apiType,
258
+ transport,
280
259
  associatedRequestId: telemetryProperties.associatedRequestId,
281
260
  retryAfterError: telemetryProperties.retryAfterError,
282
261
  retryAfterErrorGitHubRequestId: telemetryProperties.retryAfterErrorGitHubRequestId,
@@ -317,6 +296,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
317
296
  tokenCount,
318
297
  maxResponseTokens,
319
298
  timeToError: timeToFirstToken,
299
+ transport,
320
300
  actualFetcher,
321
301
  bytesReceived: actualBytesReceived,
322
302
  baseTelemetry,
@@ -342,6 +322,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
342
322
  maxResponseTokens,
343
323
  timeToFirstToken,
344
324
  isVisionRequest: this.filterImageMessages(messages),
325
+ transport,
345
326
  fetcher: actualFetcher,
346
327
  bytesReceived: actualBytesReceived,
347
328
  issuedTime: baseTelemetry.issuedTime,
@@ -377,6 +358,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
377
358
  tokenCount,
378
359
  maxResponseTokens,
379
360
  timeToError,
361
+ transport,
380
362
  actualFetcher,
381
363
  bytesReceived: err.bytesReceived,
382
364
  baseTelemetry,
@@ -401,6 +383,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
401
383
  requestId: ourRequestId,
402
384
  model: chatEndpoint.model,
403
385
  apiType: chatEndpoint.apiType,
386
+ transport,
404
387
  associatedRequestId: telemetryProperties.associatedRequestId,
405
388
  retryAfterError: telemetryProperties.retryAfterError,
406
389
  retryAfterErrorGitHubRequestId: telemetryProperties.retryAfterErrorGitHubRequestId,
@@ -433,6 +416,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
433
416
  maxResponseTokens,
434
417
  timeToFirstToken: timeToError,
435
418
  isVisionRequest: this.filterImageMessages(messages),
419
+ transport,
436
420
  fetcher: actualFetcher,
437
421
  bytesReceived: err.bytesReceived,
438
422
  issuedTime: baseTelemetry.issuedTime,
@@ -500,7 +484,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
500
484
  return authHeaders;
501
485
  }
502
486
  async _retryAfterError(params) {
503
- const { opts, processed, telemetryProperties, requestBody, tokenCount, maxResponseTokens, timeToError, actualFetcher, bytesReceived, baseTelemetry, streamRecorder, retryReason, debugNamePrefix, pendingLoggedChatRequest, token, usernameToScrub, suspendEventSeen, resumeEventSeen, } = params;
487
+ const { opts, processed, telemetryProperties, requestBody, tokenCount, maxResponseTokens, timeToError, transport, actualFetcher, bytesReceived, baseTelemetry, streamRecorder, retryReason, debugNamePrefix, pendingLoggedChatRequest, token, usernameToScrub, suspendEventSeen, resumeEventSeen, } = params;
504
488
  // net::ERR_NETWORK_CHANGED: https://github.com/microsoft/vscode/issues/260297
505
489
  const isNetworkChangedError = ['darwin', 'linux'].includes(process.platform) && processed.reason.indexOf('net::ERR_NETWORK_CHANGED') !== -1;
506
490
  // When Electron's network process crashes, all requests through it fail permanently.
@@ -527,6 +511,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
527
511
  maxResponseTokens,
528
512
  timeToFirstToken: timeToError,
529
513
  isVisionRequest: this.filterImageMessages(opts.messages),
514
+ transport,
530
515
  fetcher: actualFetcher,
531
516
  bytesReceived,
532
517
  issuedTime: baseTelemetry.issuedTime,
@@ -552,7 +537,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
552
537
  pendingLoggedChatRequest?.resolve(retryResult, streamRecorder.deltas);
553
538
  return { retryResult, connectivityTestError, connectivityTestErrorGitHubRequestId };
554
539
  }
555
- async _fetchAndStreamChat(chatEndpointInfo, request, baseTelemetryData, finishedCb, secretKey, copilotToken, location, ourRequestId, nChoices, cancellationToken, userInitiatedRequest, telemetryProperties, useFetcher, canRetryOnce) {
540
+ async _fetchAndStreamChat(chatEndpointInfo, request, baseTelemetryData, finishedCb, secretKey, copilotToken, location, ourRequestId, nChoices, cancellationToken, userInitiatedRequest, useWebSocket, turnId, conversationId, telemetryProperties, useFetcher, canRetryOnce, requestKindOptions) {
556
541
  const isPowerSaveBlockerEnabled = this._configurationService.getExperimentBasedConfig(configurationService_1.ConfigKey.TeamInternal.ChatRequestPowerSaveBlocker, this._experimentationService);
557
542
  const blockerHandle = isPowerSaveBlockerEnabled && location !== commonTypes_1.ChatLocation.Other ? this._powerService.acquirePowerSaveBlocker() : undefined;
558
543
  let suspendEventSeen = false;
@@ -566,7 +551,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
566
551
  this._logService.info(`System resumed during streaming request ${ourRequestId} (${commonTypes_1.ChatLocation.toString(location)})`);
567
552
  });
568
553
  try {
569
- const fetchResult = await this._doFetchAndStreamChat(chatEndpointInfo, request, baseTelemetryData, finishedCb, secretKey, copilotToken, location, ourRequestId, nChoices, cancellationToken, userInitiatedRequest, telemetryProperties, useFetcher, canRetryOnce);
554
+ const fetchResult = await this._doFetchAndStreamChat(chatEndpointInfo, request, baseTelemetryData, finishedCb, secretKey, copilotToken, location, ourRequestId, nChoices, cancellationToken, userInitiatedRequest, useWebSocket, turnId, conversationId, telemetryProperties, useFetcher, canRetryOnce, requestKindOptions);
570
555
  return { ...fetchResult, suspendEventSeen: suspendEventSeen || undefined, resumeEventSeen: resumeEventSeen || undefined };
571
556
  }
572
557
  catch (err) {
@@ -584,7 +569,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
584
569
  blockerHandle?.dispose();
585
570
  }
586
571
  }
587
- async _doFetchAndStreamChat(chatEndpointInfo, request, baseTelemetryData, finishedCb, secretKey, copilotToken, location, ourRequestId, nChoices, cancellationToken, userInitiatedRequest, telemetryProperties, useFetcher, canRetryOnce) {
572
+ async _doFetchAndStreamChat(chatEndpointInfo, request, baseTelemetryData, finishedCb, secretKey, copilotToken, location, ourRequestId, nChoices, cancellationToken, userInitiatedRequest, useWebSocket, turnId, conversationId, telemetryProperties, useFetcher, canRetryOnce, requestKindOptions) {
588
573
  if (cancellationToken.isCancellationRequested) {
589
574
  return { result: { type: fetch_2.FetchResponseKind.Canceled, reason: 'before fetch request' } };
590
575
  }
@@ -606,9 +591,100 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
606
591
  }
607
592
  };
608
593
  }
594
+ // WebSocket path: use persistent WebSocket connection for Responses API endpoints
595
+ if (useWebSocket && turnId && conversationId) {
596
+ return this._doFetchViaWebSocket(chatEndpointInfo, request, baseTelemetryData, finishedCb, secretKey, location, ourRequestId, turnId, conversationId, cancellationToken, telemetryProperties);
597
+ }
598
+ return this._doFetchViaHttp(chatEndpointInfo, request, baseTelemetryData, finishedCb, secretKey, location, ourRequestId, nChoices, cancellationToken, userInitiatedRequest, telemetryProperties, useFetcher, canRetryOnce, requestKindOptions);
599
+ }
600
+ /**
601
+ * Sends a chat request via a persistent WebSocket connection instead of HTTP POST.
602
+ * Events are the same Responses API streaming events, processed by OpenAIResponsesProcessor.
603
+ */
604
+ async _doFetchViaWebSocket(chatEndpointInfo, request, baseTelemetryData, finishedCb, secretKey, location, ourRequestId, turnId, conversationId, cancellationToken, telemetryProperties) {
605
+ const connection = await this._webSocketManager.getOrCreateConnection(conversationId, turnId, secretKey);
606
+ // Generate unique ID to link input and output messages
607
+ const modelCallId = (0, uuid_1.generateUuid)();
608
+ const telemetryData = telemetryData_1.TelemetryData.createAndMarkAsIssued({
609
+ endpoint: 'completions',
610
+ engineName: 'chat',
611
+ uiKind: commonTypes_1.ChatLocation.toString(location),
612
+ transport: 'websocket',
613
+ ...{ ...telemetryProperties, modelCallId },
614
+ }, {
615
+ maxTokenWindow: chatEndpointInfo.modelMaxPromptTokens
616
+ });
617
+ for (const [key, value] of Object.entries(request)) {
618
+ if (key === 'messages' || key === 'input') {
619
+ continue;
620
+ } // Skip messages (PII)
621
+ telemetryData.properties[`request.option.${key}`] = JSON.stringify(value) ?? 'undefined';
622
+ }
623
+ telemetryData.properties['headerRequestId'] = ourRequestId;
624
+ this._telemetryService.sendGHTelemetryEvent('request.sent', telemetryData.properties, telemetryData.measurements);
625
+ const requestStart = Date.now();
626
+ const handle = connection.sendRequest(request, cancellationToken);
627
+ const extendedBaseTelemetryData = baseTelemetryData.extendedBy({ modelCallId });
628
+ const processor = this._instantiationService.createInstance(responsesApi_1.OpenAIResponsesProcessor, extendedBaseTelemetryData, ourRequestId, '');
629
+ const chatCompletions = new async_1.AsyncIterableObject(async (emitter) => {
630
+ try {
631
+ await new Promise((resolve, reject) => {
632
+ handle.onEvent(event => {
633
+ const completion = processor.push(event, finishedCb);
634
+ if (completion) {
635
+ (0, responsesApi_1.sendCompletionOutputTelemetry)(this._telemetryService, this._logService, completion, extendedBaseTelemetryData);
636
+ emitter.emitOne(completion);
637
+ }
638
+ });
639
+ handle.onError(error => {
640
+ if ((0, errors_2.isCancellationError)(error)) {
641
+ reject(error);
642
+ return;
643
+ }
644
+ const warningTelemetry = telemetryData.extendedBy({ error: error.message });
645
+ this._telemetryService.sendGHTelemetryEvent('request.shownWarning', warningTelemetry.properties, warningTelemetry.measurements);
646
+ const totalTimeMs = Date.now() - requestStart;
647
+ telemetryData.measurements.totalTimeMs = totalTimeMs;
648
+ telemetryData.properties.error = error.message;
649
+ this._logService.debug(`request.error: [websocket], took ${totalTimeMs} ms`);
650
+ this._telemetryService.sendGHTelemetryEvent('request.error', telemetryData.properties, telemetryData.measurements);
651
+ reject(error);
652
+ });
653
+ handle.onComplete(() => {
654
+ const totalTimeMs = Date.now() - requestStart;
655
+ telemetryData.measurements.totalTimeMs = totalTimeMs;
656
+ this._logService.debug(`request.response: [websocket], took ${totalTimeMs} ms`);
657
+ this._telemetryService.sendGHTelemetryEvent('request.response', telemetryData.properties, telemetryData.measurements);
658
+ resolve();
659
+ });
660
+ });
661
+ }
662
+ finally {
663
+ let messagesToLog = request.messages;
664
+ if ((!messagesToLog || messagesToLog.length === 0) && request.input) {
665
+ try {
666
+ const rawMessages = (0, responsesApi_1.responseApiInputToRawMessagesForLogging)(request);
667
+ messagesToLog = (0, openai_1.rawMessageToCAPI)(rawMessages);
668
+ }
669
+ catch (e) {
670
+ this._logService.error(`Failed to convert Response API input to messages for telemetry:`, e);
671
+ messagesToLog = [];
672
+ }
673
+ }
674
+ (0, chatStream_1.sendEngineMessagesTelemetry)(this._telemetryService, messagesToLog ?? [], telemetryData, false, this._logService);
675
+ }
676
+ });
677
+ return {
678
+ result: {
679
+ type: fetch_2.FetchResponseKind.Success,
680
+ chatCompletions,
681
+ }
682
+ };
683
+ }
684
+ async _doFetchViaHttp(chatEndpointInfo, request, baseTelemetryData, finishedCb, secretKey, location, ourRequestId, nChoices, cancellationToken, userInitiatedRequest, telemetryProperties, useFetcher, canRetryOnce, requestKindOptions) {
609
685
  // Generate unique ID to link input and output messages
610
686
  const modelCallId = (0, uuid_1.generateUuid)();
611
- const response = await this._fetchWithInstrumentation(chatEndpointInfo, ourRequestId, request, secretKey, location, cancellationToken, userInitiatedRequest, { ...telemetryProperties, modelCallId }, useFetcher, canRetryOnce);
687
+ const response = await this._fetchWithInstrumentation(chatEndpointInfo, ourRequestId, request, secretKey, location, cancellationToken, userInitiatedRequest, { ...telemetryProperties, modelCallId }, useFetcher, canRetryOnce, requestKindOptions);
612
688
  if (cancellationToken.isCancellationRequested) {
613
689
  try {
614
690
  // Destroy the stream so that the server is hopefully notified we don't want any more data
@@ -679,7 +755,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
679
755
  bytesReceived: response.bytesReceived
680
756
  };
681
757
  }
682
- async _fetchWithInstrumentation(chatEndpoint, ourRequestId, request, secretKey, location, cancellationToken, userInitiatedRequest, telemetryProperties, useFetcher, canRetryOnce) {
758
+ async _fetchWithInstrumentation(chatEndpoint, ourRequestId, request, secretKey, location, cancellationToken, userInitiatedRequest, telemetryProperties, useFetcher, canRetryOnce, requestKindOptions) {
683
759
  // If request contains an image, we include this header.
684
760
  const additionalHeaders = {
685
761
  'X-Interaction-Id': this._interactionService.interactionId,
@@ -692,6 +768,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
692
768
  endpoint: 'completions',
693
769
  engineName: 'chat',
694
770
  uiKind: commonTypes_1.ChatLocation.toString(location),
771
+ transport: 'http',
695
772
  ...telemetryProperties // This includes the modelCallId from fetchAndStreamChat
696
773
  }, {
697
774
  maxTokenWindow: chatEndpoint.modelMaxPromptTokens
@@ -710,7 +787,19 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
710
787
  const requestStart = Date.now();
711
788
  const intent = locationToIntent(location);
712
789
  // Wrap the Promise with success/error callbacks so we can log/measure it
713
- return (0, networking_1.postRequest)(this._fetcherService, this._telemetryService, this._capiClientService, chatEndpoint, secretKey, await (0, crypto_1.createRequestHMAC)(process.env.HMAC_SECRET), intent, ourRequestId, request, additionalHeaders, cancellationToken, useFetcher, canRetryOnce, location).then(response => {
790
+ return this._instantiationService.invokeFunction(networking_1.postRequest, {
791
+ endpointOrUrl: chatEndpoint,
792
+ secretKey,
793
+ intent,
794
+ requestId: ourRequestId,
795
+ body: request,
796
+ additionalHeaders,
797
+ cancelToken: cancellationToken,
798
+ useFetcher,
799
+ canRetryOnce,
800
+ location,
801
+ requestKindOptions,
802
+ }).then(response => {
714
803
  const apim = response.headers.get('apim-request-id');
715
804
  if (apim) {
716
805
  this._logService.debug(`APIM request id: ${apim}`);
@@ -966,7 +1055,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
966
1055
  reason: `Request Failed: ${response.status} ${text}`
967
1056
  };
968
1057
  }
969
- async processSuccessfulResponse(response, messages, requestBody, requestId, maxResponseTokens, promptTokenCount, timeToFirstToken, streamRecorder, baseTelemetry, chatEndpointInfo, userInitiatedRequest, fetcher, bytesReceived, suspendEventSeen, resumeEventSeen) {
1058
+ async processSuccessfulResponse(response, messages, requestBody, requestId, maxResponseTokens, promptTokenCount, timeToFirstToken, streamRecorder, baseTelemetry, chatEndpointInfo, userInitiatedRequest, transport, fetcher, bytesReceived, suspendEventSeen, resumeEventSeen) {
970
1059
  const completions = [];
971
1060
  for await (const chatCompletion of response.chatCompletions) {
972
1061
  chatMLFetcherTelemetry_1.ChatMLFetcherTelemetrySender.sendSuccessTelemetry(this._telemetryService, {
@@ -980,6 +1069,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
980
1069
  timeToFirstToken,
981
1070
  timeToFirstTokenEmitted: (baseTelemetry && streamRecorder.firstTokenEmittedTime) ? streamRecorder.firstTokenEmittedTime - baseTelemetry.issuedTime : -1,
982
1071
  hasImageMessages: this.filterImageMessages(messages),
1072
+ transport,
983
1073
  fetcher,
984
1074
  bytesReceived,
985
1075
  suspendEventSeen,
@@ -1184,7 +1274,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
1184
1274
  serverRequestId: gitHubRequestId,
1185
1275
  };
1186
1276
  }
1187
- if ((0, errors_1.isCancellationError)(err)) {
1277
+ if ((0, errors_2.isCancellationError)(err)) {
1188
1278
  return {
1189
1279
  type: commonTypes_1.ChatFetchResponseType.Canceled,
1190
1280
  reason: 'Got a cancellation error',
@@ -1201,7 +1291,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
1201
1291
  serverRequestId: gitHubRequestId,
1202
1292
  };
1203
1293
  }
1204
- this._logService.error(errorsUtil.fromUnknown(err), `Error on conversation request`);
1294
+ this._logService.error(errors_1.ErrorUtils.fromUnknown(err), `Error on conversation request`);
1205
1295
  this._telemetryService.sendGHTelemetryException(err, 'Error on conversation request');
1206
1296
  const userMessage = fetcher.getUserMessageForFetcherError(err);
1207
1297
  const errorDetail = (0, logService_1.collectSingleLineErrorMessage)(err, true);
@@ -1257,7 +1347,9 @@ exports.ChatMLFetcherImpl = ChatMLFetcherImpl = __decorate([
1257
1347
  __param(8, conversationOptions_1.IConversationOptions),
1258
1348
  __param(9, configurationService_1.IConfigurationService),
1259
1349
  __param(10, nullExperimentationService_1.IExperimentationService),
1260
- __param(11, powerService_1.IPowerService)
1350
+ __param(11, powerService_1.IPowerService),
1351
+ __param(12, instantiation_1.IInstantiationService),
1352
+ __param(13, chatWebSocketManager_1.IChatWebSocketManager)
1261
1353
  ], ChatMLFetcherImpl);
1262
1354
  /**
1263
1355
  * Validates a chat request payload to ensure it is valid