@vscode/chat-lib 0.3.0 → 0.3.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 (327) hide show
  1. package/dist/src/_internal/extension/byok/node/openAIEndpoint.js +1 -1
  2. package/dist/src/_internal/extension/byok/node/openAIEndpoint.js.map +1 -1
  3. package/dist/src/_internal/extension/completions-core/vscode-node/extension/src/modelPickerUserSelection.d.ts +3 -0
  4. package/dist/src/_internal/extension/completions-core/vscode-node/extension/src/modelPickerUserSelection.d.ts.map +1 -0
  5. package/dist/src/_internal/extension/completions-core/vscode-node/extension/src/modelPickerUserSelection.js +9 -0
  6. package/dist/src/_internal/extension/completions-core/vscode-node/extension/src/modelPickerUserSelection.js.map +1 -0
  7. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/asyncCompletions.d.ts +1 -1
  8. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/asyncCompletions.d.ts.map +1 -1
  9. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/cacheUtils.d.ts +19 -0
  10. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/cacheUtils.d.ts.map +1 -0
  11. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/cacheUtils.js +12 -0
  12. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/cacheUtils.js.map +1 -0
  13. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/completionsFromNetwork.d.ts +49 -0
  14. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/completionsFromNetwork.d.ts.map +1 -0
  15. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/completionsFromNetwork.js +331 -0
  16. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/completionsFromNetwork.js.map +1 -0
  17. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/copilotCompletion.d.ts +3 -2
  18. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/copilotCompletion.d.ts.map +1 -1
  19. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/copilotCompletion.js +2 -6
  20. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/copilotCompletion.js.map +1 -1
  21. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/current.d.ts +1 -1
  22. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/current.d.ts.map +1 -1
  23. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/current.js +2 -2
  24. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/current.js.map +1 -1
  25. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/ghostText.d.ts +31 -12
  26. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/ghostText.d.ts.map +1 -1
  27. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/ghostText.js +367 -806
  28. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/ghostText.js.map +1 -1
  29. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/ghostTextStrategy.d.ts +16 -0
  30. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/ghostTextStrategy.d.ts.map +1 -0
  31. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/ghostTextStrategy.js +196 -0
  32. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/ghostTextStrategy.js.map +1 -0
  33. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/last.d.ts +3 -5
  34. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/last.d.ts.map +1 -1
  35. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/last.js +8 -8
  36. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/last.js.map +1 -1
  37. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/requestContext.d.ts +37 -0
  38. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/requestContext.d.ts.map +1 -0
  39. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/requestContext.js +7 -0
  40. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/requestContext.js.map +1 -0
  41. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/resultType.d.ts +8 -0
  42. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/resultType.d.ts.map +1 -0
  43. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/resultType.js +16 -0
  44. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/resultType.js.map +1 -0
  45. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/streamedCompletionSplitter.d.ts.map +1 -1
  46. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/streamedCompletionSplitter.js +3 -5
  47. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/streamedCompletionSplitter.js.map +1 -1
  48. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/telemetry.d.ts +3 -2
  49. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/telemetry.d.ts.map +1 -1
  50. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/telemetry.js +10 -9
  51. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/telemetry.js.map +1 -1
  52. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/inlineCompletion.d.ts.map +1 -1
  53. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/inlineCompletion.js +2 -1
  54. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/inlineCompletion.js.map +1 -1
  55. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/networkConfiguration.d.ts +1 -6
  56. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/networkConfiguration.d.ts.map +1 -1
  57. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/networking.d.ts +1 -0
  58. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/networking.d.ts.map +1 -1
  59. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/networking.js +1 -0
  60. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/networking.js.map +1 -1
  61. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/openai/fetch.d.ts +25 -7
  62. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/openai/fetch.d.ts.map +1 -1
  63. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/openai/fetch.js +316 -23
  64. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/openai/fetch.js.map +1 -1
  65. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/openai/model.d.ts +3 -1
  66. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/openai/model.d.ts.map +1 -1
  67. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/openai/model.js +28 -3
  68. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/openai/model.js.map +1 -1
  69. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/openai/openai.d.ts +5 -9
  70. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/openai/openai.d.ts.map +1 -1
  71. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/openai/openai.js +0 -3
  72. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/openai/openai.js.map +1 -1
  73. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/openai/stream.d.ts +3 -27
  74. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/openai/stream.d.ts.map +1 -1
  75. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/openai/stream.js +17 -62
  76. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/openai/stream.js.map +1 -1
  77. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/postInsertion.d.ts +1 -1
  78. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/postInsertion.d.ts.map +1 -1
  79. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/postInsertion.js +0 -4
  80. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/postInsertion.js.map +1 -1
  81. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/completionsPromptFactory/componentsCompletionsPromptFactory.d.ts +7 -5
  82. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/completionsPromptFactory/componentsCompletionsPromptFactory.d.ts.map +1 -1
  83. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/completionsPromptFactory/componentsCompletionsPromptFactory.js +75 -13
  84. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/completionsPromptFactory/componentsCompletionsPromptFactory.js.map +1 -1
  85. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/components/diagnostics.d.ts +10 -0
  86. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/components/diagnostics.d.ts.map +1 -0
  87. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/components/diagnostics.js +92 -0
  88. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/components/diagnostics.js.map +1 -0
  89. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/components/splitContextPrompt.d.ts.map +1 -1
  90. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/components/splitContextPrompt.js +2 -1
  91. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/components/splitContextPrompt.js.map +1 -1
  92. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/contextProviderRegistry.d.ts +9 -0
  93. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/contextProviderRegistry.d.ts.map +1 -1
  94. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/contextProviderRegistry.js +50 -1
  95. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/contextProviderRegistry.js.map +1 -1
  96. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/contextProviders/contextItemSchemas.d.ts +6 -2
  97. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/contextProviders/contextItemSchemas.d.ts.map +1 -1
  98. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/contextProviders/contextItemSchemas.js +106 -43
  99. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/contextProviders/contextItemSchemas.js.map +1 -1
  100. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/contextProviders/diagnostics.d.ts +5 -0
  101. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/contextProviders/diagnostics.d.ts.map +1 -0
  102. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/contextProviders/diagnostics.js +59 -0
  103. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/contextProviders/diagnostics.js.map +1 -0
  104. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/prompt.d.ts +1 -0
  105. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/prompt.d.ts.map +1 -1
  106. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/prompt.js +2 -1
  107. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/prompt.js.map +1 -1
  108. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/suggestions/anomalyDetection.d.ts +1 -1
  109. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/suggestions/anomalyDetection.d.ts.map +1 -1
  110. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/suggestions/anomalyDetection.js.map +1 -1
  111. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/suggestions/suggestions.d.ts +2 -2
  112. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/suggestions/suggestions.d.ts.map +1 -1
  113. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/suggestions/suggestions.js +2 -4
  114. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/suggestions/suggestions.js.map +1 -1
  115. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/telemetry.d.ts +2 -1
  116. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/telemetry.d.ts.map +1 -1
  117. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/telemetry.js.map +1 -1
  118. package/dist/src/_internal/extension/completions-core/vscode-node/types/src/contextProviderApiV1.d.ts +10 -2
  119. package/dist/src/_internal/extension/completions-core/vscode-node/types/src/contextProviderApiV1.d.ts.map +1 -1
  120. package/dist/src/_internal/extension/completions-core/vscode-node/types/src/contextProviderApiV1.js +8 -0
  121. package/dist/src/_internal/extension/completions-core/vscode-node/types/src/contextProviderApiV1.js.map +1 -1
  122. package/dist/src/_internal/extension/inlineEdits/common/nesTriggerHint.d.ts +16 -0
  123. package/dist/src/_internal/extension/inlineEdits/common/nesTriggerHint.d.ts.map +1 -0
  124. package/dist/src/_internal/extension/inlineEdits/common/nesTriggerHint.js +27 -0
  125. package/dist/src/_internal/extension/inlineEdits/common/nesTriggerHint.js.map +1 -0
  126. package/dist/src/_internal/extension/inlineEdits/common/userInteractionMonitor.d.ts +8 -1
  127. package/dist/src/_internal/extension/inlineEdits/common/userInteractionMonitor.d.ts.map +1 -1
  128. package/dist/src/_internal/extension/inlineEdits/common/userInteractionMonitor.js +10 -4
  129. package/dist/src/_internal/extension/inlineEdits/common/userInteractionMonitor.js.map +1 -1
  130. package/dist/src/_internal/extension/inlineEdits/node/nextEditCache.d.ts +6 -2
  131. package/dist/src/_internal/extension/inlineEdits/node/nextEditCache.d.ts.map +1 -1
  132. package/dist/src/_internal/extension/inlineEdits/node/nextEditCache.js +5 -5
  133. package/dist/src/_internal/extension/inlineEdits/node/nextEditCache.js.map +1 -1
  134. package/dist/src/_internal/extension/inlineEdits/node/nextEditProvider.d.ts +2 -0
  135. package/dist/src/_internal/extension/inlineEdits/node/nextEditProvider.d.ts.map +1 -1
  136. package/dist/src/_internal/extension/inlineEdits/node/nextEditProvider.js +11 -7
  137. package/dist/src/_internal/extension/inlineEdits/node/nextEditProvider.js.map +1 -1
  138. package/dist/src/_internal/extension/inlineEdits/node/nextEditProviderTelemetry.d.ts.map +1 -1
  139. package/dist/src/_internal/extension/inlineEdits/node/nextEditProviderTelemetry.js +9 -3
  140. package/dist/src/_internal/extension/inlineEdits/node/nextEditProviderTelemetry.js.map +1 -1
  141. package/dist/src/_internal/extension/inlineEdits/node/nextEditResult.d.ts +3 -0
  142. package/dist/src/_internal/extension/inlineEdits/node/nextEditResult.d.ts.map +1 -1
  143. package/dist/src/_internal/extension/inlineEdits/node/nextEditResult.js.map +1 -1
  144. package/dist/src/_internal/extension/prompt/node/chatMLFetcher.d.ts +22 -0
  145. package/dist/src/_internal/extension/prompt/node/chatMLFetcher.d.ts.map +1 -1
  146. package/dist/src/_internal/extension/prompt/node/chatMLFetcher.js +187 -66
  147. package/dist/src/_internal/extension/prompt/node/chatMLFetcher.js.map +1 -1
  148. package/dist/src/_internal/extension/prompt/node/chatMLFetcherTelemetry.d.ts +7 -5
  149. package/dist/src/_internal/extension/prompt/node/chatMLFetcherTelemetry.d.ts.map +1 -1
  150. package/dist/src/_internal/extension/prompt/node/chatMLFetcherTelemetry.js +26 -14
  151. package/dist/src/_internal/extension/prompt/node/chatMLFetcherTelemetry.js.map +1 -1
  152. package/dist/src/_internal/extension/xtab/common/lintErrors.d.ts +2 -0
  153. package/dist/src/_internal/extension/xtab/common/lintErrors.d.ts.map +1 -1
  154. package/dist/src/_internal/extension/xtab/common/lintErrors.js +31 -7
  155. package/dist/src/_internal/extension/xtab/common/lintErrors.js.map +1 -1
  156. package/dist/src/_internal/extension/xtab/common/promptCrafting.d.ts.map +1 -1
  157. package/dist/src/_internal/extension/xtab/common/promptCrafting.js +11 -6
  158. package/dist/src/_internal/extension/xtab/common/promptCrafting.js.map +1 -1
  159. package/dist/src/_internal/extension/xtab/node/xtabCustomDiffPatchResponseHandler.d.ts +2 -2
  160. package/dist/src/_internal/extension/xtab/node/xtabCustomDiffPatchResponseHandler.d.ts.map +1 -1
  161. package/dist/src/_internal/extension/xtab/node/xtabCustomDiffPatchResponseHandler.js +15 -12
  162. package/dist/src/_internal/extension/xtab/node/xtabCustomDiffPatchResponseHandler.js.map +1 -1
  163. package/dist/src/_internal/extension/xtab/node/xtabNextCursorPredictor.d.ts +3 -1
  164. package/dist/src/_internal/extension/xtab/node/xtabNextCursorPredictor.d.ts.map +1 -1
  165. package/dist/src/_internal/extension/xtab/node/xtabNextCursorPredictor.js +9 -3
  166. package/dist/src/_internal/extension/xtab/node/xtabNextCursorPredictor.js.map +1 -1
  167. package/dist/src/_internal/extension/xtab/node/xtabProvider.d.ts +5 -23
  168. package/dist/src/_internal/extension/xtab/node/xtabProvider.d.ts.map +1 -1
  169. package/dist/src/_internal/extension/xtab/node/xtabProvider.js +222 -195
  170. package/dist/src/_internal/extension/xtab/node/xtabProvider.js.map +1 -1
  171. package/dist/src/_internal/platform/authentication/common/authentication.d.ts +2 -1
  172. package/dist/src/_internal/platform/authentication/common/authentication.d.ts.map +1 -1
  173. package/dist/src/_internal/platform/authentication/common/authentication.js +7 -2
  174. package/dist/src/_internal/platform/authentication/common/authentication.js.map +1 -1
  175. package/dist/src/_internal/platform/authentication/common/copilotToken.d.ts +146 -49
  176. package/dist/src/_internal/platform/authentication/common/copilotToken.d.ts.map +1 -1
  177. package/dist/src/_internal/platform/authentication/common/copilotToken.js +152 -18
  178. package/dist/src/_internal/platform/authentication/common/copilotToken.js.map +1 -1
  179. package/dist/src/_internal/platform/authentication/common/staticGitHubAuthenticationService.js +1 -1
  180. package/dist/src/_internal/platform/authentication/common/staticGitHubAuthenticationService.js.map +1 -1
  181. package/dist/src/_internal/platform/authentication/node/copilotTokenManager.d.ts +10 -0
  182. package/dist/src/_internal/platform/authentication/node/copilotTokenManager.d.ts.map +1 -1
  183. package/dist/src/_internal/platform/authentication/node/copilotTokenManager.js +110 -40
  184. package/dist/src/_internal/platform/authentication/node/copilotTokenManager.js.map +1 -1
  185. package/dist/src/_internal/platform/chat/common/chatMLFetcher.js +1 -1
  186. package/dist/src/_internal/platform/chat/common/chatMLFetcher.js.map +1 -1
  187. package/dist/src/_internal/platform/chat/common/commonTypes.d.ts +5 -1
  188. package/dist/src/_internal/platform/chat/common/commonTypes.d.ts.map +1 -1
  189. package/dist/src/_internal/platform/chat/common/commonTypes.js +5 -1
  190. package/dist/src/_internal/platform/chat/common/commonTypes.js.map +1 -1
  191. package/dist/src/_internal/platform/completions-core/common/openai/copilotAnnotations.d.ts +27 -0
  192. package/dist/src/_internal/platform/completions-core/common/openai/copilotAnnotations.d.ts.map +1 -0
  193. package/dist/src/_internal/platform/completions-core/common/openai/copilotAnnotations.js +35 -0
  194. package/dist/src/_internal/platform/completions-core/common/openai/copilotAnnotations.js.map +1 -0
  195. package/dist/src/_internal/platform/configuration/common/configurationService.d.ts +64 -33
  196. package/dist/src/_internal/platform/configuration/common/configurationService.d.ts.map +1 -1
  197. package/dist/src/_internal/platform/configuration/common/configurationService.js +46 -22
  198. package/dist/src/_internal/platform/configuration/common/configurationService.js.map +1 -1
  199. package/dist/src/_internal/platform/configuration/common/validator.d.ts +2 -0
  200. package/dist/src/_internal/platform/configuration/common/validator.d.ts.map +1 -1
  201. package/dist/src/_internal/platform/configuration/common/validator.js +18 -0
  202. package/dist/src/_internal/platform/configuration/common/validator.js.map +1 -1
  203. package/dist/src/_internal/platform/endpoint/common/chatModelCapabilities.d.ts +2 -0
  204. package/dist/src/_internal/platform/endpoint/common/chatModelCapabilities.d.ts.map +1 -1
  205. package/dist/src/_internal/platform/endpoint/common/chatModelCapabilities.js +10 -1
  206. package/dist/src/_internal/platform/endpoint/common/chatModelCapabilities.js.map +1 -1
  207. package/dist/src/_internal/platform/endpoint/common/endpointProvider.d.ts +3 -0
  208. package/dist/src/_internal/platform/endpoint/common/endpointProvider.d.ts.map +1 -1
  209. package/dist/src/_internal/platform/endpoint/common/endpointProvider.js.map +1 -1
  210. package/dist/src/_internal/platform/endpoint/common/endpointTypes.d.ts +1 -0
  211. package/dist/src/_internal/platform/endpoint/common/endpointTypes.d.ts.map +1 -1
  212. package/dist/src/_internal/platform/endpoint/common/endpointTypes.js +1 -0
  213. package/dist/src/_internal/platform/endpoint/common/endpointTypes.js.map +1 -1
  214. package/dist/src/_internal/platform/endpoint/node/chatEndpoint.d.ts +2 -0
  215. package/dist/src/_internal/platform/endpoint/node/chatEndpoint.d.ts.map +1 -1
  216. package/dist/src/_internal/platform/endpoint/node/chatEndpoint.js +83 -3
  217. package/dist/src/_internal/platform/endpoint/node/chatEndpoint.js.map +1 -1
  218. package/dist/src/_internal/platform/endpoint/node/messagesApi.d.ts +19 -4
  219. package/dist/src/_internal/platform/endpoint/node/messagesApi.d.ts.map +1 -1
  220. package/dist/src/_internal/platform/endpoint/node/messagesApi.js +247 -36
  221. package/dist/src/_internal/platform/endpoint/node/messagesApi.js.map +1 -1
  222. package/dist/src/_internal/platform/endpoint/node/responsesApi.d.ts +2 -0
  223. package/dist/src/_internal/platform/endpoint/node/responsesApi.d.ts.map +1 -1
  224. package/dist/src/_internal/platform/endpoint/node/responsesApi.js +23 -5
  225. package/dist/src/_internal/platform/endpoint/node/responsesApi.js.map +1 -1
  226. package/dist/src/_internal/platform/git/common/gitService.d.ts +2 -1
  227. package/dist/src/_internal/platform/git/common/gitService.d.ts.map +1 -1
  228. package/dist/src/_internal/platform/git/common/gitService.js.map +1 -1
  229. package/dist/src/_internal/platform/github/common/githubService.d.ts +36 -0
  230. package/dist/src/_internal/platform/github/common/githubService.d.ts.map +1 -1
  231. package/dist/src/_internal/platform/github/common/githubService.js +60 -0
  232. package/dist/src/_internal/platform/github/common/githubService.js.map +1 -1
  233. package/dist/src/_internal/platform/inlineCompletions/common/api.d.ts +5 -1
  234. package/dist/src/_internal/platform/inlineCompletions/common/api.d.ts.map +1 -1
  235. package/dist/src/_internal/platform/inlineEdits/common/dataTypes/languageContext.d.ts +10 -2
  236. package/dist/src/_internal/platform/inlineEdits/common/dataTypes/languageContext.d.ts.map +1 -1
  237. package/dist/src/_internal/platform/inlineEdits/common/dataTypes/languageContext.js +23 -4
  238. package/dist/src/_internal/platform/inlineEdits/common/dataTypes/languageContext.js.map +1 -1
  239. package/dist/src/_internal/platform/inlineEdits/common/dataTypes/xtabPromptOptions.d.ts +2 -1
  240. package/dist/src/_internal/platform/inlineEdits/common/dataTypes/xtabPromptOptions.d.ts.map +1 -1
  241. package/dist/src/_internal/platform/inlineEdits/common/dataTypes/xtabPromptOptions.js +1 -0
  242. package/dist/src/_internal/platform/inlineEdits/common/dataTypes/xtabPromptOptions.js.map +1 -1
  243. package/dist/src/_internal/platform/inlineEdits/common/inlineEditLogContext.d.ts +5 -0
  244. package/dist/src/_internal/platform/inlineEdits/common/inlineEditLogContext.d.ts.map +1 -1
  245. package/dist/src/_internal/platform/inlineEdits/common/inlineEditLogContext.js +123 -0
  246. package/dist/src/_internal/platform/inlineEdits/common/inlineEditLogContext.js.map +1 -1
  247. package/dist/src/_internal/platform/inlineEdits/common/statelessNextEditProvider.d.ts +15 -3
  248. package/dist/src/_internal/platform/inlineEdits/common/statelessNextEditProvider.d.ts.map +1 -1
  249. package/dist/src/_internal/platform/inlineEdits/common/statelessNextEditProvider.js +20 -0
  250. package/dist/src/_internal/platform/inlineEdits/common/statelessNextEditProvider.js.map +1 -1
  251. package/dist/src/_internal/platform/inlineEdits/node/inlineEditsModelService.d.ts.map +1 -1
  252. package/dist/src/_internal/platform/inlineEdits/node/inlineEditsModelService.js +5 -0
  253. package/dist/src/_internal/platform/inlineEdits/node/inlineEditsModelService.js.map +1 -1
  254. package/dist/src/_internal/platform/languageServer/common/languageContextService.d.ts +27 -2
  255. package/dist/src/_internal/platform/languageServer/common/languageContextService.d.ts.map +1 -1
  256. package/dist/src/_internal/platform/languageServer/common/languageContextService.js +1 -0
  257. package/dist/src/_internal/platform/languageServer/common/languageContextService.js.map +1 -1
  258. package/dist/src/_internal/platform/log/common/logService.d.ts +12 -0
  259. package/dist/src/_internal/platform/log/common/logService.d.ts.map +1 -1
  260. package/dist/src/_internal/platform/log/common/logService.js +39 -0
  261. package/dist/src/_internal/platform/log/common/logService.js.map +1 -1
  262. package/dist/src/_internal/platform/nesFetch/common/completionsAPI.d.ts +74 -0
  263. package/dist/src/_internal/platform/nesFetch/common/completionsAPI.d.ts.map +1 -0
  264. package/dist/src/_internal/platform/nesFetch/common/completionsAPI.js +23 -0
  265. package/dist/src/_internal/platform/nesFetch/common/completionsAPI.js.map +1 -0
  266. package/dist/src/_internal/platform/nesFetch/common/completionsFetchService.d.ts +72 -0
  267. package/dist/src/_internal/platform/nesFetch/common/completionsFetchService.d.ts.map +1 -0
  268. package/dist/src/_internal/platform/nesFetch/common/completionsFetchService.js +44 -0
  269. package/dist/src/_internal/platform/nesFetch/common/completionsFetchService.js.map +1 -0
  270. package/dist/src/_internal/platform/nesFetch/common/responseStream.d.ts +36 -0
  271. package/dist/src/_internal/platform/nesFetch/common/responseStream.d.ts.map +1 -0
  272. package/dist/src/_internal/platform/nesFetch/common/responseStream.js +167 -0
  273. package/dist/src/_internal/platform/nesFetch/common/responseStream.js.map +1 -0
  274. package/dist/src/_internal/platform/nesFetch/node/completionsFetchServiceImpl.d.ts +28 -0
  275. package/dist/src/_internal/platform/nesFetch/node/completionsFetchServiceImpl.d.ts.map +1 -0
  276. package/dist/src/_internal/platform/nesFetch/node/completionsFetchServiceImpl.js +184 -0
  277. package/dist/src/_internal/platform/nesFetch/node/completionsFetchServiceImpl.js.map +1 -0
  278. package/dist/src/_internal/platform/nesFetch/node/streamTransformer.d.ts +9 -0
  279. package/dist/src/_internal/platform/nesFetch/node/streamTransformer.d.ts.map +1 -0
  280. package/dist/src/_internal/platform/nesFetch/node/streamTransformer.js +71 -0
  281. package/dist/src/_internal/platform/nesFetch/node/streamTransformer.js.map +1 -0
  282. package/dist/src/_internal/platform/networking/common/anthropic.d.ts +166 -0
  283. package/dist/src/_internal/platform/networking/common/anthropic.d.ts.map +1 -0
  284. package/dist/src/_internal/platform/networking/common/anthropic.js +177 -0
  285. package/dist/src/_internal/platform/networking/common/anthropic.js.map +1 -0
  286. package/dist/src/_internal/platform/networking/common/fetch.d.ts +19 -12
  287. package/dist/src/_internal/platform/networking/common/fetch.d.ts.map +1 -1
  288. package/dist/src/_internal/platform/networking/common/fetch.js +5 -5
  289. package/dist/src/_internal/platform/networking/common/fetch.js.map +1 -1
  290. package/dist/src/_internal/platform/networking/common/fetcherService.d.ts +35 -6
  291. package/dist/src/_internal/platform/networking/common/fetcherService.d.ts.map +1 -1
  292. package/dist/src/_internal/platform/networking/common/fetcherService.js +96 -11
  293. package/dist/src/_internal/platform/networking/common/fetcherService.js.map +1 -1
  294. package/dist/src/_internal/platform/networking/common/networking.d.ts +7 -3
  295. package/dist/src/_internal/platform/networking/common/networking.d.ts.map +1 -1
  296. package/dist/src/_internal/platform/networking/common/networking.js +4 -4
  297. package/dist/src/_internal/platform/networking/common/networking.js.map +1 -1
  298. package/dist/src/_internal/platform/networking/node/stream.d.ts.map +1 -1
  299. package/dist/src/_internal/platform/networking/node/stream.js +55 -29
  300. package/dist/src/_internal/platform/networking/node/stream.js.map +1 -1
  301. package/dist/src/_internal/platform/requestLogger/node/nullRequestLogger.d.ts +1 -0
  302. package/dist/src/_internal/platform/requestLogger/node/nullRequestLogger.d.ts.map +1 -1
  303. package/dist/src/_internal/platform/requestLogger/node/nullRequestLogger.js +2 -0
  304. package/dist/src/_internal/platform/requestLogger/node/nullRequestLogger.js.map +1 -1
  305. package/dist/src/_internal/platform/requestLogger/node/requestLogger.d.ts +2 -0
  306. package/dist/src/_internal/platform/requestLogger/node/requestLogger.d.ts.map +1 -1
  307. package/dist/src/_internal/platform/requestLogger/node/requestLogger.js.map +1 -1
  308. package/dist/src/_internal/util/common/test/shims/chatTypes.d.ts +95 -8
  309. package/dist/src/_internal/util/common/test/shims/chatTypes.d.ts.map +1 -1
  310. package/dist/src/_internal/util/common/test/shims/chatTypes.js +65 -11
  311. package/dist/src/_internal/util/common/test/shims/chatTypes.js.map +1 -1
  312. package/dist/src/_internal/util/common/test/shims/vscodeTypesShim.d.ts.map +1 -1
  313. package/dist/src/_internal/util/common/test/shims/vscodeTypesShim.js +5 -2
  314. package/dist/src/_internal/util/common/test/shims/vscodeTypesShim.js.map +1 -1
  315. package/dist/src/_internal/util/common/tracing.d.ts +13 -0
  316. package/dist/src/_internal/util/common/tracing.d.ts.map +1 -1
  317. package/dist/src/_internal/util/common/tracing.js +7 -0
  318. package/dist/src/_internal/util/common/tracing.js.map +1 -1
  319. package/dist/src/_internal/vscodeTypes.d.ts +5 -1
  320. package/dist/src/_internal/vscodeTypes.d.ts.map +1 -1
  321. package/dist/src/_internal/vscodeTypes.js +6 -3
  322. package/dist/src/_internal/vscodeTypes.js.map +1 -1
  323. package/dist/src/main.d.ts.map +1 -1
  324. package/dist/src/main.js +5 -0
  325. package/dist/src/main.js.map +1 -1
  326. package/dist/src/package.json +606 -328
  327. package/package.json +3 -3
