@vscode/chat-lib 0.4.1-9 → 0.5.1-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 (178) hide show
  1. package/dist/src/_internal/extension/byok/node/openAIEndpoint.d.ts +2 -1
  2. package/dist/src/_internal/extension/byok/node/openAIEndpoint.d.ts.map +1 -1
  3. package/dist/src/_internal/extension/byok/node/openAIEndpoint.js +6 -7
  4. package/dist/src/_internal/extension/byok/node/openAIEndpoint.js.map +1 -1
  5. package/dist/src/_internal/extension/common/constants.d.ts +0 -1
  6. package/dist/src/_internal/extension/common/constants.d.ts.map +1 -1
  7. package/dist/src/_internal/extension/common/constants.js.map +1 -1
  8. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/networking.d.ts.map +1 -1
  9. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/networking.js +6 -1
  10. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/networking.js.map +1 -1
  11. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/openai/model.d.ts +4 -0
  12. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/openai/model.d.ts.map +1 -1
  13. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/openai/model.js +4 -0
  14. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/openai/model.js.map +1 -1
  15. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/snippy/connectionState.d.ts.map +1 -1
  16. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/snippy/connectionState.js +1 -0
  17. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/snippy/connectionState.js.map +1 -1
  18. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/snippy/network.d.ts.map +1 -1
  19. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/snippy/network.js +1 -0
  20. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/snippy/network.js.map +1 -1
  21. package/dist/src/_internal/extension/inlineEdits/node/nextEditProvider.d.ts +9 -0
  22. package/dist/src/_internal/extension/inlineEdits/node/nextEditProvider.d.ts.map +1 -1
  23. package/dist/src/_internal/extension/inlineEdits/node/nextEditProvider.js +71 -11
  24. package/dist/src/_internal/extension/inlineEdits/node/nextEditProvider.js.map +1 -1
  25. package/dist/src/_internal/extension/inlineEdits/node/nextEditProviderTelemetry.d.ts.map +1 -1
  26. package/dist/src/_internal/extension/inlineEdits/node/nextEditProviderTelemetry.js +6 -3
  27. package/dist/src/_internal/extension/inlineEdits/node/nextEditProviderTelemetry.js.map +1 -1
  28. package/dist/src/_internal/extension/prompt/node/chatMLFetcher.d.ts +17 -1
  29. package/dist/src/_internal/extension/prompt/node/chatMLFetcher.d.ts.map +1 -1
  30. package/dist/src/_internal/extension/prompt/node/chatMLFetcher.js +373 -57
  31. package/dist/src/_internal/extension/prompt/node/chatMLFetcher.js.map +1 -1
  32. package/dist/src/_internal/extension/prompt/node/chatMLFetcherTelemetry.d.ts +6 -3
  33. package/dist/src/_internal/extension/prompt/node/chatMLFetcherTelemetry.d.ts.map +1 -1
  34. package/dist/src/_internal/extension/prompt/node/chatMLFetcherTelemetry.js +9 -3
  35. package/dist/src/_internal/extension/prompt/node/chatMLFetcherTelemetry.js.map +1 -1
  36. package/dist/src/_internal/extension/xtab/node/xtabEndpoint.d.ts +2 -1
  37. package/dist/src/_internal/extension/xtab/node/xtabEndpoint.d.ts.map +1 -1
  38. package/dist/src/_internal/extension/xtab/node/xtabEndpoint.js +6 -3
  39. package/dist/src/_internal/extension/xtab/node/xtabEndpoint.js.map +1 -1
  40. package/dist/src/_internal/extension/xtab/node/xtabNextCursorPredictor.d.ts.map +1 -1
  41. package/dist/src/_internal/extension/xtab/node/xtabNextCursorPredictor.js +1 -0
  42. package/dist/src/_internal/extension/xtab/node/xtabNextCursorPredictor.js.map +1 -1
  43. package/dist/src/_internal/extension/xtab/node/xtabProvider.d.ts +2 -0
  44. package/dist/src/_internal/extension/xtab/node/xtabProvider.d.ts.map +1 -1
  45. package/dist/src/_internal/extension/xtab/node/xtabProvider.js +24 -3
  46. package/dist/src/_internal/extension/xtab/node/xtabProvider.js.map +1 -1
  47. package/dist/src/_internal/platform/authentication/node/copilotTokenManager.d.ts.map +1 -1
  48. package/dist/src/_internal/platform/authentication/node/copilotTokenManager.js +3 -0
  49. package/dist/src/_internal/platform/authentication/node/copilotTokenManager.js.map +1 -1
  50. package/dist/src/_internal/platform/chat/common/commonTypes.d.ts +2 -1
  51. package/dist/src/_internal/platform/chat/common/commonTypes.d.ts.map +1 -1
  52. package/dist/src/_internal/platform/chat/common/commonTypes.js +61 -17
  53. package/dist/src/_internal/platform/chat/common/commonTypes.js.map +1 -1
  54. package/dist/src/_internal/platform/configuration/common/configurationService.d.ts +18 -36
  55. package/dist/src/_internal/platform/configuration/common/configurationService.d.ts.map +1 -1
  56. package/dist/src/_internal/platform/configuration/common/configurationService.js +37 -51
  57. package/dist/src/_internal/platform/configuration/common/configurationService.js.map +1 -1
  58. package/dist/src/_internal/platform/endpoint/common/capiClient.d.ts.map +1 -1
  59. package/dist/src/_internal/platform/endpoint/common/capiClient.js +1 -0
  60. package/dist/src/_internal/platform/endpoint/common/capiClient.js.map +1 -1
  61. package/dist/src/_internal/platform/endpoint/common/chatModelCapabilities.d.ts +2 -1
  62. package/dist/src/_internal/platform/endpoint/common/chatModelCapabilities.d.ts.map +1 -1
  63. package/dist/src/_internal/platform/endpoint/common/chatModelCapabilities.js +26 -7
  64. package/dist/src/_internal/platform/endpoint/common/chatModelCapabilities.js.map +1 -1
  65. package/dist/src/_internal/platform/endpoint/common/endpointProvider.d.ts +3 -1
  66. package/dist/src/_internal/platform/endpoint/common/endpointProvider.d.ts.map +1 -1
  67. package/dist/src/_internal/platform/endpoint/common/endpointProvider.js +1 -0
  68. package/dist/src/_internal/platform/endpoint/common/endpointProvider.js.map +1 -1
  69. package/dist/src/_internal/platform/endpoint/node/autoChatEndpoint.d.ts +2 -1
  70. package/dist/src/_internal/platform/endpoint/node/autoChatEndpoint.d.ts.map +1 -1
  71. package/dist/src/_internal/platform/endpoint/node/autoChatEndpoint.js +6 -3
  72. package/dist/src/_internal/platform/endpoint/node/autoChatEndpoint.js.map +1 -1
  73. package/dist/src/_internal/platform/endpoint/node/chatEndpoint.d.ts +6 -2
  74. package/dist/src/_internal/platform/endpoint/node/chatEndpoint.d.ts.map +1 -1
  75. package/dist/src/_internal/platform/endpoint/node/chatEndpoint.js +34 -12
  76. package/dist/src/_internal/platform/endpoint/node/chatEndpoint.js.map +1 -1
  77. package/dist/src/_internal/platform/endpoint/node/copilotChatEndpoint.d.ts +2 -1
  78. package/dist/src/_internal/platform/endpoint/node/copilotChatEndpoint.d.ts.map +1 -1
  79. package/dist/src/_internal/platform/endpoint/node/copilotChatEndpoint.js +5 -3
  80. package/dist/src/_internal/platform/endpoint/node/copilotChatEndpoint.js.map +1 -1
  81. package/dist/src/_internal/platform/endpoint/node/messagesApi.d.ts +1 -1
  82. package/dist/src/_internal/platform/endpoint/node/messagesApi.d.ts.map +1 -1
  83. package/dist/src/_internal/platform/endpoint/node/messagesApi.js +61 -7
  84. package/dist/src/_internal/platform/endpoint/node/messagesApi.js.map +1 -1
  85. package/dist/src/_internal/platform/endpoint/node/proxyXtabEndpoint.d.ts.map +1 -1
  86. package/dist/src/_internal/platform/endpoint/node/proxyXtabEndpoint.js +1 -0
  87. package/dist/src/_internal/platform/endpoint/node/proxyXtabEndpoint.js.map +1 -1
  88. package/dist/src/_internal/platform/endpoint/node/responsesApi.d.ts +1 -0
  89. package/dist/src/_internal/platform/endpoint/node/responsesApi.d.ts.map +1 -1
  90. package/dist/src/_internal/platform/endpoint/node/responsesApi.js +14 -10
  91. package/dist/src/_internal/platform/endpoint/node/responsesApi.js.map +1 -1
  92. package/dist/src/_internal/platform/git/common/gitService.d.ts +9 -1
  93. package/dist/src/_internal/platform/git/common/gitService.d.ts.map +1 -1
  94. package/dist/src/_internal/platform/git/common/gitService.js +17 -5
  95. package/dist/src/_internal/platform/git/common/gitService.js.map +1 -1
  96. package/dist/src/_internal/platform/github/common/githubAPI.d.ts +12 -2
  97. package/dist/src/_internal/platform/github/common/githubAPI.d.ts.map +1 -1
  98. package/dist/src/_internal/platform/github/common/githubAPI.js +23 -12
  99. package/dist/src/_internal/platform/github/common/githubAPI.js.map +1 -1
  100. package/dist/src/_internal/platform/github/common/githubService.d.ts +11 -1
  101. package/dist/src/_internal/platform/github/common/githubService.d.ts.map +1 -1
  102. package/dist/src/_internal/platform/github/common/githubService.js +52 -14
  103. package/dist/src/_internal/platform/github/common/githubService.js.map +1 -1
  104. package/dist/src/_internal/platform/github/common/nullOctokitServiceImpl.d.ts +5 -2
  105. package/dist/src/_internal/platform/github/common/nullOctokitServiceImpl.d.ts.map +1 -1
  106. package/dist/src/_internal/platform/github/common/nullOctokitServiceImpl.js +4 -1
  107. package/dist/src/_internal/platform/github/common/nullOctokitServiceImpl.js.map +1 -1
  108. package/dist/src/_internal/platform/inlineEdits/common/dataTypes/xtabPromptOptions.d.ts +1 -1
  109. package/dist/src/_internal/platform/inlineEdits/common/dataTypes/xtabPromptOptions.d.ts.map +1 -1
  110. package/dist/src/_internal/platform/inlineEdits/common/dataTypes/xtabPromptOptions.js +1 -1
  111. package/dist/src/_internal/platform/inlineEdits/common/dataTypes/xtabPromptOptions.js.map +1 -1
  112. package/dist/src/_internal/platform/inlineEdits/common/statelessNextEditProvider.d.ts +3 -0
  113. package/dist/src/_internal/platform/inlineEdits/common/statelessNextEditProvider.d.ts.map +1 -1
  114. package/dist/src/_internal/platform/inlineEdits/common/statelessNextEditProvider.js +5 -0
  115. package/dist/src/_internal/platform/inlineEdits/common/statelessNextEditProvider.js.map +1 -1
  116. package/dist/src/_internal/platform/nesFetch/node/completionsFetchServiceImpl.d.ts.map +1 -1
  117. package/dist/src/_internal/platform/nesFetch/node/completionsFetchServiceImpl.js +1 -0
  118. package/dist/src/_internal/platform/nesFetch/node/completionsFetchServiceImpl.js.map +1 -1
  119. package/dist/src/_internal/platform/networking/common/anthropic.d.ts +10 -11
  120. package/dist/src/_internal/platform/networking/common/anthropic.d.ts.map +1 -1
  121. package/dist/src/_internal/platform/networking/common/anthropic.js +28 -23
  122. package/dist/src/_internal/platform/networking/common/anthropic.js.map +1 -1
  123. package/dist/src/_internal/platform/networking/common/fetcherService.d.ts +29 -0
  124. package/dist/src/_internal/platform/networking/common/fetcherService.d.ts.map +1 -1
  125. package/dist/src/_internal/platform/networking/common/fetcherService.js +29 -1
  126. package/dist/src/_internal/platform/networking/common/fetcherService.js.map +1 -1
  127. package/dist/src/_internal/platform/networking/common/networking.d.ts +7 -0
  128. package/dist/src/_internal/platform/networking/common/networking.d.ts.map +1 -1
  129. package/dist/src/_internal/platform/networking/common/networking.js +5 -5
  130. package/dist/src/_internal/platform/networking/common/networking.js.map +1 -1
  131. package/dist/src/_internal/platform/networking/node/chatWebSocketManager.d.ts +83 -0
  132. package/dist/src/_internal/platform/networking/node/chatWebSocketManager.d.ts.map +1 -0
  133. package/dist/src/_internal/platform/networking/node/chatWebSocketManager.js +496 -0
  134. package/dist/src/_internal/platform/networking/node/chatWebSocketManager.js.map +1 -0
  135. package/dist/src/_internal/platform/networking/node/chatWebSocketTelemetry.d.ts +89 -0
  136. package/dist/src/_internal/platform/networking/node/chatWebSocketTelemetry.d.ts.map +1 -0
  137. package/dist/src/_internal/platform/networking/node/chatWebSocketTelemetry.js +269 -0
  138. package/dist/src/_internal/platform/networking/node/chatWebSocketTelemetry.js.map +1 -0
  139. package/dist/src/_internal/platform/otel/common/genAiAttributes.d.ts +104 -0
  140. package/dist/src/_internal/platform/otel/common/genAiAttributes.d.ts.map +1 -0
  141. package/dist/src/_internal/platform/otel/common/genAiAttributes.js +124 -0
  142. package/dist/src/_internal/platform/otel/common/genAiAttributes.js.map +1 -0
  143. package/dist/src/_internal/platform/otel/common/genAiEvents.d.ts +28 -0
  144. package/dist/src/_internal/platform/otel/common/genAiEvents.d.ts.map +1 -0
  145. package/dist/src/_internal/platform/otel/common/genAiEvents.js +91 -0
  146. package/dist/src/_internal/platform/otel/common/genAiEvents.js.map +1 -0
  147. package/dist/src/_internal/platform/otel/common/genAiMetrics.d.ts +30 -0
  148. package/dist/src/_internal/platform/otel/common/genAiMetrics.d.ts.map +1 -0
  149. package/dist/src/_internal/platform/otel/common/genAiMetrics.js +68 -0
  150. package/dist/src/_internal/platform/otel/common/genAiMetrics.js.map +1 -0
  151. package/dist/src/_internal/platform/otel/common/index.d.ts +8 -0
  152. package/dist/src/_internal/platform/otel/common/index.d.ts.map +1 -0
  153. package/dist/src/_internal/platform/otel/common/index.js +35 -0
  154. package/dist/src/_internal/platform/otel/common/index.js.map +1 -0
  155. package/dist/src/_internal/platform/otel/common/messageFormatters.d.ts +85 -0
  156. package/dist/src/_internal/platform/otel/common/messageFormatters.d.ts.map +1 -0
  157. package/dist/src/_internal/platform/otel/common/messageFormatters.js +122 -0
  158. package/dist/src/_internal/platform/otel/common/messageFormatters.js.map +1 -0
  159. package/dist/src/_internal/platform/otel/common/noopOtelService.d.ts +26 -0
  160. package/dist/src/_internal/platform/otel/common/noopOtelService.d.ts.map +1 -0
  161. package/dist/src/_internal/platform/otel/common/noopOtelService.js +51 -0
  162. package/dist/src/_internal/platform/otel/common/noopOtelService.js.map +1 -0
  163. package/dist/src/_internal/platform/otel/common/otelConfig.d.ts +35 -0
  164. package/dist/src/_internal/platform/otel/common/otelConfig.d.ts.map +1 -0
  165. package/dist/src/_internal/platform/otel/common/otelConfig.js +140 -0
  166. package/dist/src/_internal/platform/otel/common/otelConfig.js.map +1 -0
  167. package/dist/src/_internal/platform/otel/common/otelService.d.ts +160 -0
  168. package/dist/src/_internal/platform/otel/common/otelService.d.ts.map +1 -0
  169. package/dist/src/_internal/platform/otel/common/otelService.js +10 -0
  170. package/dist/src/_internal/platform/otel/common/otelService.js.map +1 -0
  171. package/dist/src/_internal/platform/proxyModels/node/proxyModelsService.d.ts.map +1 -1
  172. package/dist/src/_internal/platform/proxyModels/node/proxyModelsService.js +1 -0
  173. package/dist/src/_internal/platform/proxyModels/node/proxyModelsService.js.map +1 -1
  174. package/dist/src/main.d.ts.map +1 -1
  175. package/dist/src/main.js +10 -0
  176. package/dist/src/main.js.map +1 -1
  177. package/dist/src/package.json +267 -91
  178. package/package.json +4 -3
