@vscode/chat-lib 0.4.1-9 → 0.5.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.
- package/dist/src/_internal/extension/byok/node/openAIEndpoint.d.ts +2 -1
- package/dist/src/_internal/extension/byok/node/openAIEndpoint.d.ts.map +1 -1
- package/dist/src/_internal/extension/byok/node/openAIEndpoint.js +6 -7
- package/dist/src/_internal/extension/byok/node/openAIEndpoint.js.map +1 -1
- package/dist/src/_internal/extension/common/constants.d.ts +0 -1
- package/dist/src/_internal/extension/common/constants.d.ts.map +1 -1
- package/dist/src/_internal/extension/common/constants.js.map +1 -1
- package/dist/src/_internal/extension/inlineEdits/node/nextEditProvider.d.ts +9 -0
- package/dist/src/_internal/extension/inlineEdits/node/nextEditProvider.d.ts.map +1 -1
- package/dist/src/_internal/extension/inlineEdits/node/nextEditProvider.js +71 -11
- package/dist/src/_internal/extension/inlineEdits/node/nextEditProvider.js.map +1 -1
- package/dist/src/_internal/extension/prompt/node/chatMLFetcher.d.ts +17 -1
- package/dist/src/_internal/extension/prompt/node/chatMLFetcher.d.ts.map +1 -1
- package/dist/src/_internal/extension/prompt/node/chatMLFetcher.js +345 -57
- package/dist/src/_internal/extension/prompt/node/chatMLFetcher.js.map +1 -1
- package/dist/src/_internal/extension/prompt/node/chatMLFetcherTelemetry.d.ts +6 -3
- package/dist/src/_internal/extension/prompt/node/chatMLFetcherTelemetry.d.ts.map +1 -1
- package/dist/src/_internal/extension/prompt/node/chatMLFetcherTelemetry.js +9 -3
- package/dist/src/_internal/extension/prompt/node/chatMLFetcherTelemetry.js.map +1 -1
- package/dist/src/_internal/extension/xtab/node/xtabEndpoint.d.ts +2 -1
- package/dist/src/_internal/extension/xtab/node/xtabEndpoint.d.ts.map +1 -1
- package/dist/src/_internal/extension/xtab/node/xtabEndpoint.js +6 -3
- package/dist/src/_internal/extension/xtab/node/xtabEndpoint.js.map +1 -1
- package/dist/src/_internal/extension/xtab/node/xtabNextCursorPredictor.d.ts.map +1 -1
- package/dist/src/_internal/extension/xtab/node/xtabNextCursorPredictor.js +1 -0
- package/dist/src/_internal/extension/xtab/node/xtabNextCursorPredictor.js.map +1 -1
- package/dist/src/_internal/extension/xtab/node/xtabProvider.d.ts +2 -0
- package/dist/src/_internal/extension/xtab/node/xtabProvider.d.ts.map +1 -1
- package/dist/src/_internal/extension/xtab/node/xtabProvider.js +14 -0
- package/dist/src/_internal/extension/xtab/node/xtabProvider.js.map +1 -1
- package/dist/src/_internal/platform/chat/common/commonTypes.d.ts +2 -1
- package/dist/src/_internal/platform/chat/common/commonTypes.d.ts.map +1 -1
- package/dist/src/_internal/platform/chat/common/commonTypes.js +61 -17
- package/dist/src/_internal/platform/chat/common/commonTypes.js.map +1 -1
- package/dist/src/_internal/platform/configuration/common/configurationService.d.ts +14 -2
- package/dist/src/_internal/platform/configuration/common/configurationService.d.ts.map +1 -1
- package/dist/src/_internal/platform/configuration/common/configurationService.js +29 -3
- package/dist/src/_internal/platform/configuration/common/configurationService.js.map +1 -1
- package/dist/src/_internal/platform/endpoint/common/capiClient.d.ts.map +1 -1
- package/dist/src/_internal/platform/endpoint/common/capiClient.js +1 -0
- package/dist/src/_internal/platform/endpoint/common/capiClient.js.map +1 -1
- package/dist/src/_internal/platform/endpoint/common/chatModelCapabilities.d.ts +1 -0
- package/dist/src/_internal/platform/endpoint/common/chatModelCapabilities.d.ts.map +1 -1
- package/dist/src/_internal/platform/endpoint/common/chatModelCapabilities.js +20 -4
- package/dist/src/_internal/platform/endpoint/common/chatModelCapabilities.js.map +1 -1
- package/dist/src/_internal/platform/endpoint/common/endpointProvider.d.ts +3 -1
- package/dist/src/_internal/platform/endpoint/common/endpointProvider.d.ts.map +1 -1
- package/dist/src/_internal/platform/endpoint/common/endpointProvider.js +1 -0
- package/dist/src/_internal/platform/endpoint/common/endpointProvider.js.map +1 -1
- package/dist/src/_internal/platform/endpoint/node/autoChatEndpoint.d.ts +2 -1
- package/dist/src/_internal/platform/endpoint/node/autoChatEndpoint.d.ts.map +1 -1
- package/dist/src/_internal/platform/endpoint/node/autoChatEndpoint.js +6 -3
- package/dist/src/_internal/platform/endpoint/node/autoChatEndpoint.js.map +1 -1
- package/dist/src/_internal/platform/endpoint/node/chatEndpoint.d.ts +6 -2
- package/dist/src/_internal/platform/endpoint/node/chatEndpoint.d.ts.map +1 -1
- package/dist/src/_internal/platform/endpoint/node/chatEndpoint.js +34 -12
- package/dist/src/_internal/platform/endpoint/node/chatEndpoint.js.map +1 -1
- package/dist/src/_internal/platform/endpoint/node/copilotChatEndpoint.d.ts +2 -1
- package/dist/src/_internal/platform/endpoint/node/copilotChatEndpoint.d.ts.map +1 -1
- package/dist/src/_internal/platform/endpoint/node/copilotChatEndpoint.js +5 -3
- package/dist/src/_internal/platform/endpoint/node/copilotChatEndpoint.js.map +1 -1
- package/dist/src/_internal/platform/endpoint/node/messagesApi.d.ts.map +1 -1
- package/dist/src/_internal/platform/endpoint/node/messagesApi.js +55 -5
- package/dist/src/_internal/platform/endpoint/node/messagesApi.js.map +1 -1
- package/dist/src/_internal/platform/endpoint/node/proxyXtabEndpoint.d.ts.map +1 -1
- package/dist/src/_internal/platform/endpoint/node/proxyXtabEndpoint.js +1 -0
- package/dist/src/_internal/platform/endpoint/node/proxyXtabEndpoint.js.map +1 -1
- package/dist/src/_internal/platform/endpoint/node/responsesApi.d.ts +1 -0
- package/dist/src/_internal/platform/endpoint/node/responsesApi.d.ts.map +1 -1
- package/dist/src/_internal/platform/endpoint/node/responsesApi.js +14 -10
- package/dist/src/_internal/platform/endpoint/node/responsesApi.js.map +1 -1
- package/dist/src/_internal/platform/git/common/gitService.d.ts +4 -0
- package/dist/src/_internal/platform/git/common/gitService.d.ts.map +1 -1
- package/dist/src/_internal/platform/git/common/gitService.js.map +1 -1
- package/dist/src/_internal/platform/github/common/githubAPI.d.ts +1 -0
- package/dist/src/_internal/platform/github/common/githubAPI.d.ts.map +1 -1
- package/dist/src/_internal/platform/github/common/githubAPI.js +2 -0
- package/dist/src/_internal/platform/github/common/githubAPI.js.map +1 -1
- package/dist/src/_internal/platform/github/common/githubService.d.ts +10 -0
- package/dist/src/_internal/platform/github/common/githubService.d.ts.map +1 -1
- package/dist/src/_internal/platform/github/common/githubService.js +38 -0
- package/dist/src/_internal/platform/github/common/githubService.js.map +1 -1
- package/dist/src/_internal/platform/github/common/nullOctokitServiceImpl.d.ts +2 -1
- package/dist/src/_internal/platform/github/common/nullOctokitServiceImpl.d.ts.map +1 -1
- package/dist/src/_internal/platform/github/common/nullOctokitServiceImpl.js +3 -0
- package/dist/src/_internal/platform/github/common/nullOctokitServiceImpl.js.map +1 -1
- package/dist/src/_internal/platform/inlineEdits/common/dataTypes/xtabPromptOptions.d.ts +1 -1
- package/dist/src/_internal/platform/inlineEdits/common/dataTypes/xtabPromptOptions.d.ts.map +1 -1
- package/dist/src/_internal/platform/inlineEdits/common/dataTypes/xtabPromptOptions.js +1 -1
- package/dist/src/_internal/platform/inlineEdits/common/dataTypes/xtabPromptOptions.js.map +1 -1
- package/dist/src/_internal/platform/networking/common/anthropic.d.ts +8 -1
- package/dist/src/_internal/platform/networking/common/anthropic.d.ts.map +1 -1
- package/dist/src/_internal/platform/networking/common/anthropic.js +20 -4
- package/dist/src/_internal/platform/networking/common/anthropic.js.map +1 -1
- package/dist/src/_internal/platform/networking/common/fetcherService.d.ts +17 -0
- package/dist/src/_internal/platform/networking/common/fetcherService.d.ts.map +1 -1
- package/dist/src/_internal/platform/networking/common/fetcherService.js +27 -1
- package/dist/src/_internal/platform/networking/common/fetcherService.js.map +1 -1
- package/dist/src/_internal/platform/networking/common/networking.d.ts +7 -0
- package/dist/src/_internal/platform/networking/common/networking.d.ts.map +1 -1
- package/dist/src/_internal/platform/networking/common/networking.js +4 -5
- package/dist/src/_internal/platform/networking/common/networking.js.map +1 -1
- package/dist/src/_internal/platform/networking/node/chatWebSocketManager.d.ts +76 -0
- package/dist/src/_internal/platform/networking/node/chatWebSocketManager.d.ts.map +1 -0
- package/dist/src/_internal/platform/networking/node/chatWebSocketManager.js +480 -0
- package/dist/src/_internal/platform/networking/node/chatWebSocketManager.js.map +1 -0
- package/dist/src/_internal/platform/networking/node/chatWebSocketTelemetry.d.ts +87 -0
- package/dist/src/_internal/platform/networking/node/chatWebSocketTelemetry.d.ts.map +1 -0
- package/dist/src/_internal/platform/networking/node/chatWebSocketTelemetry.js +265 -0
- package/dist/src/_internal/platform/networking/node/chatWebSocketTelemetry.js.map +1 -0
- package/dist/src/_internal/platform/otel/common/genAiAttributes.d.ts +85 -0
- package/dist/src/_internal/platform/otel/common/genAiAttributes.d.ts.map +1 -0
- package/dist/src/_internal/platform/otel/common/genAiAttributes.js +105 -0
- package/dist/src/_internal/platform/otel/common/genAiAttributes.js.map +1 -0
- package/dist/src/_internal/platform/otel/common/genAiEvents.d.ts +28 -0
- package/dist/src/_internal/platform/otel/common/genAiEvents.d.ts.map +1 -0
- package/dist/src/_internal/platform/otel/common/genAiEvents.js +91 -0
- package/dist/src/_internal/platform/otel/common/genAiEvents.js.map +1 -0
- package/dist/src/_internal/platform/otel/common/genAiMetrics.d.ts +30 -0
- package/dist/src/_internal/platform/otel/common/genAiMetrics.d.ts.map +1 -0
- package/dist/src/_internal/platform/otel/common/genAiMetrics.js +68 -0
- package/dist/src/_internal/platform/otel/common/genAiMetrics.js.map +1 -0
- package/dist/src/_internal/platform/otel/common/index.d.ts +8 -0
- package/dist/src/_internal/platform/otel/common/index.d.ts.map +1 -0
- package/dist/src/_internal/platform/otel/common/index.js +35 -0
- package/dist/src/_internal/platform/otel/common/index.js.map +1 -0
- package/dist/src/_internal/platform/otel/common/messageFormatters.d.ts +85 -0
- package/dist/src/_internal/platform/otel/common/messageFormatters.d.ts.map +1 -0
- package/dist/src/_internal/platform/otel/common/messageFormatters.js +122 -0
- package/dist/src/_internal/platform/otel/common/messageFormatters.js.map +1 -0
- package/dist/src/_internal/platform/otel/common/noopOtelService.d.ts +23 -0
- package/dist/src/_internal/platform/otel/common/noopOtelService.d.ts.map +1 -0
- package/dist/src/_internal/platform/otel/common/noopOtelService.js +46 -0
- package/dist/src/_internal/platform/otel/common/noopOtelService.js.map +1 -0
- package/dist/src/_internal/platform/otel/common/otelConfig.d.ts +35 -0
- package/dist/src/_internal/platform/otel/common/otelConfig.d.ts.map +1 -0
- package/dist/src/_internal/platform/otel/common/otelConfig.js +140 -0
- package/dist/src/_internal/platform/otel/common/otelConfig.js.map +1 -0
- package/dist/src/_internal/platform/otel/common/otelService.d.ts +100 -0
- package/dist/src/_internal/platform/otel/common/otelService.d.ts.map +1 -0
- package/dist/src/_internal/platform/otel/common/otelService.js +10 -0
- package/dist/src/_internal/platform/otel/common/otelService.js.map +1 -0
- package/dist/src/main.d.ts.map +1 -1
- package/dist/src/main.js +9 -0
- package/dist/src/main.js.map +1 -1
- package/dist/src/package.json +226 -80
- package/package.json +3 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"networking.js","sourceRoot":"","sources":["../../../../../../src/_internal/platform/networking/common/networking.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;;;AA2IhG,sEAKC;
|
|
1
|
+
{"version":3,"file":"networking.js","sourceRoot":"","sources":["../../../../../../src/_internal/platform/networking/common/networking.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;;;AA2IhG,sEAKC;AAyJD,sDAgBC;AAoHD,4DAWC;AAED,kCAKC;AAED,gCAKC;AAjcD,4DAAwE;AACxE,8DAA2E;AAE3E,gEAAwE;AAIxE,iEAAsE;AAGtE,gEAA0F;AAI1F,qDAA2H;AAC3H,qCAAmH;AAoBtG,QAAA,sBAAsB,GAAG,qCAAqC,CAAC;AAW5E,sDAAsD;AACtD,MAAM,gBAAgB,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,aAAa;AAuFjD,SAAgB,6BAA6B,CAAC,oBAA8C;IAC3F,IAAI,OAAO,oBAAoB,KAAK,QAAQ,EAAE,CAAC;QAC9C,OAAO,oBAAoB,CAAC;IAC7B,CAAC;IACD,OAAO,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;AAC7C,CAAC;AAwJD,sEAAsE;AACtE,SAAgB,qBAAqB,CAAC,OAAmC,EAAE,KAAa,EAAE,QAAuC;IAChI,qFAAqF;IACrF,2EAA2E;IAC3E,wEAAwE;IAExE,MAAM,OAAO,GAAkB;QAC9B,QAAQ,EAAE,IAAA,yBAAgB,EAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC;QACtD,KAAK;QACL,eAAe;KACf,CAAC;IAEF,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACzB,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,OAAO,CAAC;AAChB,CAAC;AA+BD,SAAS,cAAc,CACtB,QAA0B,EAC1B,OAA+B;IAE/B,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,gCAAe,CAAC,CAAC;IAC9C,MAAM,gBAAgB,GAAG,QAAQ,CAAC,GAAG,CAAC,6BAAiB,CAAC,CAAC;IACzD,MAAM,iBAAiB,GAAG,QAAQ,CAAC,GAAG,CAAC,+BAAkB,CAAC,CAAC;IAC3D,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,GAAG,IAAI,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAE9J,4EAA4E;IAC5E,MAAM,QAAQ,GAAG,OAAO,aAAa,KAAK,QAAQ,IAAI,MAAM,IAAI,aAAa,CAAC,CAAC,CAAC;QAC/E,oBAAoB,EAAE,CAAC;QACvB,oBAAoB,EAAE,aAAa;QACnC,MAAM,EAAE,EAAE;QACV,SAAS,EAAE,yBAAa,CAAC,KAAK;QAC9B,gBAAgB,EAAE,GAAG,EAAE;YACtB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC5C,CAAC;QACD,IAAI,EAAE,EAAE;QACR,OAAO,EAAE,EAAE;KACS,CAAC,CAAC,CAAC,aAAa,CAAC;IACtC,MAAM,oBAAoB,GAAG,OAAO,CAAC,kBAAkB,EAAE,IAAI,KAAK,UAAU,CAAC,CAAC;QAC7E,uBAAuB,CAAC,CAAC;QACzB,OAAO,CAAC,kBAAkB,EAAE,IAAI,KAAK,YAAY,CAAC,CAAC;YAClD,yBAAyB,CAAC,CAAC;YAC3B,MAAM,KAAK,oBAAoB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBACzC,MAAM,CAAC;IAEV,MAAM,OAAO,GAAe;QAC3B,aAAa,EAAE,UAAU,SAAS,EAAE;QACpC,cAAc,EAAE,SAAS;QACzB,eAAe,EAAE,MAAM,EAAE,kEAAkE;QAC3F,sBAAsB,EAAE,YAAY;QACpC,GAAG,iBAAiB;QACpB,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KACvE,CAAC;IACF,OAAO,CAAC,oBAAoB,CAAC,GAAG,oBAAoB,CAAC;IACrD,OAAO,CAAC,iBAAiB,CAAC,GAAG,SAAS,CAAC;IAEvC,IAAI,QAAQ,CAAC,aAAa,EAAE,CAAC;QAC5B,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,MAAM,oBAAoB,GAAG,QAAQ,CAAC,uBAAuB,EAAE,EAAE,CAAC;IAClE,MAAM,OAAO,GAAiB;QAC7B,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,gBAAgB;QACzB,UAAU;QACV,qBAAqB,EAAE,oBAAoB,EAAE,qBAAqB;KAClE,CAAC;IAEF,IAAI,WAAW,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;QAC5C,WAAW,CAAC,uBAAuB,CAAC,GAAG,EAAE;YACxC,+CAA+C;YAC/C,gBAAgB,CAAC,oBAAoB,CAAC,0BAA0B,EAAE;gBACjE,eAAe,EAAE,SAAS;aAC1B,CAAC,CAAC;YACH,KAAK,CAAC,KAAK,EAAE,CAAC;QACf,CAAC,CAAC,CAAC;QACH,kDAAkD;QAClD,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC/B,CAAC;IACD,IAAI,OAAO,QAAQ,CAAC,oBAAoB,KAAK,QAAQ,EAAE,CAAC;QACvD,MAAM,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YAC3F,IAAI,YAAY,IAAI,wBAAwB,CAAC,MAAM,CAAC,EAAE,CAAC;gBACtD,oEAAoE;gBACpE,gBAAgB,CAAC,oBAAoB,CAAC,0BAA0B,CAAC,CAAC;gBAClE,OAAO,OAAO,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;oBACxC,OAAO,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,oBAA8B,EAAE,OAAO,CAAC,CAAC;gBACxE,CAAC,CAAC,CAAC;YACJ,CAAC;iBAAM,IAAI,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;gBACzC,MAAM,IAAI,0BAAiB,EAAE,CAAC;YAC/B,CAAC;iBAAM,CAAC;gBACP,MAAM,MAAM,CAAC;YACd,CAAC;QACF,CAAC,CAAC,CAAC;QACH,OAAO,cAAc,CAAC;IACvB,CAAC;SAAM,CAAC;QACP,OAAO,iBAAiB,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,oBAAuC,CAAC,CAAC;IACjG,CAAC;AACF,CAAC;AAED,SAAgB,wBAAwB,CAAC,MAAW;IACnD,OAAO;QACN,YAAY;QACZ,WAAW;QACX,sBAAsB;QACtB,qBAAqB;QACrB,2BAA2B;QAC3B,yBAAyB;QACzB,0BAA0B;QAC1B,0BAA0B;KAC1B,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAgB,WAAW,CAC1B,QAA0B,EAC1B,OAAoD;IAEpD,OAAO,cAAc,CAAC,QAAQ,EAAE,EAAE,GAAG,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;AACtE,CAAC;AAED,SAAgB,UAAU,CACzB,QAA0B,EAC1B,OAAoD;IAEpD,OAAO,cAAc,CAAC,QAAQ,EAAE,EAAE,GAAG,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;AACrE,CAAC;AAEY,QAAA,mBAAmB,GAAG,IAAA,kCAAuB,EAAqB,oBAAoB,CAAC,CAAC;AAUrG,MAAa,kBAAkB;IAA/B;QAEkB,iBAAY,GAAwB,EAAE,CAAC;IAyBzD,CAAC;IAvBA,GAAG,CAAC,WAA8B;QACjC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACrC,CAAC;IAED,MAAM,CAAC,WAA8B;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAErD,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;YAClB,OAAO;QACR,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACpC,CAAC;IAED,iBAAiB,CAAC,OAAmB;QACpC,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAC7C,WAAW,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;QAC7C,CAAC;IACF,CAAC;IAED,IAAI;QACH,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;IACjC,CAAC;CACD;AA3BD,gDA2BC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import type { OpenAI } from 'openai';
|
|
2
|
+
import { CancellationToken } from '../../../util/vs/base/common/cancellation';
|
|
3
|
+
import { Event } from '../../../util/vs/base/common/event';
|
|
4
|
+
import { Disposable, IDisposable } from '../../../util/vs/base/common/lifecycle';
|
|
5
|
+
import { ICAPIClientService } from '../../endpoint/common/capiClient';
|
|
6
|
+
import { ILogService } from '../../log/common/logService';
|
|
7
|
+
import { ITelemetryService } from '../../telemetry/common/telemetry';
|
|
8
|
+
import { IHeaders } from '../common/fetcherService';
|
|
9
|
+
export declare const IChatWebSocketManager: import("../../../util/common/services").ServiceIdentifier<IChatWebSocketManager>;
|
|
10
|
+
export interface IChatWebSocketManager {
|
|
11
|
+
readonly _serviceBrand: undefined;
|
|
12
|
+
/**
|
|
13
|
+
* Gets or creates a WebSocket connection for the given conversation turn.
|
|
14
|
+
* The connection is scoped to a single turn, reused across tool call rounds
|
|
15
|
+
* within the same turn, but closed when a new turn starts.
|
|
16
|
+
*/
|
|
17
|
+
getOrCreateConnection(conversationId: string, turnId: string, headers?: Record<string, string>): Promise<IChatWebSocketConnection>;
|
|
18
|
+
/**
|
|
19
|
+
* Returns true if there is an open WebSocket connection for the given
|
|
20
|
+
* conversation and run. Used to decide whether the server already has
|
|
21
|
+
* context from earlier iterations in this turn.
|
|
22
|
+
*/
|
|
23
|
+
hasActiveConnection(conversationId: string, turnId: string): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Closes and removes the connection for a specific conversation.
|
|
26
|
+
* When turnId is provided, the connection is only closed if it matches
|
|
27
|
+
* the currently tracked run for that conversation.
|
|
28
|
+
*/
|
|
29
|
+
closeConnection(conversationId: string, turnId?: string): void;
|
|
30
|
+
/**
|
|
31
|
+
* Closes all active connections.
|
|
32
|
+
*/
|
|
33
|
+
closeAll(): void;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* No-op implementation for contexts where WebSocket is not available (web, tests, chat-lib).
|
|
37
|
+
*/
|
|
38
|
+
export declare class NullChatWebSocketManager implements IChatWebSocketManager {
|
|
39
|
+
readonly _serviceBrand: undefined;
|
|
40
|
+
getOrCreateConnection(_conversationId: string, _turnId: string, _headers?: Record<string, string>): Promise<IChatWebSocketConnection>;
|
|
41
|
+
hasActiveConnection(_conversationId: string, _turnId: string): boolean;
|
|
42
|
+
closeConnection(_conversationId: string, _turnId?: string): void;
|
|
43
|
+
closeAll(): void;
|
|
44
|
+
}
|
|
45
|
+
export interface IChatWebSocketConnection extends IDisposable {
|
|
46
|
+
/** Sends a response.create request and returns an async iterable of response events. */
|
|
47
|
+
sendRequest(body: Record<string, unknown>, token: CancellationToken): IChatWebSocketRequestHandle;
|
|
48
|
+
/** Whether the connection is currently open and usable. */
|
|
49
|
+
readonly isOpen: boolean;
|
|
50
|
+
/** Response headers from the WebSocket connection handshake. */
|
|
51
|
+
readonly responseHeaders: IHeaders;
|
|
52
|
+
}
|
|
53
|
+
export interface IChatWebSocketRequestHandle {
|
|
54
|
+
/** Fires for each JSON event received from the server. */
|
|
55
|
+
readonly onEvent: Event<OpenAI.Responses.ResponseStreamEvent>;
|
|
56
|
+
/** Fires when an error occurs. */
|
|
57
|
+
readonly onError: Event<Error>;
|
|
58
|
+
/** Fires when the request completes (response.completed received). */
|
|
59
|
+
readonly onComplete: Event<void>;
|
|
60
|
+
/** Resolves when the request has finished (completed or errored). */
|
|
61
|
+
readonly done: Promise<void>;
|
|
62
|
+
}
|
|
63
|
+
export declare class ChatWebSocketManager extends Disposable implements IChatWebSocketManager {
|
|
64
|
+
private readonly _logService;
|
|
65
|
+
private readonly _capiClientService;
|
|
66
|
+
private readonly _telemetryService;
|
|
67
|
+
readonly _serviceBrand: undefined;
|
|
68
|
+
private readonly _connections;
|
|
69
|
+
constructor(_logService: ILogService, _capiClientService: ICAPIClientService, _telemetryService: ITelemetryService);
|
|
70
|
+
getOrCreateConnection(conversationId: string, turnId: string, headers?: Record<string, string>): Promise<IChatWebSocketConnection>;
|
|
71
|
+
hasActiveConnection(conversationId: string, turnId: string): boolean;
|
|
72
|
+
closeConnection(conversationId: string, turnId?: string): void;
|
|
73
|
+
closeAll(): void;
|
|
74
|
+
dispose(): void;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=chatWebSocketManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chatWebSocketManager.d.ts","sourceRoot":"","sources":["../../../../../../src/_internal/platform/networking/node/chatWebSocketManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,480 @@
|
|
|
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 responseHeaders() {
|
|
147
|
+
return this._responseHeaders;
|
|
148
|
+
}
|
|
149
|
+
get _requestId() {
|
|
150
|
+
return this._responseHeaders.get('x-request-id') || '';
|
|
151
|
+
}
|
|
152
|
+
get _gitHubRequestId() {
|
|
153
|
+
return this._responseHeaders.get('x-github-request-id') || '';
|
|
154
|
+
}
|
|
155
|
+
async connect() {
|
|
156
|
+
if (this._state === 1 /* ConnectionState.Open */) {
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
this._state = 0 /* ConnectionState.Connecting */;
|
|
160
|
+
this._connectStartTime = Date.now();
|
|
161
|
+
this._logService.debug(`[ChatWebSocketManager] Connecting WebSocket for conversation ${this._conversationId} turn ${this._turnId}`);
|
|
162
|
+
const connection = await this._capiClientService.createResponsesWebSocket({
|
|
163
|
+
headers: this._headers,
|
|
164
|
+
});
|
|
165
|
+
return new Promise((resolve, reject) => {
|
|
166
|
+
const ws = connection.webSocket;
|
|
167
|
+
const onOpen = () => {
|
|
168
|
+
cleanup();
|
|
169
|
+
this._state = 1 /* ConnectionState.Open */;
|
|
170
|
+
this._connectedTime = Date.now();
|
|
171
|
+
this._ws = ws;
|
|
172
|
+
this._responseHeaders = connection.responseHeaders;
|
|
173
|
+
this._setupMessageHandlers(ws);
|
|
174
|
+
const connectDurationMs = this._connectedTime - (this._connectStartTime ?? this._connectedTime);
|
|
175
|
+
this._logService.debug(`[ChatWebSocketManager] Connected for conversation ${this._conversationId} turn ${this._turnId}`);
|
|
176
|
+
chatWebSocketTelemetry_1.ChatWebSocketTelemetrySender.sendConnectedTelemetry(this._telemetryService, {
|
|
177
|
+
conversationId: this._conversationId,
|
|
178
|
+
turnId: this._turnId,
|
|
179
|
+
requestId: this._requestId,
|
|
180
|
+
gitHubRequestId: this._gitHubRequestId,
|
|
181
|
+
connectDurationMs,
|
|
182
|
+
});
|
|
183
|
+
resolve();
|
|
184
|
+
};
|
|
185
|
+
const onError = (event) => {
|
|
186
|
+
cleanup();
|
|
187
|
+
this._state = 2 /* ConnectionState.Closed */;
|
|
188
|
+
this._responseHeaders = connection.responseHeaders;
|
|
189
|
+
const errorMessage = event.error ? `${event.message}: ${(0, logService_1.collectSingleLineErrorMessage)(event.error)}` : event.message || 'WebSocket error';
|
|
190
|
+
const connectDurationMs = Date.now() - (this._connectStartTime ?? Date.now());
|
|
191
|
+
this._logService.error(`[ChatWebSocketManager] Connection error for conversation ${this._conversationId} turn ${this._turnId}: ${errorMessage}`);
|
|
192
|
+
chatWebSocketTelemetry_1.ChatWebSocketTelemetrySender.sendConnectErrorTelemetry(this._telemetryService, {
|
|
193
|
+
conversationId: this._conversationId,
|
|
194
|
+
turnId: this._turnId,
|
|
195
|
+
requestId: this._requestId,
|
|
196
|
+
gitHubRequestId: this._gitHubRequestId,
|
|
197
|
+
error: errorMessage,
|
|
198
|
+
connectDurationMs,
|
|
199
|
+
});
|
|
200
|
+
reject(new Error(errorMessage));
|
|
201
|
+
};
|
|
202
|
+
const onClose = (event) => {
|
|
203
|
+
cleanup();
|
|
204
|
+
this._state = 2 /* ConnectionState.Closed */;
|
|
205
|
+
const connectDurationMs = Date.now() - (this._connectStartTime ?? Date.now());
|
|
206
|
+
const closeCodeDescription = wsCloseCodeToString(event.code);
|
|
207
|
+
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})`);
|
|
208
|
+
chatWebSocketTelemetry_1.ChatWebSocketTelemetrySender.sendCloseDuringSetupTelemetry(this._telemetryService, {
|
|
209
|
+
conversationId: this._conversationId,
|
|
210
|
+
turnId: this._turnId,
|
|
211
|
+
requestId: this._requestId,
|
|
212
|
+
gitHubRequestId: this._gitHubRequestId,
|
|
213
|
+
closeCode: event.code,
|
|
214
|
+
closeReason: closeCodeDescription,
|
|
215
|
+
closeEventReason: event.reason,
|
|
216
|
+
closeEventWasClean: String(event.wasClean),
|
|
217
|
+
connectDurationMs,
|
|
218
|
+
});
|
|
219
|
+
reject(new Error('WebSocket closed during connection setup'));
|
|
220
|
+
};
|
|
221
|
+
const cleanup = () => {
|
|
222
|
+
ws.removeEventListener('open', onOpen);
|
|
223
|
+
ws.removeEventListener('error', onError);
|
|
224
|
+
ws.removeEventListener('close', onClose);
|
|
225
|
+
};
|
|
226
|
+
ws.addEventListener('open', onOpen);
|
|
227
|
+
ws.addEventListener('error', onError);
|
|
228
|
+
ws.addEventListener('close', onClose);
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
_setupMessageHandlers(ws) {
|
|
232
|
+
ws.addEventListener('message', (event) => {
|
|
233
|
+
if (typeof event.data !== 'string') {
|
|
234
|
+
return; // Only process text messages
|
|
235
|
+
}
|
|
236
|
+
const receivedMessageCharacters = event.data.length;
|
|
237
|
+
this._totalReceivedMessageCount += 1;
|
|
238
|
+
this._totalReceivedCharacters += receivedMessageCharacters;
|
|
239
|
+
const connectionDurationMs = Date.now() - (this._connectedTime ?? Date.now());
|
|
240
|
+
let parsed;
|
|
241
|
+
try {
|
|
242
|
+
parsed = JSON.parse(event.data);
|
|
243
|
+
}
|
|
244
|
+
catch (error) {
|
|
245
|
+
const parseErrorMessage = (0, logService_1.collectSingleLineErrorMessage)(error) || 'Failed to parse websocket message';
|
|
246
|
+
this._logService.error(`[ChatWebSocketManager] Failed to parse message for conversation ${this._conversationId} turn ${this._turnId}: ${parseErrorMessage}`);
|
|
247
|
+
chatWebSocketTelemetry_1.ChatWebSocketTelemetrySender.sendMessageParseErrorTelemetry(this._telemetryService, {
|
|
248
|
+
conversationId: this._conversationId,
|
|
249
|
+
turnId: this._turnId,
|
|
250
|
+
requestId: this._requestId,
|
|
251
|
+
gitHubRequestId: this._gitHubRequestId,
|
|
252
|
+
error: parseErrorMessage,
|
|
253
|
+
connectionDurationMs,
|
|
254
|
+
totalSentMessageCount: this._totalSentMessageCount,
|
|
255
|
+
totalReceivedMessageCount: this._totalReceivedMessageCount,
|
|
256
|
+
receivedMessageCharacters,
|
|
257
|
+
totalSentCharacters: this._totalSentCharacters,
|
|
258
|
+
totalReceivedCharacters: this._totalReceivedCharacters,
|
|
259
|
+
});
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
this._activeRequest?.handleEvent(parsed);
|
|
263
|
+
});
|
|
264
|
+
ws.addEventListener('close', (event) => {
|
|
265
|
+
this._state = 2 /* ConnectionState.Closed */;
|
|
266
|
+
const connectionDurationMs = Date.now() - (this._connectedTime ?? Date.now());
|
|
267
|
+
const closeCodeDescription = wsCloseCodeToString(event.code);
|
|
268
|
+
this._logService.debug(`[ChatWebSocketManager] Connection closed for conversation ${this._conversationId} turn ${this._turnId} (code: ${event.code} ${closeCodeDescription}, reason: ${event.reason || '<empty>'}, wasClean: ${event.wasClean})`);
|
|
269
|
+
chatWebSocketTelemetry_1.ChatWebSocketTelemetrySender.sendCloseTelemetry(this._telemetryService, {
|
|
270
|
+
conversationId: this._conversationId,
|
|
271
|
+
turnId: this._turnId,
|
|
272
|
+
requestId: this._requestId,
|
|
273
|
+
gitHubRequestId: this._gitHubRequestId,
|
|
274
|
+
closeCode: event.code,
|
|
275
|
+
closeReason: closeCodeDescription,
|
|
276
|
+
closeEventReason: event.reason,
|
|
277
|
+
closeEventWasClean: String(event.wasClean),
|
|
278
|
+
connectionDurationMs,
|
|
279
|
+
totalSentMessageCount: this._totalSentMessageCount,
|
|
280
|
+
totalReceivedMessageCount: this._totalReceivedMessageCount,
|
|
281
|
+
totalSentCharacters: this._totalSentCharacters,
|
|
282
|
+
totalReceivedCharacters: this._totalReceivedCharacters,
|
|
283
|
+
});
|
|
284
|
+
this._activeRequest?.handleConnectionClose(event.code, event.reason);
|
|
285
|
+
this._activeRequest = undefined;
|
|
286
|
+
});
|
|
287
|
+
ws.addEventListener('error', (event) => {
|
|
288
|
+
const errorMessage = event.error ? `${event.message}: ${(0, logService_1.collectSingleLineErrorMessage)(event.error)}` : event.message || 'WebSocket error';
|
|
289
|
+
const connectionDurationMs = Date.now() - (this._connectedTime ?? Date.now());
|
|
290
|
+
this._logService.error(`[ChatWebSocketManager] Error for conversation ${this._conversationId} turn ${this._turnId}: ${errorMessage}`);
|
|
291
|
+
chatWebSocketTelemetry_1.ChatWebSocketTelemetrySender.sendErrorTelemetry(this._telemetryService, {
|
|
292
|
+
conversationId: this._conversationId,
|
|
293
|
+
turnId: this._turnId,
|
|
294
|
+
requestId: this._requestId,
|
|
295
|
+
gitHubRequestId: this._gitHubRequestId,
|
|
296
|
+
error: errorMessage,
|
|
297
|
+
connectionDurationMs,
|
|
298
|
+
totalSentMessageCount: this._totalSentMessageCount,
|
|
299
|
+
totalReceivedMessageCount: this._totalReceivedMessageCount,
|
|
300
|
+
totalSentCharacters: this._totalSentCharacters,
|
|
301
|
+
totalReceivedCharacters: this._totalReceivedCharacters,
|
|
302
|
+
});
|
|
303
|
+
this._activeRequest?.handleConnectionError(new Error(errorMessage));
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
sendRequest(body, token) {
|
|
307
|
+
if (!this._ws || this._state !== 1 /* ConnectionState.Open */) {
|
|
308
|
+
throw new Error('WebSocket is not connected');
|
|
309
|
+
}
|
|
310
|
+
// Cancel any previous in-flight request
|
|
311
|
+
this._activeRequest?.handleSuperseded();
|
|
312
|
+
const requestStartTime = Date.now();
|
|
313
|
+
const requestStartSentMessageCount = this._totalSentMessageCount;
|
|
314
|
+
const requestStartReceivedMessageCount = this._totalReceivedMessageCount;
|
|
315
|
+
const requestStartSentCharacters = this._totalSentCharacters;
|
|
316
|
+
const requestStartReceivedCharacters = this._totalReceivedCharacters;
|
|
317
|
+
const request = new ChatWebSocketActiveRequest();
|
|
318
|
+
request.onDidSettle(({ outcome, closeCode, closeReason, serverErrorMessage, serverErrorCode }) => {
|
|
319
|
+
const connectionDurationMs = Date.now() - (this._connectedTime ?? Date.now());
|
|
320
|
+
const requestDurationMs = Date.now() - requestStartTime;
|
|
321
|
+
const requestSentMessageCount = this._totalSentMessageCount - requestStartSentMessageCount;
|
|
322
|
+
const requestReceivedMessageCount = this._totalReceivedMessageCount - requestStartReceivedMessageCount;
|
|
323
|
+
const requestSentCharacters = this._totalSentCharacters - requestStartSentCharacters;
|
|
324
|
+
const requestReceivedCharacters = this._totalReceivedCharacters - requestStartReceivedCharacters;
|
|
325
|
+
chatWebSocketTelemetry_1.ChatWebSocketTelemetrySender.sendRequestOutcomeTelemetry(this._telemetryService, {
|
|
326
|
+
conversationId: this._conversationId,
|
|
327
|
+
turnId: this._turnId,
|
|
328
|
+
requestId: this._requestId,
|
|
329
|
+
gitHubRequestId: this._gitHubRequestId,
|
|
330
|
+
requestOutcome: outcome,
|
|
331
|
+
connectionDurationMs,
|
|
332
|
+
requestDurationMs,
|
|
333
|
+
totalSentMessageCount: this._totalSentMessageCount,
|
|
334
|
+
totalReceivedMessageCount: this._totalReceivedMessageCount,
|
|
335
|
+
totalSentCharacters: this._totalSentCharacters,
|
|
336
|
+
totalReceivedCharacters: this._totalReceivedCharacters,
|
|
337
|
+
requestSentMessageCount,
|
|
338
|
+
requestReceivedMessageCount,
|
|
339
|
+
requestSentCharacters,
|
|
340
|
+
requestReceivedCharacters,
|
|
341
|
+
closeCode,
|
|
342
|
+
closeReason,
|
|
343
|
+
serverErrorMessage,
|
|
344
|
+
serverErrorCode,
|
|
345
|
+
});
|
|
346
|
+
});
|
|
347
|
+
this._activeRequest = request;
|
|
348
|
+
// Handle cancellation
|
|
349
|
+
const cancelDisposable = token.onCancellationRequested(() => {
|
|
350
|
+
if (this._activeRequest === request) {
|
|
351
|
+
request.handleCancellation();
|
|
352
|
+
this._activeRequest = undefined;
|
|
353
|
+
}
|
|
354
|
+
});
|
|
355
|
+
request.done.finally(() => cancelDisposable.dispose());
|
|
356
|
+
const message = {
|
|
357
|
+
type: 'response.create',
|
|
358
|
+
...body,
|
|
359
|
+
};
|
|
360
|
+
// Remove `stream: true` as WebSocket always streams
|
|
361
|
+
delete message['stream'];
|
|
362
|
+
const serializedMessage = JSON.stringify(message);
|
|
363
|
+
const sentMessageCharacters = serializedMessage.length;
|
|
364
|
+
this._totalSentMessageCount += 1;
|
|
365
|
+
this._totalSentCharacters += sentMessageCharacters;
|
|
366
|
+
const connectionDurationMs = Date.now() - (this._connectedTime ?? Date.now());
|
|
367
|
+
this._logService.debug(`[ChatWebSocketManager] Sending request for conversation ${this._conversationId} turn ${this._turnId} (totalSentMessageCount: ${this._totalSentMessageCount}, sentMessageCharacters: ${sentMessageCharacters})`);
|
|
368
|
+
chatWebSocketTelemetry_1.ChatWebSocketTelemetrySender.sendRequestSentTelemetry(this._telemetryService, {
|
|
369
|
+
conversationId: this._conversationId,
|
|
370
|
+
turnId: this._turnId,
|
|
371
|
+
requestId: this._requestId,
|
|
372
|
+
gitHubRequestId: this._gitHubRequestId,
|
|
373
|
+
connectionDurationMs,
|
|
374
|
+
totalSentMessageCount: this._totalSentMessageCount,
|
|
375
|
+
totalReceivedMessageCount: this._totalReceivedMessageCount,
|
|
376
|
+
sentMessageCharacters,
|
|
377
|
+
totalSentCharacters: this._totalSentCharacters,
|
|
378
|
+
totalReceivedCharacters: this._totalReceivedCharacters,
|
|
379
|
+
});
|
|
380
|
+
this._ws.send(serializedMessage);
|
|
381
|
+
return request;
|
|
382
|
+
}
|
|
383
|
+
dispose() {
|
|
384
|
+
this._activeRequest?.handleConnectionDisposed();
|
|
385
|
+
this._activeRequest = undefined;
|
|
386
|
+
if (this._ws) {
|
|
387
|
+
this._ws.close();
|
|
388
|
+
this._ws = undefined;
|
|
389
|
+
}
|
|
390
|
+
this._state = 2 /* ConnectionState.Closed */;
|
|
391
|
+
this._onDidDispose.fire();
|
|
392
|
+
super.dispose();
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
class ChatWebSocketActiveRequest {
|
|
396
|
+
constructor() {
|
|
397
|
+
this._onEvent = new event_1.Emitter();
|
|
398
|
+
this.onEvent = this._onEvent.event;
|
|
399
|
+
this._onError = new event_1.Emitter();
|
|
400
|
+
this.onError = this._onError.event;
|
|
401
|
+
this._onComplete = new event_1.Emitter();
|
|
402
|
+
this.onComplete = this._onComplete.event;
|
|
403
|
+
this._settled = false;
|
|
404
|
+
this.done = new Promise((resolve, reject) => {
|
|
405
|
+
this._resolve = resolve;
|
|
406
|
+
this._reject = reject;
|
|
407
|
+
});
|
|
408
|
+
}
|
|
409
|
+
onDidSettle(callback) {
|
|
410
|
+
this._onDidSettle = callback;
|
|
411
|
+
}
|
|
412
|
+
handleEvent(event) {
|
|
413
|
+
if (this._settled) {
|
|
414
|
+
return;
|
|
415
|
+
}
|
|
416
|
+
if (event.type === 'error') {
|
|
417
|
+
const serverErrorMessage = event.message || event.error?.message || 'Server error';
|
|
418
|
+
const serverErrorCode = event.code || event.error?.code || undefined;
|
|
419
|
+
const errorMessage = serverErrorCode ? `${serverErrorMessage} (${serverErrorCode})` : serverErrorMessage;
|
|
420
|
+
const error = new Error(errorMessage);
|
|
421
|
+
this._finalizeError('server_error', error, undefined, undefined, serverErrorMessage, serverErrorCode);
|
|
422
|
+
return;
|
|
423
|
+
}
|
|
424
|
+
this._onEvent.fire(event);
|
|
425
|
+
if (event.type === 'response.completed') {
|
|
426
|
+
this._onComplete.fire();
|
|
427
|
+
this._finalizeSuccess('completed');
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
handleConnectionClose(code, reason) {
|
|
431
|
+
if (this._settled) {
|
|
432
|
+
return;
|
|
433
|
+
}
|
|
434
|
+
const error = new Error(`WebSocket closed unexpectedly (code: ${code} ${wsCloseCodeToString(code)}${reason ? `, reason: ${reason}` : ''})`);
|
|
435
|
+
this._finalizeError('connection_closed', error, code, reason);
|
|
436
|
+
}
|
|
437
|
+
handleConnectionError(error) {
|
|
438
|
+
if (this._settled) {
|
|
439
|
+
return;
|
|
440
|
+
}
|
|
441
|
+
this._finalizeError('connection_error', error);
|
|
442
|
+
}
|
|
443
|
+
handleSuperseded() {
|
|
444
|
+
if (this._settled) {
|
|
445
|
+
return;
|
|
446
|
+
}
|
|
447
|
+
this._finalizeError('superseded', new Error('Request superseded by new request'));
|
|
448
|
+
}
|
|
449
|
+
handleCancellation() {
|
|
450
|
+
if (this._settled) {
|
|
451
|
+
return;
|
|
452
|
+
}
|
|
453
|
+
this._finalizeError('canceled', new errors_1.CancellationError());
|
|
454
|
+
}
|
|
455
|
+
handleConnectionDisposed() {
|
|
456
|
+
if (this._settled) {
|
|
457
|
+
return;
|
|
458
|
+
}
|
|
459
|
+
this._finalizeError('connection_disposed', new Error('Connection disposed'));
|
|
460
|
+
}
|
|
461
|
+
_finalizeSuccess(outcome) {
|
|
462
|
+
this._settled = true;
|
|
463
|
+
this._onDidSettle?.({ outcome });
|
|
464
|
+
this._resolve();
|
|
465
|
+
this._dispose();
|
|
466
|
+
}
|
|
467
|
+
_finalizeError(outcome, error, closeCode, closeReason, serverErrorMessage, serverErrorCode) {
|
|
468
|
+
this._onError.fire(error);
|
|
469
|
+
this._settled = true;
|
|
470
|
+
this._onDidSettle?.({ outcome, closeCode, closeReason, serverErrorMessage, serverErrorCode });
|
|
471
|
+
this._reject(error);
|
|
472
|
+
this._dispose();
|
|
473
|
+
}
|
|
474
|
+
_dispose() {
|
|
475
|
+
this._onEvent.dispose();
|
|
476
|
+
this._onError.dispose();
|
|
477
|
+
this._onComplete.dispose();
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
//# 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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"}
|