@@ -123,6 +123,11 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
123
123
  this._capiClientService = _capiClientService;
124
124
  this._configurationService = _configurationService;
125
125
  this._experimentationService = _experimentationService;
126
+ /**
127
+ * Delays (in ms) between connectivity check attempts before retrying a failed request.
128
+ * Configurable for testing purposes.
129
+ */
130
+ this.connectivityCheckDelays = [1000, 10000, 10000];
126
131
  }
127
132
  /**
128
133
  * Note: the returned array of strings may be less than `n` (e.g., in case there were errors during streaming)
@@ -168,8 +173,11 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
168
173
  let tokenCount = -1;
169
174
  const streamRecorder = new chatMLFetcher_1.FetchStreamRecorder(finishedCb);
170
175
  const enableRetryOnError = opts.enableRetryOnError ?? opts.enableRetryOnFilter;
176
+ const canRetryOnce = opts.canRetryOnceWithoutRollback ?? !(opts.enableRetryOnFilter || opts.enableRetryOnError);
171
177
  let usernameToScrub;
172
178
  let actualFetcher;
179
+ let actualBytesReceived;
180
+ let actualStatusCode;
173
181
  try {
174
182
  let response;
175
183
  const payloadValidationResult = isValidChatPayload(opts.messages, postOptions);
@@ -184,9 +192,11 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
184
192
  else {
185
193
  const copilotToken = await this._authenticationService.getCopilotToken();
186
194
  usernameToScrub = copilotToken.username;
187
- const fetchResult = await this._fetchAndStreamChat(chatEndpoint, requestBody, baseTelemetry, streamRecorder.callback, requestOptions.secretKey, copilotToken, opts.location, ourRequestId, postOptions.n, token, userInitiatedRequest, telemetryProperties, opts.useFetcher);
195
+ const fetchResult = await this._fetchAndStreamChat(chatEndpoint, requestBody, baseTelemetry, streamRecorder.callback, requestOptions.secretKey, copilotToken, opts.location, ourRequestId, postOptions.n, token, userInitiatedRequest, telemetryProperties, opts.useFetcher, canRetryOnce);
188
196
  response = fetchResult.result;
189
197
  actualFetcher = fetchResult.fetcher;
198
+ actualBytesReceived = fetchResult.bytesReceived;
199
+ actualStatusCode = fetchResult.statusCode;
190
200
  tokenCount = await chatEndpoint.acquireTokenizer().countMessagesTokens(messages);
191
201
  const extensionId = source?.extensionId ?? constants_1.EXTENSION_ID;
192
202
  this._onDidMakeChatMLRequest.fire({
@@ -200,7 +210,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
200
210
  pendingLoggedChatRequest?.markTimeToFirstToken(timeToFirstToken);
201
211
  switch (response.type) {
202
212
  case fetch_2.FetchResponseKind.Success: {
203
- const result = await this.processSuccessfulResponse(response, messages, requestBody, ourRequestId, maxResponseTokens, tokenCount, timeToFirstToken, streamRecorder, baseTelemetry, chatEndpoint, userInitiatedRequest, actualFetcher);
213
+ const result = await this.processSuccessfulResponse(response, messages, requestBody, ourRequestId, maxResponseTokens, tokenCount, timeToFirstToken, streamRecorder, baseTelemetry, chatEndpoint, userInitiatedRequest, actualFetcher, actualBytesReceived);
204
214
  // Handle FilteredRetry case with augmented messages
205
215
  if (result.type === commonTypes_1.ChatFetchResponseType.FilteredRetry) {
206
216
  if (opts.enableRetryOnFilter) {
@@ -230,6 +240,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
230
240
  userInitiatedRequest: false, // do not mark the retry as user initiated
231
241
  telemetryProperties: { ...telemetryProperties, retryAfterFilterCategory: result.category ?? 'uncategorized' },
232
242
  enableRetryOnFilter: false,
243
+ canRetryOnceWithoutRollback: false,
233
244
  enableRetryOnError,
234
245
  }, token);
235
246
  pendingLoggedChatRequest?.resolve(retryResult, streamRecorder.deltas);
@@ -256,7 +267,6 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
256
267
  model: chatEndpoint.model,
257
268
  apiType: chatEndpoint.apiType,
258
269
  associatedRequestId: telemetryProperties.associatedRequestId,
259
- retryAfterErrorCategory: telemetryProperties.retryAfterErrorCategory,
260
270
  retryAfterError: telemetryProperties.retryAfterError,
261
271
  retryAfterErrorGitHubRequestId: telemetryProperties.retryAfterErrorGitHubRequestId,
262
272
  connectivityTestError: telemetryProperties.connectivityTestError,
@@ -269,16 +279,46 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
269
279
  tokenCountMax: maxResponseTokens,
270
280
  timeToFirstToken,
271
281
  timeToFirstTokenEmitted: (baseTelemetry && streamRecorder.firstTokenEmittedTime) ? streamRecorder.firstTokenEmittedTime - baseTelemetry.issuedTime : -1,
272
- timeToCancelled: baseTelemetry ? Date.now() - baseTelemetry.issuedTime : -1,
282
+ timeToCancelled: Date.now() - baseTelemetry.issuedTime,
273
283
  isVisionRequest: this.filterImageMessages(messages) ? 1 : -1,
274
284
  isBYOK: (0, openAIEndpoint_1.isBYOKModel)(chatEndpoint),
275
- isAuto: (0, autoChatEndpoint_1.isAutoModel)(chatEndpoint)
285
+ isAuto: (0, autoChatEndpoint_1.isAutoModel)(chatEndpoint),
286
+ bytesReceived: actualBytesReceived,
287
+ issuedTime: baseTelemetry.issuedTime,
276
288
  });
277
289
  pendingLoggedChatRequest?.resolveWithCancelation();
278
- return this.processCanceledResponse(response, ourRequestId);
290
+ return this.processCanceledResponse(response, ourRequestId, streamRecorder, telemetryProperties);
279
291
  case fetch_2.FetchResponseKind.Failed: {
280
292
  const processed = this.processFailedResponse(response, ourRequestId);
281
- chatMLFetcherTelemetry_1.ChatMLFetcherTelemetrySender.sendResponseErrorTelemetry(this._telemetryService, processed, telemetryProperties, chatEndpoint, requestBody, tokenCount, maxResponseTokens, timeToFirstToken, this.filterImageMessages(messages), actualFetcher);
293
+ // Retry on server errors based on configured status codes
294
+ const retryServerErrorStatusCodes = this._configurationService.getExperimentBasedConfig(configurationService_1.ConfigKey.TeamInternal.RetryServerErrorStatusCodes, this._experimentationService);
295
+ const statusCodesToRetry = retryServerErrorStatusCodes
296
+ .split(',')
297
+ .map(s => parseInt(s.trim(), 10));
298
+ if (enableRetryOnError && actualStatusCode !== undefined && statusCodesToRetry.includes(actualStatusCode)) {
299
+ const { retryResult } = await this._retryAfterError({
300
+ opts,
301
+ processed,
302
+ telemetryProperties,
303
+ requestBody,
304
+ tokenCount,
305
+ maxResponseTokens,
306
+ timeToError: timeToFirstToken,
307
+ actualFetcher,
308
+ bytesReceived: actualBytesReceived,
309
+ baseTelemetry,
310
+ streamRecorder,
311
+ retryReason: 'server_error',
312
+ debugNamePrefix: 'retry-server-error-',
313
+ pendingLoggedChatRequest,
314
+ token,
315
+ usernameToScrub,
316
+ });
317
+ if (retryResult) {
318
+ return retryResult;
319
+ }
320
+ }
321
+ chatMLFetcherTelemetry_1.ChatMLFetcherTelemetrySender.sendResponseErrorTelemetry(this._telemetryService, processed, telemetryProperties, chatEndpoint, requestBody, tokenCount, maxResponseTokens, timeToFirstToken, this.filterImageMessages(messages), actualFetcher, actualBytesReceived, baseTelemetry.issuedTime);
282
322
  pendingLoggedChatRequest?.resolve(processed);
283
323
  return processed;
284
324
  }
@@ -290,49 +330,31 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
290
330
  actualFetcher = err.fetcherId;
291
331
  }
292
332
  const processed = this.processError(err, ourRequestId, err.gitHubRequestId, usernameToScrub);
293
- let connectivityTestError = telemetryProperties.connectivityTestError;
294
- let connectivityTestErrorGitHubRequestId = telemetryProperties.connectivityTestErrorGitHubRequestId;
295
333
  if (processed.type === commonTypes_1.ChatFetchResponseType.NetworkError && enableRetryOnError) {
296
- // Keep existing handling of net::ERR_NETWORK_CHANGED: https://github.com/microsoft/vscode/issues/260297
297
- const isNetworkChangedError = ['darwin', 'linux'].includes(process.platform) && processed.reason.indexOf('net::ERR_NETWORK_CHANGED') !== -1;
298
334
  const isRetryNetworkErrorEnabled = this._configurationService.getExperimentBasedConfig(configurationService_1.ConfigKey.TeamInternal.RetryNetworkErrors, this._experimentationService);
299
- if (isNetworkChangedError || isRetryNetworkErrorEnabled) {
300
- const useFetcher = isNetworkChangedError ? 'node-fetch' : opts.useFetcher;
301
- this._logService.info(`Retrying chat request with ${useFetcher || 'default'} fetcher after: ${processed.reasonDetail || processed.reason}`);
302
- // Keep existing handling of net::ERR_NETWORK_CHANGED if setting is not enabled: https://github.com/microsoft/vscode/issues/260297
303
- const connectivity = !isRetryNetworkErrorEnabled ? { retryRequest: true } : await this._checkNetworkConnectivity(useFetcher);
304
- connectivityTestError = connectivity.connectivityTestError ? this.scrubErrorDetail(connectivity.connectivityTestError, usernameToScrub) : undefined;
305
- connectivityTestErrorGitHubRequestId = connectivity.connectivityTestErrorGitHubRequestId;
306
- if (connectivity.retryRequest) {
307
- streamRecorder.callback('', 0, { text: '', retryReason: 'network_error' });
308
- const retryResult = await this.fetchMany({
309
- ...opts,
310
- debugName: 'retry-error-' + debugName,
311
- messages,
312
- finishedCb,
313
- location,
314
- endpoint: chatEndpoint,
315
- source,
316
- requestOptions,
317
- userInitiatedRequest: false, // do not mark the retry as user initiated
318
- telemetryProperties: {
319
- ...telemetryProperties,
320
- retryAfterErrorCategory: processed.reasonDetail || processed.reason,
321
- retryAfterError: processed.reasonDetail || processed.reason,
322
- retryAfterErrorGitHubRequestId: processed.serverRequestId,
323
- connectivityTestError,
324
- connectivityTestErrorGitHubRequestId,
325
- },
326
- enableRetryOnFilter: opts.enableRetryOnFilter,
327
- enableRetryOnError: false,
328
- useFetcher,
329
- }, token);
330
- pendingLoggedChatRequest?.resolve(retryResult, streamRecorder.deltas);
335
+ if (isRetryNetworkErrorEnabled) {
336
+ const { retryResult, connectivityTestError, connectivityTestErrorGitHubRequestId } = await this._retryAfterError({
337
+ opts,
338
+ processed,
339
+ telemetryProperties,
340
+ requestBody,
341
+ tokenCount,
342
+ maxResponseTokens,
343
+ timeToError,
344
+ actualFetcher,
345
+ bytesReceived: err.bytesReceived,
346
+ baseTelemetry,
347
+ streamRecorder,
348
+ retryReason: 'network_error',
349
+ debugNamePrefix: 'retry-error-',
350
+ pendingLoggedChatRequest,
351
+ token,
352
+ usernameToScrub,
353
+ });
354
+ if (retryResult) {
331
355
  return retryResult;
332
356
  }
333
- else {
334
- this._logService.info(`Not retrying chat request as network connectivity could not be re-established.`);
335
- }
357
+ telemetryProperties = { ...telemetryProperties, connectivityTestError, connectivityTestErrorGitHubRequestId };
336
358
  }
337
359
  }
338
360
  if (processed.type === commonTypes_1.ChatFetchResponseType.Canceled) {
@@ -342,11 +364,10 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
342
364
  model: chatEndpoint.model,
343
365
  apiType: chatEndpoint.apiType,
344
366
  associatedRequestId: telemetryProperties.associatedRequestId,
345
- retryAfterErrorCategory: telemetryProperties.retryAfterErrorCategory,
346
367
  retryAfterError: telemetryProperties.retryAfterError,
347
368
  retryAfterErrorGitHubRequestId: telemetryProperties.retryAfterErrorGitHubRequestId,
348
- connectivityTestError,
349
- connectivityTestErrorGitHubRequestId,
369
+ connectivityTestError: telemetryProperties.connectivityTestError,
370
+ connectivityTestErrorGitHubRequestId: telemetryProperties.connectivityTestErrorGitHubRequestId,
350
371
  retryAfterFilterCategory: telemetryProperties.retryAfterFilterCategory,
351
372
  fetcher: actualFetcher,
352
373
  }, {
@@ -357,11 +378,13 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
357
378
  timeToCancelled: timeToError,
358
379
  isVisionRequest: this.filterImageMessages(messages) ? 1 : -1,
359
380
  isBYOK: (0, openAIEndpoint_1.isBYOKModel)(chatEndpoint),
360
- isAuto: (0, autoChatEndpoint_1.isAutoModel)(chatEndpoint)
381
+ isAuto: (0, autoChatEndpoint_1.isAutoModel)(chatEndpoint),
382
+ bytesReceived: err.bytesReceived,
383
+ issuedTime: baseTelemetry.issuedTime,
361
384
  });
362
385
  }
363
386
  else {
364
- chatMLFetcherTelemetry_1.ChatMLFetcherTelemetrySender.sendResponseErrorTelemetry(this._telemetryService, processed, { ...telemetryProperties, connectivityTestError, connectivityTestErrorGitHubRequestId }, chatEndpoint, requestBody, tokenCount, maxResponseTokens, timeToError, this.filterImageMessages(messages), actualFetcher);
387
+ chatMLFetcherTelemetry_1.ChatMLFetcherTelemetrySender.sendResponseErrorTelemetry(this._telemetryService, processed, telemetryProperties, chatEndpoint, requestBody, tokenCount, maxResponseTokens, timeToError, this.filterImageMessages(messages), actualFetcher, err.bytesReceived, baseTelemetry.issuedTime);
365
388
  }
366
389
  pendingLoggedChatRequest?.resolve(processed);
367
390
  return processed;
@@ -369,7 +392,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
369
392
  }
370
393
  async _checkNetworkConnectivity(useFetcher) {
371
394
  // Ping CAPI to check network connectivity before retrying
372
- const delays = [1000, 10000, 10000];
395
+ const delays = this.connectivityCheckDelays;
373
396
  let connectivityTestError = undefined;
374
397
  let connectivityTestErrorGitHubRequestId = undefined;
375
398
  for (const delay of delays) {
@@ -421,7 +444,39 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
421
444
  }
422
445
  return authHeaders;
423
446
  }
424
- async _fetchAndStreamChat(chatEndpointInfo, request, baseTelemetryData, finishedCb, secretKey, copilotToken, location, ourRequestId, nChoices, cancellationToken, userInitiatedRequest, telemetryProperties, useFetcher) {
447
+ async _retryAfterError(params) {
448
+ const { opts, processed, telemetryProperties, requestBody, tokenCount, maxResponseTokens, timeToError, actualFetcher, bytesReceived, baseTelemetry, streamRecorder, retryReason, debugNamePrefix, pendingLoggedChatRequest, token, usernameToScrub, } = params;
449
+ // net::ERR_NETWORK_CHANGED: https://github.com/microsoft/vscode/issues/260297
450
+ const isNetworkChangedError = ['darwin', 'linux'].includes(process.platform) && processed.reason.indexOf('net::ERR_NETWORK_CHANGED') !== -1;
451
+ const useFetcher = isNetworkChangedError ? 'node-fetch' : opts.useFetcher;
452
+ this._logService.info(`Retrying chat request with ${useFetcher || 'default'} fetcher after: ${processed.reasonDetail || processed.reason}`);
453
+ const connectivity = await this._checkNetworkConnectivity(useFetcher);
454
+ const connectivityTestError = connectivity.connectivityTestError ? this.scrubErrorDetail(connectivity.connectivityTestError, usernameToScrub) : undefined;
455
+ const connectivityTestErrorGitHubRequestId = connectivity.connectivityTestErrorGitHubRequestId;
456
+ if (!connectivity.retryRequest) {
457
+ this._logService.info(`Not retrying chat request as network connectivity could not be re-established.`);
458
+ return { connectivityTestError, connectivityTestErrorGitHubRequestId };
459
+ }
460
+ chatMLFetcherTelemetry_1.ChatMLFetcherTelemetrySender.sendResponseErrorTelemetry(this._telemetryService, processed, telemetryProperties, opts.endpoint, requestBody, tokenCount, maxResponseTokens, timeToError, this.filterImageMessages(opts.messages), actualFetcher, bytesReceived, baseTelemetry.issuedTime, true);
461
+ streamRecorder.callback('', 0, { text: '', retryReason });
462
+ const retryResult = await this.fetchMany({
463
+ ...opts,
464
+ debugName: debugNamePrefix + opts.debugName,
465
+ userInitiatedRequest: false, // do not mark the retry as user initiated
466
+ telemetryProperties: {
467
+ ...telemetryProperties,
468
+ retryAfterError: processed.reasonDetail || processed.reason,
469
+ retryAfterErrorGitHubRequestId: processed.serverRequestId,
470
+ connectivityTestError,
471
+ connectivityTestErrorGitHubRequestId,
472
+ },
473
+ enableRetryOnError: false,
474
+ useFetcher,
475
+ }, token);
476
+ pendingLoggedChatRequest?.resolve(retryResult, streamRecorder.deltas);
477
+ return { retryResult, connectivityTestError, connectivityTestErrorGitHubRequestId };
478
+ }
479
+ async _fetchAndStreamChat(chatEndpointInfo, request, baseTelemetryData, finishedCb, secretKey, copilotToken, location, ourRequestId, nChoices, cancellationToken, userInitiatedRequest, telemetryProperties, useFetcher, canRetryOnce) {
425
480
  if (cancellationToken.isCancellationRequested) {
426
481
  return { result: { type: fetch_2.FetchResponseKind.Canceled, reason: 'before fetch request' } };
427
482
  }
@@ -445,13 +500,12 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
445
500
  }
446
501
  // Generate unique ID to link input and output messages
447
502
  const modelCallId = (0, uuid_1.generateUuid)();
448
- const response = await this._fetchWithInstrumentation(chatEndpointInfo, ourRequestId, request, secretKey, location, cancellationToken, userInitiatedRequest, { ...telemetryProperties, modelCallId }, useFetcher);
503
+ const response = await this._fetchWithInstrumentation(chatEndpointInfo, ourRequestId, request, secretKey, location, cancellationToken, userInitiatedRequest, { ...telemetryProperties, modelCallId }, useFetcher, canRetryOnce);
449
504
  if (cancellationToken.isCancellationRequested) {
450
- const body = await response.body();
451
505
  try {
452
506
  // Destroy the stream so that the server is hopefully notified we don't want any more data
453
507
  // and can cancel/forget about the request itself.
454
- body.destroy();
508
+ await response.body.destroy();
455
509
  }
456
510
  catch (e) {
457
511
  this._logService.error(e, `Error destroying stream`);
@@ -459,7 +513,8 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
459
513
  }
460
514
  return {
461
515
  result: { type: fetch_2.FetchResponseKind.Canceled, reason: 'after fetch request' },
462
- fetcher: response.fetcher
516
+ fetcher: response.fetcher,
517
+ bytesReceived: response.bytesReceived
463
518
  };
464
519
  }
465
520
  if (response.status === 200 && this._authenticationService.copilotToken?.isFreeUser && this._authenticationService.copilotToken?.isChatQuotaExceeded) {
@@ -470,7 +525,9 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
470
525
  this._logService.info('Request ID for failed request: ' + ourRequestId);
471
526
  return {
472
527
  result: await this._handleError(telemetryData, response, ourRequestId),
473
- fetcher: response.fetcher
528
+ fetcher: response.fetcher,
529
+ bytesReceived: response.bytesReceived,
530
+ statusCode: response.status
474
531
  };
475
532
  }
476
533
  // Extend baseTelemetryData with modelCallId for output messages
@@ -488,6 +545,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
488
545
  catch (err) {
489
546
  err.fetcherId = response.fetcher;
490
547
  err.gitHubRequestId = gitHubRequestId;
548
+ err.bytesReceived = response.bytesReceived;
491
549
  throw err;
492
550
  }
493
551
  });
@@ -495,6 +553,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
495
553
  catch (err) {
496
554
  err.fetcherId = response.fetcher;
497
555
  err.gitHubRequestId = gitHubRequestId;
556
+ err.bytesReceived = response.bytesReceived;
498
557
  throw err;
499
558
  }
500
559
  // CAPI will return us a Copilot Edits Session Header which is our token to using the speculative decoding endpoint
@@ -508,10 +567,11 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
508
567
  type: fetch_2.FetchResponseKind.Success,
509
568
  chatCompletions,
510
569
  },
511
- fetcher: response.fetcher
570
+ fetcher: response.fetcher,
571
+ bytesReceived: response.bytesReceived
512
572
  };
513
573
  }
514
- async _fetchWithInstrumentation(chatEndpoint, ourRequestId, request, secretKey, location, cancellationToken, userInitiatedRequest, telemetryProperties, useFetcher) {
574
+ async _fetchWithInstrumentation(chatEndpoint, ourRequestId, request, secretKey, location, cancellationToken, userInitiatedRequest, telemetryProperties, useFetcher, canRetryOnce) {
515
575
  // If request contains an image, we include this header.
516
576
  const additionalHeaders = {
517
577
  'X-Interaction-Id': this._interactionService.interactionId,
@@ -542,7 +602,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
542
602
  const requestStart = Date.now();
543
603
  const intent = locationToIntent(location);
544
604
  // Wrap the Promise with success/error callbacks so we can log/measure it
545
- 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).then(response => {
605
+ 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).then(response => {
546
606
  const apim = response.headers.get('apim-request-id');
547
607
  if (apim) {
548
608
  this._logService.debug(`APIM request id: ${apim}`);
@@ -553,7 +613,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
553
613
  }
554
614
  // This ID is hopefully the one the same as ourRequestId, but it is not guaranteed.
555
615
  // If they are different then we will override the original one we set in telemetryData above.
556
- const modelRequestId = (0, fetch_1.getRequestId)(response, undefined);
616
+ const modelRequestId = (0, fetch_1.getRequestId)(response.headers);
557
617
  telemetryData.extendWithRequestId(modelRequestId);
558
618
  // TODO: Add response length (requires parsing)
559
619
  const totalTimeMs = Date.now() - requestStart;
@@ -584,7 +644,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
584
644
  });
585
645
  }
586
646
  async _handleError(telemetryData, response, requestId) {
587
- const modelRequestIdObj = (0, fetch_1.getRequestId)(response, undefined);
647
+ const modelRequestIdObj = (0, fetch_1.getRequestId)(response.headers);
588
648
  requestId = modelRequestIdObj.headerRequestId || requestId;
589
649
  modelRequestIdObj.headerRequestId = requestId;
590
650
  telemetryData.properties.error = `Response status was ${response.status}`;
@@ -643,7 +703,10 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
643
703
  if (response.status === 402) {
644
704
  // When we receive a 402, we have exceed a quota
645
705
  // This is stored on the token so let's refresh it
646
- this._authenticationService.resetCopilotToken(response.status);
706
+ if (!this._authenticationService.copilotToken?.isChatQuotaExceeded) {
707
+ this._authenticationService.resetCopilotToken(response.status);
708
+ await this._authenticationService.getCopilotToken();
709
+ }
647
710
  const retryAfter = response.headers.get('retry-after');
648
711
  const convertToDate = (retryAfterString) => {
649
712
  if (!retryAfterString) {
@@ -783,7 +846,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
783
846
  reason: `Request Failed: ${response.status} ${text}`
784
847
  };
785
848
  }
786
- async processSuccessfulResponse(response, messages, requestBody, requestId, maxResponseTokens, promptTokenCount, timeToFirstToken, streamRecorder, baseTelemetry, chatEndpointInfo, userInitiatedRequest, fetcher) {
849
+ async processSuccessfulResponse(response, messages, requestBody, requestId, maxResponseTokens, promptTokenCount, timeToFirstToken, streamRecorder, baseTelemetry, chatEndpointInfo, userInitiatedRequest, fetcher, bytesReceived) {
787
850
  const completions = [];
788
851
  for await (const chatCompletion of response.chatCompletions) {
789
852
  chatMLFetcherTelemetry_1.ChatMLFetcherTelemetrySender.sendSuccessTelemetry(this._telemetryService, {
@@ -798,6 +861,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
798
861
  timeToFirstTokenEmitted: (baseTelemetry && streamRecorder.firstTokenEmittedTime) ? streamRecorder.firstTokenEmittedTime - baseTelemetry.issuedTime : -1,
799
862
  hasImageMessages: this.filterImageMessages(messages),
800
863
  fetcher,
864
+ bytesReceived,
801
865
  });
802
866
  if (!this.isRepetitive(chatCompletion, baseTelemetry?.properties)) {
803
867
  completions.push(chatCompletion);
@@ -885,7 +949,62 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
885
949
  }
886
950
  return hasRepetition;
887
951
  }
888
- processCanceledResponse(response, requestId) {
952
+ /**
953
+ * Check for repetition in partial response deltas from a cancelled request.
954
+ *
955
+ * This method performs the same repetition detection as the `isRepetitive` method,
956
+ * but operates on partial response data collected before the request was cancelled.
957
+ *
958
+ * Key differences from completed requests:
959
+ * - Text is reconstructed from delta.text values instead of message.content
960
+ * - Tokens are approximated by splitting text on whitespace instead of using
961
+ * the actual token array (which is only available in completed responses)
962
+ * - Enhanced telemetry won't include RequestId fields since we only have the
963
+ * headerRequestId string, not the full RequestId object
964
+ * - The finishReason is marked as 'canceled' to distinguish from server-generated
965
+ * finish reasons
966
+ */
967
+ checkRepetitionInDeltas(deltas, requestId, telemetryProperties) {
968
+ // Reconstruct the text content from deltas (filter out null, undefined, and empty text values)
969
+ const textContent = deltas.filter(delta => delta.text?.length > 0).map(delta => delta.text).join('');
970
+ // Early exit if no content
971
+ if (!textContent || textContent.trim().length === 0) {
972
+ return;
973
+ }
974
+ // For cancelled requests, we don't have the actual token array (only available in ChatCompletion),
975
+ // so we approximate by splitting text content on whitespace. This is less precise than actual
976
+ // tokenization but sufficient for detecting obvious repetition patterns.
977
+ const tokens = textContent.split(/\s+/).filter(t => t.length > 0);
978
+ // Check for line repetition
979
+ const lineRepetitionStats = (0, anomalyDetection_1.calculateLineRepetitionStats)(textContent);
980
+ // Check for token-level repetition
981
+ const hasRepetition = (0, anomalyDetection_1.isRepetitive)(tokens);
982
+ // Send telemetry if repetition is detected
983
+ if (hasRepetition) {
984
+ const telemetryData = telemetryData_1.TelemetryData.createAndMarkAsIssued();
985
+ const extended = telemetryData.extendedBy(telemetryProperties);
986
+ // Note: For cancelled requests, we don't have a full RequestId object,
987
+ // so we can't use extendWithRequestId like the non-cancelled path does.
988
+ // This means enhanced telemetry for cancelled requests won't include
989
+ // completionId, created, deploymentId, or serverExperiments fields.
990
+ this._telemetryService.sendEnhancedGHTelemetryEvent('conversation.repetition.detected', extended.properties, extended.measurements);
991
+ }
992
+ if (lineRepetitionStats.numberOfRepetitions >= 10) {
993
+ this._telemetryService.sendMSFTTelemetryEvent('conversation.repetition.detected', {
994
+ requestId: requestId,
995
+ finishReason: 'canceled', // Client-side finish reason to distinguish from server-generated reasons
996
+ }, {
997
+ numberOfRepetitions: lineRepetitionStats.numberOfRepetitions,
998
+ lengthOfLine: lineRepetitionStats.mostRepeatedLine.length,
999
+ totalLines: lineRepetitionStats.totalLines
1000
+ });
1001
+ }
1002
+ }
1003
+ processCanceledResponse(response, requestId, streamRecorder, telemetryProperties) {
1004
+ // Check for repetition in the partial response before cancellation
1005
+ if (streamRecorder && streamRecorder.deltas.length > 0) {
1006
+ this.checkRepetitionInDeltas(streamRecorder.deltas, requestId, telemetryProperties);
1007
+ }
889
1008
  return {
890
1009
  type: commonTypes_1.ChatFetchResponseType.Canceled,
891
1010
  reason: response.reason,
@@ -1071,6 +1190,8 @@ function locationToIntent(location) {
1071
1190
  return 'conversation-agent';
1072
1191
  case commonTypes_1.ChatLocation.ResponsesProxy:
1073
1192
  return 'responses-proxy';
1193
+ case commonTypes_1.ChatLocation.MessagesProxy:
1194
+ return 'messages-proxy';
1074
1195
  }
1075
1196
  }
1076
1197
  //# sourceMappingURL=chatMLFetcher.js.map