@@ -0,0 +1,496 @@
1
+ "use strict";
2
+ /*---------------------------------------------------------------------------------------------
3
+ * Copyright (c) Microsoft Corporation. All rights reserved.
4
+ * Licensed under the MIT License. See License.txt in the project root for license information.
5
+ *--------------------------------------------------------------------------------------------*/
6
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
7
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
8
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
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;
10
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
11
+ };
12
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
13
+ return function (target, key) { decorator(target, key, paramIndex); }
14
+ };
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.ChatWebSocketManager = exports.NullChatWebSocketManager = exports.IChatWebSocketManager = void 0;
17
+ const services_1 = require("../../../util/common/services");
18
+ const errors_1 = require("../../../util/vs/base/common/errors");
19
+ const event_1 = require("../../../util/vs/base/common/event");
20
+ const lifecycle_1 = require("../../../util/vs/base/common/lifecycle");
21
+ const capiClient_1 = require("../../endpoint/common/capiClient");
22
+ const logService_1 = require("../../log/common/logService");
23
+ const telemetry_1 = require("../../telemetry/common/telemetry");
24
+ const fetcherService_1 = require("../common/fetcherService");
25
+ const chatWebSocketTelemetry_1 = require("./chatWebSocketTelemetry");
26
+ exports.IChatWebSocketManager = (0, services_1.createServiceIdentifier)('IChatWebSocketManager');
27
+ /**
28
+ * No-op implementation for contexts where WebSocket is not available (web, tests, chat-lib).
29
+ */
30
+ class NullChatWebSocketManager {
31
+ async getOrCreateConnection(_conversationId, _turnId, _headers) {
32
+ throw new Error('WebSocket not available');
33
+ }
34
+ hasActiveConnection(_conversationId, _turnId) { return false; }
35
+ closeConnection(_conversationId, _turnId) { }
36
+ closeAll() { }
37
+ }
38
+ exports.NullChatWebSocketManager = NullChatWebSocketManager;
39
+ let ChatWebSocketManager = class ChatWebSocketManager extends lifecycle_1.Disposable {
40
+ constructor(_logService, _capiClientService, _telemetryService) {
41
+ super();
42
+ this._logService = _logService;
43
+ this._capiClientService = _capiClientService;
44
+ this._telemetryService = _telemetryService;
45
+ this._connections = new Map();
46
+ }
47
+ async getOrCreateConnection(conversationId, turnId, headers) {
48
+ const existing = this._connections.get(conversationId);
49
+ // Reuse the connection if it's for the same turn and still open.
50
+ if (existing?.turnId === turnId && existing.connection.isOpen) {
51
+ this._logService.debug(`[ChatWebSocketManager] Reusing connection for conversation ${conversationId} turn ${turnId}`);
52
+ return existing.connection;
53
+ }
54
+ if (existing) {
55
+ this._logService.debug(`[ChatWebSocketManager] Closing previous connection for conversation ${conversationId} (turn changed)`);
56
+ existing.connection.dispose();
57
+ this._connections.delete(conversationId);
58
+ }
59
+ const connection = new ChatWebSocketConnection(this._capiClientService, this._logService, this._telemetryService, conversationId, turnId, headers);
60
+ this._logService.debug(`[ChatWebSocketManager] Creating new connection for conversation ${conversationId} turn ${turnId}`);
61
+ this._connections.set(conversationId, { turnId, connection });
62
+ // Remove from map when disposed externally
63
+ connection.onDidDispose(() => {
64
+ const entry = this._connections.get(conversationId);
65
+ if (entry?.connection === connection) {
66
+ this._connections.delete(conversationId);
67
+ }
68
+ });
69
+ await connection.connect();
70
+ return connection;
71
+ }
72
+ hasActiveConnection(conversationId, turnId) {
73
+ const entry = this._connections.get(conversationId);
74
+ return !!entry && entry.turnId === turnId && entry.connection.isOpen;
75
+ }
76
+ closeConnection(conversationId, turnId) {
77
+ const entry = this._connections.get(conversationId);
78
+ if (entry) {
79
+ if (turnId && entry.turnId !== turnId) {
80
+ this._logService.debug(`[ChatWebSocketManager] Not closing connection for conversation ${conversationId}: requested turn ${turnId} does not match active turn ${entry.turnId}`);
81
+ return;
82
+ }
83
+ this._logService.debug(`[ChatWebSocketManager] Closing connection for conversation ${conversationId} turn ${turnId}`);
84
+ entry.connection.dispose();
85
+ this._connections.delete(conversationId);
86
+ }
87
+ }
88
+ closeAll() {
89
+ for (const entry of this._connections.values()) {
90
+ entry.connection.dispose();
91
+ }
92
+ this._connections.clear();
93
+ }
94
+ dispose() {
95
+ this.closeAll();
96
+ super.dispose();
97
+ }
98
+ };
99
+ exports.ChatWebSocketManager = ChatWebSocketManager;
100
+ exports.ChatWebSocketManager = ChatWebSocketManager = __decorate([
101
+ __param(0, logService_1.ILogService),
102
+ __param(1, capiClient_1.ICAPIClientService),
103
+ __param(2, telemetry_1.ITelemetryService)
104
+ ], ChatWebSocketManager);
105
+ function wsCloseCodeToString(code) {
106
+ switch (code) {
107
+ case 1000: return 'Normal Closure';
108
+ case 1001: return 'Going Away';
109
+ case 1002: return 'Protocol Error';
110
+ case 1003: return 'Unsupported Data';
111
+ case 1005: return 'No Status Received';
112
+ case 1006: return 'Abnormal Closure';
113
+ case 1007: return 'Invalid Payload';
114
+ case 1008: return 'Policy Violation';
115
+ case 1009: return 'Message Too Big';
116
+ case 1010: return 'Missing Extension';
117
+ case 1011: return 'Internal Error';
118
+ case 1012: return 'Service Restart';
119
+ case 1013: return 'Try Again Later';
120
+ case 1014: return 'Bad Gateway';
121
+ case 1015: return 'TLS Handshake Failed';
122
+ default: return 'Unknown';
123
+ }
124
+ }
125
+ class ChatWebSocketConnection extends lifecycle_1.Disposable {
126
+ constructor(_capiClientService, _logService, _telemetryService, _conversationId, _turnId, _headers) {
127
+ super();
128
+ this._capiClientService = _capiClientService;
129
+ this._logService = _logService;
130
+ this._telemetryService = _telemetryService;
131
+ this._conversationId = _conversationId;
132
+ this._turnId = _turnId;
133
+ this._headers = _headers;
134
+ this._state = 2 /* ConnectionState.Closed */;
135
+ this._onDidDispose = this._register(new event_1.Emitter());
136
+ this.onDidDispose = this._onDidDispose.event;
137
+ this._totalSentMessageCount = 0;
138
+ this._totalReceivedMessageCount = 0;
139
+ this._totalSentCharacters = 0;
140
+ this._totalReceivedCharacters = 0;
141
+ this._responseHeaders = new fetcherService_1.HeadersImpl({});
142
+ }
143
+ get isOpen() {
144
+ return this._state === 1 /* ConnectionState.Open */ && !!this._ws;
145
+ }
146
+ get statefulMarker() {
147
+ return this._statefulMarker;
148
+ }
149
+ get responseHeaders() {
150
+ return this._responseHeaders;
151
+ }
152
+ get _requestId() {
153
+ return this._responseHeaders.get('x-request-id') || '';
154
+ }
155
+ get _gitHubRequestId() {
156
+ return this._responseHeaders.get('x-github-request-id') || '';
157
+ }
158
+ async connect() {
159
+ if (this._state === 1 /* ConnectionState.Open */) {
160
+ return;
161
+ }
162
+ this._state = 0 /* ConnectionState.Connecting */;
163
+ this._connectStartTime = Date.now();
164
+ this._logService.debug(`[ChatWebSocketManager] Connecting WebSocket for conversation ${this._conversationId} turn ${this._turnId}`);
165
+ const connection = await this._capiClientService.createResponsesWebSocket({
166
+ headers: this._headers,
167
+ });
168
+ return new Promise((resolve, reject) => {
169
+ const ws = connection.webSocket;
170
+ const onOpen = () => {
171
+ cleanup();
172
+ this._state = 1 /* ConnectionState.Open */;
173
+ this._connectedTime = Date.now();
174
+ this._ws = ws;
175
+ this._responseHeaders = connection.responseHeaders;
176
+ this._setupMessageHandlers(ws);
177
+ const connectDurationMs = this._connectedTime - (this._connectStartTime ?? this._connectedTime);
178
+ this._logService.debug(`[ChatWebSocketManager] Connected for conversation ${this._conversationId} turn ${this._turnId}`);
179
+ chatWebSocketTelemetry_1.ChatWebSocketTelemetrySender.sendConnectedTelemetry(this._telemetryService, {
180
+ conversationId: this._conversationId,
181
+ turnId: this._turnId,
182
+ requestId: this._requestId,
183
+ gitHubRequestId: this._gitHubRequestId,
184
+ connectDurationMs,
185
+ });
186
+ resolve();
187
+ };
188
+ const onError = (event) => {
189
+ cleanup();
190
+ this._state = 2 /* ConnectionState.Closed */;
191
+ this._responseHeaders = connection.responseHeaders;
192
+ const errorMessage = event.error ? `${event.message}: ${(0, logService_1.collectSingleLineErrorMessage)(event.error)}` : event.message || 'WebSocket error';
193
+ const connectDurationMs = Date.now() - (this._connectStartTime ?? Date.now());
194
+ this._logService.error(`[ChatWebSocketManager] Connection error for conversation ${this._conversationId} turn ${this._turnId}: ${errorMessage}`);
195
+ chatWebSocketTelemetry_1.ChatWebSocketTelemetrySender.sendConnectErrorTelemetry(this._telemetryService, {
196
+ conversationId: this._conversationId,
197
+ turnId: this._turnId,
198
+ requestId: this._requestId,
199
+ gitHubRequestId: this._gitHubRequestId,
200
+ error: errorMessage,
201
+ connectDurationMs,
202
+ });
203
+ reject(new Error(errorMessage));
204
+ };
205
+ const onClose = (event) => {
206
+ cleanup();
207
+ this._state = 2 /* ConnectionState.Closed */;
208
+ const connectDurationMs = Date.now() - (this._connectStartTime ?? Date.now());
209
+ const closeCodeDescription = wsCloseCodeToString(event.code);
210
+ this._logService.debug(`[ChatWebSocketManager] Connection closed during setup for conversation ${this._conversationId} turn ${this._turnId} (code: ${event.code} ${closeCodeDescription}, reason: ${event.reason || '<empty>'}, wasClean: ${event.wasClean})`);
211
+ chatWebSocketTelemetry_1.ChatWebSocketTelemetrySender.sendCloseDuringSetupTelemetry(this._telemetryService, {
212
+ conversationId: this._conversationId,
213
+ turnId: this._turnId,
214
+ requestId: this._requestId,
215
+ gitHubRequestId: this._gitHubRequestId,
216
+ closeCode: event.code,
217
+ closeReason: closeCodeDescription,
218
+ closeEventReason: event.reason,
219
+ closeEventWasClean: String(event.wasClean),
220
+ connectDurationMs,
221
+ });
222
+ reject(new Error('WebSocket closed during connection setup'));
223
+ };
224
+ const cleanup = () => {
225
+ ws.removeEventListener('open', onOpen);
226
+ ws.removeEventListener('error', onError);
227
+ ws.removeEventListener('close', onClose);
228
+ };
229
+ ws.addEventListener('open', onOpen);
230
+ ws.addEventListener('error', onError);
231
+ ws.addEventListener('close', onClose);
232
+ });
233
+ }
234
+ _setupMessageHandlers(ws) {
235
+ ws.addEventListener('message', (event) => {
236
+ if (typeof event.data !== 'string') {
237
+ return; // Only process text messages
238
+ }
239
+ const receivedMessageCharacters = event.data.length;
240
+ this._totalReceivedMessageCount += 1;
241
+ this._totalReceivedCharacters += receivedMessageCharacters;
242
+ const connectionDurationMs = Date.now() - (this._connectedTime ?? Date.now());
243
+ let parsed;
244
+ try {
245
+ parsed = JSON.parse(event.data);
246
+ }
247
+ catch (error) {
248
+ const parseErrorMessage = (0, logService_1.collectSingleLineErrorMessage)(error) || 'Failed to parse websocket message';
249
+ this._logService.error(`[ChatWebSocketManager] Failed to parse message for conversation ${this._conversationId} turn ${this._turnId}: ${parseErrorMessage}`);
250
+ chatWebSocketTelemetry_1.ChatWebSocketTelemetrySender.sendMessageParseErrorTelemetry(this._telemetryService, {
251
+ conversationId: this._conversationId,
252
+ turnId: this._turnId,
253
+ requestId: this._requestId,
254
+ gitHubRequestId: this._gitHubRequestId,
255
+ error: parseErrorMessage,
256
+ connectionDurationMs,
257
+ totalSentMessageCount: this._totalSentMessageCount,
258
+ totalReceivedMessageCount: this._totalReceivedMessageCount,
259
+ receivedMessageCharacters,
260
+ totalSentCharacters: this._totalSentCharacters,
261
+ totalReceivedCharacters: this._totalReceivedCharacters,
262
+ });
263
+ return;
264
+ }
265
+ if (parsed.type === 'response.completed') {
266
+ this._statefulMarker = parsed.response.id;
267
+ }
268
+ this._activeRequest?.handleEvent(parsed);
269
+ });
270
+ ws.addEventListener('close', (event) => {
271
+ this._state = 2 /* ConnectionState.Closed */;
272
+ const connectionDurationMs = Date.now() - (this._connectedTime ?? Date.now());
273
+ const closeCodeDescription = wsCloseCodeToString(event.code);
274
+ this._logService.debug(`[ChatWebSocketManager] Connection closed for conversation ${this._conversationId} turn ${this._turnId} (code: ${event.code} ${closeCodeDescription}, reason: ${event.reason || '<empty>'}, wasClean: ${event.wasClean})`);
275
+ chatWebSocketTelemetry_1.ChatWebSocketTelemetrySender.sendCloseTelemetry(this._telemetryService, {
276
+ conversationId: this._conversationId,
277
+ turnId: this._turnId,
278
+ requestId: this._requestId,
279
+ gitHubRequestId: this._gitHubRequestId,
280
+ closeCode: event.code,
281
+ closeReason: closeCodeDescription,
282
+ closeEventReason: event.reason,
283
+ closeEventWasClean: String(event.wasClean),
284
+ connectionDurationMs,
285
+ totalSentMessageCount: this._totalSentMessageCount,
286
+ totalReceivedMessageCount: this._totalReceivedMessageCount,
287
+ totalSentCharacters: this._totalSentCharacters,
288
+ totalReceivedCharacters: this._totalReceivedCharacters,
289
+ });
290
+ this._activeRequest?.handleConnectionClose(event.code, event.reason);
291
+ this._activeRequest = undefined;
292
+ });
293
+ ws.addEventListener('error', (event) => {
294
+ const errorMessage = event.error ? `${event.message}: ${(0, logService_1.collectSingleLineErrorMessage)(event.error)}` : event.message || 'WebSocket error';
295
+ const connectionDurationMs = Date.now() - (this._connectedTime ?? Date.now());
296
+ this._logService.error(`[ChatWebSocketManager] Error for conversation ${this._conversationId} turn ${this._turnId}: ${errorMessage}`);
297
+ chatWebSocketTelemetry_1.ChatWebSocketTelemetrySender.sendErrorTelemetry(this._telemetryService, {
298
+ conversationId: this._conversationId,
299
+ turnId: this._turnId,
300
+ requestId: this._requestId,
301
+ gitHubRequestId: this._gitHubRequestId,
302
+ error: errorMessage,
303
+ connectionDurationMs,
304
+ totalSentMessageCount: this._totalSentMessageCount,
305
+ totalReceivedMessageCount: this._totalReceivedMessageCount,
306
+ totalSentCharacters: this._totalSentCharacters,
307
+ totalReceivedCharacters: this._totalReceivedCharacters,
308
+ });
309
+ this._activeRequest?.handleConnectionError(new Error(errorMessage));
310
+ });
311
+ }
312
+ sendRequest(body, token) {
313
+ if (!this._ws || this._state !== 1 /* ConnectionState.Open */) {
314
+ throw new Error('WebSocket is not connected');
315
+ }
316
+ const statefulMarkerMatched = this._statefulMarker === body.previous_response_id;
317
+ const statefulMarkerPrefix = this._statefulMarker?.slice(0, 5).concat('...') ?? '<none>';
318
+ const previousResponsePrefix = body.previous_response_id?.slice(0, 5).concat('...') ?? '<none>';
319
+ if (statefulMarkerMatched) {
320
+ this._logService.trace(`[ChatWebSocketManager] WebSocket stateful marker matches previous_response_id (${previousResponsePrefix})`);
321
+ }
322
+ else {
323
+ this._logService.info(`[ChatWebSocketManager] WebSocket stateful marker (${statefulMarkerPrefix}) does not match previous_response_id (${previousResponsePrefix})`);
324
+ }
325
+ // Cancel any previous in-flight request
326
+ this._activeRequest?.handleSuperseded();
327
+ const requestStartTime = Date.now();
328
+ const requestStartSentMessageCount = this._totalSentMessageCount;
329
+ const requestStartReceivedMessageCount = this._totalReceivedMessageCount;
330
+ const requestStartSentCharacters = this._totalSentCharacters;
331
+ const requestStartReceivedCharacters = this._totalReceivedCharacters;
332
+ const request = new ChatWebSocketActiveRequest();
333
+ request.onDidSettle(({ outcome, closeCode, closeReason, serverErrorMessage, serverErrorCode }) => {
334
+ const connectionDurationMs = Date.now() - (this._connectedTime ?? Date.now());
335
+ const requestDurationMs = Date.now() - requestStartTime;
336
+ const requestSentMessageCount = this._totalSentMessageCount - requestStartSentMessageCount;
337
+ const requestReceivedMessageCount = this._totalReceivedMessageCount - requestStartReceivedMessageCount;
338
+ const requestSentCharacters = this._totalSentCharacters - requestStartSentCharacters;
339
+ const requestReceivedCharacters = this._totalReceivedCharacters - requestStartReceivedCharacters;
340
+ chatWebSocketTelemetry_1.ChatWebSocketTelemetrySender.sendRequestOutcomeTelemetry(this._telemetryService, {
341
+ conversationId: this._conversationId,
342
+ turnId: this._turnId,
343
+ requestId: this._requestId,
344
+ gitHubRequestId: this._gitHubRequestId,
345
+ requestOutcome: outcome,
346
+ statefulMarkerMatched,
347
+ connectionDurationMs,
348
+ requestDurationMs,
349
+ totalSentMessageCount: this._totalSentMessageCount,
350
+ totalReceivedMessageCount: this._totalReceivedMessageCount,
351
+ totalSentCharacters: this._totalSentCharacters,
352
+ totalReceivedCharacters: this._totalReceivedCharacters,
353
+ requestSentMessageCount,
354
+ requestReceivedMessageCount,
355
+ requestSentCharacters,
356
+ requestReceivedCharacters,
357
+ closeCode,
358
+ closeReason,
359
+ serverErrorMessage,
360
+ serverErrorCode,
361
+ });
362
+ });
363
+ this._activeRequest = request;
364
+ // Handle cancellation
365
+ const cancelDisposable = token.onCancellationRequested(() => {
366
+ if (this._activeRequest === request) {
367
+ request.handleCancellation();
368
+ this._activeRequest = undefined;
369
+ }
370
+ });
371
+ request.done.finally(() => cancelDisposable.dispose());
372
+ const { stream: _, ...rest } = body;
373
+ const message = {
374
+ type: 'response.create',
375
+ ...rest,
376
+ };
377
+ const serializedMessage = JSON.stringify(message);
378
+ const sentMessageCharacters = serializedMessage.length;
379
+ this._totalSentMessageCount += 1;
380
+ this._totalSentCharacters += sentMessageCharacters;
381
+ const connectionDurationMs = Date.now() - (this._connectedTime ?? Date.now());
382
+ this._logService.debug(`[ChatWebSocketManager] Sending request for conversation ${this._conversationId} turn ${this._turnId} (totalSentMessageCount: ${this._totalSentMessageCount}, sentMessageCharacters: ${sentMessageCharacters})`);
383
+ chatWebSocketTelemetry_1.ChatWebSocketTelemetrySender.sendRequestSentTelemetry(this._telemetryService, {
384
+ conversationId: this._conversationId,
385
+ turnId: this._turnId,
386
+ requestId: this._requestId,
387
+ gitHubRequestId: this._gitHubRequestId,
388
+ statefulMarkerMatched,
389
+ connectionDurationMs,
390
+ totalSentMessageCount: this._totalSentMessageCount,
391
+ totalReceivedMessageCount: this._totalReceivedMessageCount,
392
+ sentMessageCharacters,
393
+ totalSentCharacters: this._totalSentCharacters,
394
+ totalReceivedCharacters: this._totalReceivedCharacters,
395
+ });
396
+ this._ws.send(serializedMessage);
397
+ return request;
398
+ }
399
+ dispose() {
400
+ this._activeRequest?.handleConnectionDisposed();
401
+ this._activeRequest = undefined;
402
+ if (this._ws) {
403
+ this._ws.close();
404
+ this._ws = undefined;
405
+ }
406
+ this._state = 2 /* ConnectionState.Closed */;
407
+ this._onDidDispose.fire();
408
+ super.dispose();
409
+ }
410
+ }
411
+ class ChatWebSocketActiveRequest {
412
+ constructor() {
413
+ this._onEvent = new event_1.Emitter();
414
+ this.onEvent = this._onEvent.event;
415
+ this._onError = new event_1.Emitter();
416
+ this.onError = this._onError.event;
417
+ this._onComplete = new event_1.Emitter();
418
+ this.onComplete = this._onComplete.event;
419
+ this._settled = false;
420
+ this.done = new Promise((resolve, reject) => {
421
+ this._resolve = resolve;
422
+ this._reject = reject;
423
+ });
424
+ }
425
+ onDidSettle(callback) {
426
+ this._onDidSettle = callback;
427
+ }
428
+ handleEvent(event) {
429
+ if (this._settled) {
430
+ return;
431
+ }
432
+ if (event.type === 'error') {
433
+ const serverErrorMessage = event.message || event.error?.message || 'Server error';
434
+ const serverErrorCode = event.code || event.error?.code || undefined;
435
+ const errorMessage = serverErrorCode ? `${serverErrorMessage} (${serverErrorCode})` : serverErrorMessage;
436
+ const error = new Error(errorMessage);
437
+ this._finalizeError('server_error', error, undefined, undefined, serverErrorMessage, serverErrorCode);
438
+ return;
439
+ }
440
+ this._onEvent.fire(event);
441
+ if (event.type === 'response.completed') {
442
+ this._onComplete.fire();
443
+ this._finalizeSuccess('completed');
444
+ }
445
+ }
446
+ handleConnectionClose(code, reason) {
447
+ if (this._settled) {
448
+ return;
449
+ }
450
+ const error = new Error(`WebSocket closed unexpectedly (code: ${code} ${wsCloseCodeToString(code)}${reason ? `, reason: ${reason}` : ''})`);
451
+ this._finalizeError('connection_closed', error, code, reason);
452
+ }
453
+ handleConnectionError(error) {
454
+ if (this._settled) {
455
+ return;
456
+ }
457
+ this._finalizeError('connection_error', error);
458
+ }
459
+ handleSuperseded() {
460
+ if (this._settled) {
461
+ return;
462
+ }
463
+ this._finalizeError('superseded', new Error('Request superseded by new request'));
464
+ }
465
+ handleCancellation() {
466
+ if (this._settled) {
467
+ return;
468
+ }
469
+ this._finalizeError('canceled', new errors_1.CancellationError());
470
+ }
471
+ handleConnectionDisposed() {
472
+ if (this._settled) {
473
+ return;
474
+ }
475
+ this._finalizeError('connection_disposed', new Error('Connection disposed'));
476
+ }
477
+ _finalizeSuccess(outcome) {
478
+ this._settled = true;
479
+ this._onDidSettle?.({ outcome });
480
+ this._resolve();
481
+ this._dispose();
482
+ }
483
+ _finalizeError(outcome, error, closeCode, closeReason, serverErrorMessage, serverErrorCode) {
484
+ this._onError.fire(error);
485
+ this._settled = true;
486
+ this._onDidSettle?.({ outcome, closeCode, closeReason, serverErrorMessage, serverErrorCode });
487
+ this._reject(error);
488
+ this._dispose();
489
+ }
490
+ _dispose() {
491
+ this._onEvent.dispose();
492
+ this._onError.dispose();
493
+ this._onComplete.dispose();
494
+ }
495
+ }
496
+ //# sourceMappingURL=chatWebSocketManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatWebSocketManager.js","sourceRoot":"","sources":["../../../../../../src/_internal/platform/networking/node/chatWebSocketManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,89 @@
1
+ import { ITelemetryService } from '../../telemetry/common/telemetry';
2
+ interface IChatWebSocketBaseTelemetryProperties {
3
+ conversationId: string;
4
+ turnId: string;
5
+ requestId: string;
6
+ gitHubRequestId: string;
7
+ }
8
+ export interface IChatWebSocketConnectedTelemetryProperties extends IChatWebSocketBaseTelemetryProperties {
9
+ connectDurationMs: number;
10
+ }
11
+ export interface IChatWebSocketConnectErrorTelemetryProperties extends IChatWebSocketBaseTelemetryProperties {
12
+ error: string;
13
+ connectDurationMs: number;
14
+ }
15
+ export interface IChatWebSocketCloseTelemetryProperties extends IChatWebSocketBaseTelemetryProperties {
16
+ closeCode: number;
17
+ closeReason: string;
18
+ closeEventReason: string;
19
+ closeEventWasClean: string;
20
+ connectionDurationMs: number;
21
+ totalSentMessageCount: number;
22
+ totalReceivedMessageCount: number;
23
+ totalSentCharacters: number;
24
+ totalReceivedCharacters: number;
25
+ }
26
+ export interface IChatWebSocketErrorTelemetryProperties extends IChatWebSocketBaseTelemetryProperties {
27
+ error: string;
28
+ connectionDurationMs: number;
29
+ totalSentMessageCount: number;
30
+ totalReceivedMessageCount: number;
31
+ totalSentCharacters: number;
32
+ totalReceivedCharacters: number;
33
+ }
34
+ export interface IChatWebSocketCloseDuringSetupTelemetryProperties extends IChatWebSocketBaseTelemetryProperties {
35
+ closeCode: number;
36
+ closeReason: string;
37
+ closeEventReason: string;
38
+ closeEventWasClean: string;
39
+ connectDurationMs: number;
40
+ }
41
+ export interface IChatWebSocketRequestSentTelemetryProperties extends IChatWebSocketBaseTelemetryProperties {
42
+ statefulMarkerMatched: boolean;
43
+ connectionDurationMs: number;
44
+ totalSentMessageCount: number;
45
+ totalReceivedMessageCount: number;
46
+ sentMessageCharacters: number;
47
+ totalSentCharacters: number;
48
+ totalReceivedCharacters: number;
49
+ }
50
+ export interface IChatWebSocketMessageParseErrorTelemetryProperties extends IChatWebSocketBaseTelemetryProperties {
51
+ error: string;
52
+ connectionDurationMs: number;
53
+ totalSentMessageCount: number;
54
+ totalReceivedMessageCount: number;
55
+ receivedMessageCharacters: number;
56
+ totalSentCharacters: number;
57
+ totalReceivedCharacters: number;
58
+ }
59
+ export type ChatWebSocketRequestOutcome = 'completed' | 'server_error' | 'canceled' | 'superseded' | 'connection_closed' | 'connection_disposed' | 'connection_error';
60
+ export interface IChatWebSocketRequestOutcomeTelemetryProperties extends IChatWebSocketBaseTelemetryProperties {
61
+ requestOutcome: ChatWebSocketRequestOutcome;
62
+ statefulMarkerMatched: boolean;
63
+ connectionDurationMs: number;
64
+ requestDurationMs: number;
65
+ totalSentMessageCount: number;
66
+ totalReceivedMessageCount: number;
67
+ totalSentCharacters: number;
68
+ totalReceivedCharacters: number;
69
+ requestSentMessageCount: number;
70
+ requestReceivedMessageCount: number;
71
+ requestSentCharacters: number;
72
+ requestReceivedCharacters: number;
73
+ closeCode?: number;
74
+ closeReason?: string;
75
+ serverErrorMessage?: string;
76
+ serverErrorCode?: string;
77
+ }
78
+ export declare class ChatWebSocketTelemetrySender {
79
+ static sendConnectedTelemetry(telemetryService: ITelemetryService, properties: IChatWebSocketConnectedTelemetryProperties): void;
80
+ static sendConnectErrorTelemetry(telemetryService: ITelemetryService, properties: IChatWebSocketConnectErrorTelemetryProperties): void;
81
+ static sendCloseTelemetry(telemetryService: ITelemetryService, properties: IChatWebSocketCloseTelemetryProperties): void;
82
+ static sendErrorTelemetry(telemetryService: ITelemetryService, properties: IChatWebSocketErrorTelemetryProperties): void;
83
+ static sendCloseDuringSetupTelemetry(telemetryService: ITelemetryService, properties: IChatWebSocketCloseDuringSetupTelemetryProperties): void;
84
+ static sendRequestSentTelemetry(telemetryService: ITelemetryService, properties: IChatWebSocketRequestSentTelemetryProperties): void;
85
+ static sendMessageParseErrorTelemetry(telemetryService: ITelemetryService, properties: IChatWebSocketMessageParseErrorTelemetryProperties): void;
86
+ static sendRequestOutcomeTelemetry(telemetryService: ITelemetryService, properties: IChatWebSocketRequestOutcomeTelemetryProperties): void;
87
+ }
88
+ export {};
89
+ //# sourceMappingURL=chatWebSocketTelemetry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatWebSocketTelemetry.d.ts","sourceRoot":"","sources":["../../../../../../src/_internal/platform/networking/node/chatWebSocketTelemetry.ts"],"names":[],"mappings":"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"}