@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
@@ -93,6 +93,19 @@ const xtabCustomDiffPatchResponseHandler_1 = require("./xtabCustomDiffPatchRespo
93
93
  const xtabEndpoint_1 = require("./xtabEndpoint");
94
94
  const xtabNextCursorPredictor_1 = require("./xtabNextCursorPredictor");
95
95
  const xtabUtils_1 = require("./xtabUtils");
96
+ var RetryState;
97
+ (function (RetryState) {
98
+ class NotRetrying {
99
+ static { this.INSTANCE = new NotRetrying(); }
100
+ }
101
+ RetryState.NotRetrying = NotRetrying;
102
+ class Retrying {
103
+ constructor(reason) {
104
+ this.reason = reason;
105
+ }
106
+ }
107
+ RetryState.Retrying = Retrying;
108
+ })(RetryState || (RetryState = {}));
96
109
  let XtabProvider = class XtabProvider {
97
110
  static { XtabProvider_1 = this; }
98
111
  static { this.ID = configurationService_1.XTabProviderId; }
@@ -109,7 +122,6 @@ let XtabProvider = class XtabProvider {
109
122
  this.langDiagService = langDiagService;
110
123
  this.ignoreService = ignoreService;
111
124
  this.ID = XtabProvider_1.ID;
112
- this.dependsOnSelection = true;
113
125
  this.showNextEditPreference = "always" /* ShowNextEditPreference.Always */;
114
126
  this.forceUseDefaultModel = false;
115
127
  this.userInteractionMonitor = new userInteractionMonitor_1.UserInteractionMonitor(this.configService, this.expService);
@@ -121,47 +133,7 @@ let XtabProvider = class XtabProvider {
121
133
  handleRejection() {
122
134
  this.userInteractionMonitor.handleRejection();
123
135
  }
124
- provideNextEdit(request, pushEdit, tracer, logContext, cancellationToken) {
125
- const filteringPushEdit = (result) => {
126
- if (result.isError()) {
127
- pushEdit(result);
128
- return;
129
- }
130
- const { edit } = result.val;
131
- const filteredEdits = this.filterEdit(request.getActiveDocument(), [edit]);
132
- if (filteredEdits.length === 0) { // do not invoke pushEdit
133
- return;
134
- }
135
- pushEdit(result);
136
- };
137
- return this._provideNextEdit(request, filteringPushEdit, tracer, logContext, cancellationToken);
138
- }
139
- filterEdit(activeDoc, edits) {
140
- const filters = [
141
- (edits) => importFiltering_1.IgnoreImportChangesAspect.filterEdit(activeDoc, edits),
142
- (edits) => statelessNextEditProviders_1.IgnoreEmptyLineAndLeadingTrailingWhitespaceChanges.filterEdit(activeDoc, edits),
143
- ];
144
- if (!this.configService.getExperimentBasedConfig(configurationService_1.ConfigKey.InlineEditsAllowWhitespaceOnlyChanges, this.expService)) {
145
- filters.push((edits) => statelessNextEditProviders_1.IgnoreWhitespaceOnlyChanges.filterEdit(activeDoc, edits));
146
- }
147
- const undoInsertionFiltering = this.configService.getExperimentBasedConfig(configurationService_1.ConfigKey.TeamInternal.InlineEditsUndoInsertionFiltering, this.expService);
148
- if (undoInsertionFiltering !== undefined) {
149
- let filter;
150
- switch (undoInsertionFiltering) {
151
- case 'v1':
152
- filter = statelessNextEditProviders_1.editWouldDeleteWhatWasJustInserted;
153
- break;
154
- case 'v2':
155
- filter = statelessNextEditProviders_1.editWouldDeleteWhatWasJustInserted2;
156
- break;
157
- default:
158
- (0, assert_1.assertNever)(undoInsertionFiltering);
159
- }
160
- filters.push((edits) => filter(activeDoc, new lineEdit_1.LineEdit(edits)) ? [] : edits);
161
- }
162
- return filters.reduce((acc, filter) => filter(acc), edits);
163
- }
164
- async _provideNextEdit(request, pushEdit, tracer, logContext, cancellationToken) {
136
+ async provideNextEdit(request, pushEdit, tracer, logContext, cancellationToken) {
165
137
  const telemetry = new statelessNextEditProvider_1.StatelessNextEditTelemetryBuilder(request);
166
138
  logContext.setProviderStartTime();
167
139
  try {
@@ -169,7 +141,31 @@ let XtabProvider = class XtabProvider {
169
141
  return statelessNextEditProvider_1.StatelessNextEditResult.noEdit(new statelessNextEditProvider_1.NoNextEditReason.ActiveDocumentHasNoEdits(), telemetry);
170
142
  }
171
143
  const delaySession = this.userInteractionMonitor.createDelaySession(request.providerRequestStartDateTime);
172
- const nextEditResult = await this.doGetNextEdit(request, pushEdit, delaySession, tracer, logContext, cancellationToken, telemetry, 0 /* RetryState.NotRetrying */);
144
+ const iterator = this.doGetNextEdit(request, delaySession, tracer, logContext, cancellationToken, telemetry, RetryState.NotRetrying.INSTANCE);
145
+ let res = await iterator.next(); // for-async-await loop doesn't work because we need to access the final return value
146
+ let nextEditResult;
147
+ if (res.done) {
148
+ // stream already ended, so we can just return the final reason
149
+ nextEditResult = result_1.Result.error(res.value);
150
+ pushEdit(nextEditResult);
151
+ }
152
+ else {
153
+ // stream is not done yet, so we push the first edit and then continue streaming in the background
154
+ nextEditResult = result_1.Result.ok(undefined);
155
+ (async () => {
156
+ let nEdits = 0;
157
+ while (!res.done) {
158
+ nEdits++;
159
+ pushEdit(result_1.Result.ok(res.value));
160
+ res = await iterator.next();
161
+ }
162
+ pushEdit(result_1.Result.error(res.value));
163
+ })().catch((err) => {
164
+ const error = errors.fromUnknown(err);
165
+ logContext.addLog(`Error while streaming further edits: ${errors.fromUnknown(err)}`);
166
+ pushEdit(result_1.Result.error(new statelessNextEditProvider_1.NoNextEditReason.Unexpected(error)));
167
+ });
168
+ }
173
169
  if (nextEditResult.isError() && nextEditResult.err instanceof statelessNextEditProvider_1.NoNextEditReason.GotCancelled) {
174
170
  logContext.setIsSkipped();
175
171
  }
@@ -182,14 +178,14 @@ let XtabProvider = class XtabProvider {
182
178
  logContext.setProviderEndTime();
183
179
  }
184
180
  }
185
- async doGetNextEdit(request, pushEdit, delaySession, tracer, logContext, cancellationToken, telemetryBuilder, retryState) {
186
- return this.doGetNextEditWithSelection(request, (0, nearbyCursorInlineEditProvider_1.getOrDeduceSelectionFromLastEdit)(request.getActiveDocument()), pushEdit, delaySession, tracer, logContext, cancellationToken, telemetryBuilder, retryState);
181
+ doGetNextEdit(request, delaySession, tracer, logContext, cancellationToken, telemetryBuilder, retryState) {
182
+ return this.doGetNextEditWithSelection(request, (0, nearbyCursorInlineEditProvider_1.getOrDeduceSelectionFromLastEdit)(request.getActiveDocument()), delaySession, tracer, logContext, cancellationToken, telemetryBuilder, retryState);
187
183
  }
188
- async doGetNextEditWithSelection(request, selection, pushEdit, delaySession, parentTracer, logContext, cancellationToken, telemetryBuilder, retryState) {
184
+ async *doGetNextEditWithSelection(request, selection, delaySession, parentTracer, logContext, cancellationToken, telemetryBuilder, retryState) {
189
185
  const tracer = parentTracer.sub(['XtabProvider', 'doGetNextEditWithSelection']);
190
186
  const activeDocument = request.getActiveDocument();
191
187
  if (selection === null) {
192
- return result_1.Result.error(new statelessNextEditProvider_1.NoNextEditReason.Uncategorized(new Error('NoSelection')));
188
+ return new statelessNextEditProvider_1.NoNextEditReason.Uncategorized(new Error('NoSelection'));
193
189
  }
194
190
  const promptOptions = this.determineModelConfiguration(activeDocument);
195
191
  const endpoint = this.getEndpoint(promptOptions.modelName);
@@ -209,14 +205,14 @@ let XtabProvider = class XtabProvider {
209
205
  }
210
206
  telemetryBuilder.setIsCursorAtLineEnd(isCursorAtEndOfLine);
211
207
  const areaAroundEditWindowLinesRange = this.computeAreaAroundEditWindowLinesRange(currentDocument);
212
- const editWindowLinesRange = this.computeEditWindowLinesRange(currentDocument, request, retryState, tracer, telemetryBuilder);
208
+ const editWindowLinesRange = this.computeEditWindowLinesRange(currentDocument, request, tracer, telemetryBuilder);
213
209
  const cursorOriginalLinesOffset = Math.max(0, currentDocument.cursorLineOffset - editWindowLinesRange.start);
214
210
  const editWindowLastLineLength = currentDocument.transformer.getLineLength(editWindowLinesRange.endExclusive);
215
211
  const editWindow = currentDocument.transformer.getOffsetRange(new range_1.Range(editWindowLinesRange.start + 1, 1, editWindowLinesRange.endExclusive, editWindowLastLineLength + 1));
216
212
  const editWindowLines = currentDocument.lines.slice(editWindowLinesRange.start, editWindowLinesRange.endExclusive);
217
213
  const editWindowTokenLimit = this.configService.getExperimentBasedConfig(configurationService_1.ConfigKey.TeamInternal.InlineEditsXtabEditWindowMaxTokens, this.expService);
218
214
  if (editWindowTokenLimit !== undefined && (0, promptCrafting_1.countTokensForLines)(editWindowLines, XtabProvider_1.computeTokens) > editWindowTokenLimit) {
219
- return result_1.Result.error(new statelessNextEditProvider_1.NoNextEditReason.PromptTooLarge('editWindow'));
215
+ return new statelessNextEditProvider_1.NoNextEditReason.PromptTooLarge('editWindow');
220
216
  }
221
217
  // Expected: editWindow.substring(activeDocument.documentAfterEdits.value) === editWindowLines.join('\n')
222
218
  const doesIncludeCursorTag = editWindowLines.some(line => line.includes(tags_1.PromptTags.CURSOR));
@@ -228,14 +224,21 @@ let XtabProvider = class XtabProvider {
228
224
  }
229
225
  });
230
226
  if (taggedCurrentFileContentResult.isError()) {
231
- return result_1.Result.error(new statelessNextEditProvider_1.NoNextEditReason.PromptTooLarge('currentFile'));
227
+ return new statelessNextEditProvider_1.NoNextEditReason.PromptTooLarge('currentFile');
232
228
  }
233
229
  const { clippedTaggedCurrentDoc, areaAroundCodeToEdit } = taggedCurrentFileContentResult.val;
234
230
  telemetryBuilder.setNLinesOfCurrentFileInPrompt(clippedTaggedCurrentDoc.lines.length);
235
- const aggressivenessLevel = this.userInteractionMonitor.getAggressivenessLevel();
231
+ const { aggressivenessLevel, userHappinessScore } = this.userInteractionMonitor.getAggressivenessLevel();
232
+ // Log aggressiveness level and user happiness score when using XtabAggressiveness prompting strategy
233
+ if (promptOptions.promptingStrategy === xtabPromptOptions_1.PromptingStrategy.XtabAggressiveness) {
234
+ telemetryBuilder.setXtabAggressivenessLevel(aggressivenessLevel);
235
+ if (userHappinessScore !== undefined) {
236
+ telemetryBuilder.setXtabUserHappinessScore(userHappinessScore);
237
+ }
238
+ }
236
239
  const langCtx = await this.getAndProcessLanguageContext(request, delaySession, activeDocument, cursorPosition, promptOptions, tracer, logContext, cancellationToken);
237
240
  if (cancellationToken.isCancellationRequested) {
238
- return result_1.Result.error(new statelessNextEditProvider_1.NoNextEditReason.GotCancelled('afterLanguageContextAwait'));
241
+ return new statelessNextEditProvider_1.NoNextEditReason.GotCancelled('afterLanguageContextAwait');
239
242
  }
240
243
  const lintErrors = promptOptions.lintOptions ? new lintErrors_1.LintErrors(promptOptions.lintOptions, activeDocument.id, currentDocument, this.langDiagService) : undefined;
241
244
  const promptPieces = new promptCrafting_1.PromptPieces(currentDocument, editWindowLinesRange, areaAroundEditWindowLinesRange, activeDocument, request.xtabEditHistory, clippedTaggedCurrentDoc.lines, areaAroundCodeToEdit, langCtx, aggressivenessLevel, lintErrors, XtabProvider_1.computeTokens, promptOptions);
@@ -251,20 +254,19 @@ let XtabProvider = class XtabProvider {
251
254
  const HARD_CHAR_LIMIT = 30000 * 4; // 30K tokens, assuming 4 chars per token -- we use approximation here because counting tokens exactly is time-consuming
252
255
  const promptCharCount = (0, xtabUtils_1.charCount)(messages);
253
256
  if (promptCharCount > HARD_CHAR_LIMIT) {
254
- return result_1.Result.error(new statelessNextEditProvider_1.NoNextEditReason.PromptTooLarge('final'));
257
+ return new statelessNextEditProvider_1.NoNextEditReason.PromptTooLarge('final');
255
258
  }
256
259
  await this.debounce(delaySession, retryState, tracer, telemetryBuilder);
257
260
  if (cancellationToken.isCancellationRequested) {
258
- return result_1.Result.error(new statelessNextEditProvider_1.NoNextEditReason.GotCancelled('afterDebounce'));
261
+ return new statelessNextEditProvider_1.NoNextEditReason.GotCancelled('afterDebounce');
259
262
  }
260
263
  request.fetchIssued = true;
261
264
  const cursorLineOffset = cursorPosition.column;
262
- this.streamEdits(request, pushEdit, endpoint, messages, editWindow, editWindowLines, cursorOriginalLinesOffset, cursorLineOffset, editWindowLinesRange, promptPieces, prediction, {
265
+ return yield* this.streamEditsWithFiltering(request, endpoint, messages, editWindow, editWindowLines, cursorOriginalLinesOffset, cursorLineOffset, editWindowLinesRange, promptPieces, prediction, {
263
266
  shouldRemoveCursorTagFromResponse,
264
267
  responseFormat,
265
268
  retryState,
266
269
  }, delaySession, tracer, telemetryBuilder, logContext, cancellationToken);
267
- return result_1.Result.ok(undefined);
268
270
  }
269
271
  getAndProcessLanguageContext(request, delaySession, activeDocument, cursorPosition, promptOptions, tracer, logContext, cancellationToken) {
270
272
  const recordingEnabled = this.configService.getConfig(configurationService_1.ConfigKey.TeamInternal.InlineEditsLogContextRecorderEnabled);
@@ -347,7 +349,34 @@ let XtabProvider = class XtabProvider {
347
349
  return undefined;
348
350
  }
349
351
  }
350
- async streamEdits(request, pushEdit, endpoint, messages, editWindow, editWindowLines, cursorOriginalLinesOffset, cursorLineOffset, // cursor offset within the line it's in; 1-based
352
+ async *streamEditsWithFiltering(request, endpoint, messages, editWindow, editWindowLines, cursorOriginalLinesOffset, cursorLineOffset, // cursor offset within the line it's in; 1-based
353
+ editWindowLineRange, promptPieces, prediction, opts, delaySession, parentTracer, telemetryBuilder, logContext, cancellationToken) {
354
+ const tracer = parentTracer.sub('streamEditsWithFiltering');
355
+ const iterator = this.streamEdits(request, endpoint, messages, editWindow, editWindowLines, cursorOriginalLinesOffset, cursorLineOffset, editWindowLineRange, promptPieces, prediction, opts, delaySession, tracer, telemetryBuilder, logContext, cancellationToken);
356
+ let nEdits = 0;
357
+ let r = await iterator.next();
358
+ while (!r.done) {
359
+ const edit = r.value.edit;
360
+ const filteredEdits = this.filterEdit(request.getActiveDocument(), [edit]);
361
+ const isFilteredOut = filteredEdits.length === 0;
362
+ if (isFilteredOut) {
363
+ tracer.trace(`Filtered out an edit: ${edit.toString()}`);
364
+ }
365
+ else {
366
+ tracer.trace(`Yielding an edit: ${edit.toString()}`);
367
+ yield r.value;
368
+ nEdits++;
369
+ }
370
+ r = await iterator.next();
371
+ }
372
+ if (nEdits === 0 &&
373
+ r.value instanceof statelessNextEditProvider_1.NoNextEditReason.NoSuggestions // only retry if there was no error, cancellation, etc.
374
+ ) {
375
+ return yield* this.doGetNextEditsWithCursorJump(request, editWindow, promptPieces, delaySession, parentTracer, logContext, cancellationToken, telemetryBuilder, opts.retryState);
376
+ }
377
+ return r.value;
378
+ }
379
+ async *streamEdits(request, endpoint, messages, editWindow, editWindowLines, cursorOriginalLinesOffset, cursorLineOffset, // cursor offset within the line it's in; 1-based
351
380
  editWindowLineRange, promptPieces, prediction, opts, delaySession, parentTracer, telemetryBuilder, logContext, cancellationToken) {
352
381
  const tracer = parentTracer.sub('streamEdits');
353
382
  const useFetcher = this.configService.getExperimentBasedConfig(configurationService_1.ConfigKey.NextEditSuggestionsFetcher, this.expService) || undefined;
@@ -397,10 +426,9 @@ let XtabProvider = class XtabProvider {
397
426
  !this.forceUseDefaultModel // if we haven't already forced using the default model; otherwise, this could cause an infinite loop
398
427
  ) {
399
428
  this.forceUseDefaultModel = true;
400
- return this.doGetNextEdit(request, pushEdit, delaySession, tracer, logContext, cancellationToken, telemetryBuilder, opts.retryState); // use the same retry state
429
+ return yield* this.doGetNextEdit(request, delaySession, tracer, logContext, cancellationToken, telemetryBuilder, opts.retryState); // use the same retry state
401
430
  }
402
- pushEdit(result_1.Result.error(XtabProvider_1.mapChatFetcherErrorToNoNextEditReason(fetchRes)));
403
- return;
431
+ return XtabProvider_1.mapChatFetcherErrorToNoNextEditReason(fetchRes);
404
432
  }
405
433
  fetchResultPromise
406
434
  .then((response) => {
@@ -412,8 +440,6 @@ let XtabProvider = class XtabProvider {
412
440
  // in principle this shouldn't happen because ChatMLFetcher's fetchOne should not throw
413
441
  logContext.setError(errors.fromUnknown(err));
414
442
  logContext.addLog(`ChatMLFetcher fetch call threw -- this's UNEXPECTED!`);
415
- // Properly handle the error by pushing it as a result
416
- pushEdit(result_1.Result.error(new statelessNextEditProvider_1.NoNextEditReason.Unexpected(errors.fromUnknown(err))));
417
443
  }).finally(() => {
418
444
  logContext.setFetchEndTime();
419
445
  if (!firstTokenReceived.isSettled) {
@@ -435,37 +461,34 @@ let XtabProvider = class XtabProvider {
435
461
  : v;
436
462
  });
437
463
  })();
464
+ const isFromCursorJump = opts.retryState instanceof RetryState.Retrying && opts.retryState.reason === 'cursorJump';
438
465
  let cleanedLinesStream;
439
466
  if (opts.responseFormat === xtabPromptOptions.ResponseFormat.EditWindowOnly) {
440
467
  cleanedLinesStream = linesStream;
441
468
  }
442
469
  else if (opts.responseFormat === xtabPromptOptions.ResponseFormat.CustomDiffPatch) {
443
- return xtabCustomDiffPatchResponseHandler_1.XtabCustomDiffPatchResponseHandler.handleResponse(pushEdit, linesStream, request.documentBeforeEdits, editWindow);
470
+ return yield* xtabCustomDiffPatchResponseHandler_1.XtabCustomDiffPatchResponseHandler.handleResponse(linesStream, request.documentBeforeEdits, editWindow);
444
471
  }
445
472
  else if (opts.responseFormat === xtabPromptOptions.ResponseFormat.UnifiedWithXml) {
446
473
  const linesIter = linesStream[Symbol.asyncIterator]();
447
474
  const firstLine = await linesIter.next();
448
475
  if (chatResponseFailure !== undefined) { // handle fetch failure
449
- pushEdit(result_1.Result.error(new statelessNextEditProvider_1.NoNextEditReason.Unexpected(errors.fromUnknown(chatResponseFailure))));
450
- return;
476
+ return new statelessNextEditProvider_1.NoNextEditReason.Unexpected(errors.fromUnknown(chatResponseFailure));
451
477
  }
452
478
  if (firstLine.done) { // no lines in response -- unexpected case but take as no suggestions
453
- pushEdit(result_1.Result.error(new statelessNextEditProvider_1.NoNextEditReason.NoSuggestions(request.documentBeforeEdits, editWindow)));
454
- return;
479
+ return new statelessNextEditProvider_1.NoNextEditReason.NoSuggestions(request.documentBeforeEdits, editWindow);
455
480
  }
456
481
  const trimmedLines = firstLine.value.trim();
457
482
  if (trimmedLines === tags_1.ResponseTags.NO_CHANGE.start) {
458
- await this.pushNoSuggestionsOrRetry(request, editWindow, promptPieces, pushEdit, delaySession, tracer, logContext, cancellationToken, telemetryBuilder, opts.retryState);
459
- return;
483
+ return yield* this.doGetNextEditsWithCursorJump(request, editWindow, promptPieces, delaySession, tracer, logContext, cancellationToken, telemetryBuilder, opts.retryState);
460
484
  }
461
485
  if (trimmedLines === tags_1.ResponseTags.INSERT.start) {
462
486
  const lineWithCursorContinued = await linesIter.next();
463
487
  if (lineWithCursorContinued.done || lineWithCursorContinued.value.includes(tags_1.ResponseTags.INSERT.end)) {
464
- pushEdit(result_1.Result.error(new statelessNextEditProvider_1.NoNextEditReason.NoSuggestions(request.documentBeforeEdits, editWindow)));
465
- return;
488
+ return new statelessNextEditProvider_1.NoNextEditReason.NoSuggestions(request.documentBeforeEdits, editWindow);
466
489
  }
467
490
  const edit = new lineEdit_1.LineReplacement(new lineRange_1.LineRange(editWindowLineRange.start + cursorOriginalLinesOffset + 1 /* 0-based to 1-based */, editWindowLineRange.start + cursorOriginalLinesOffset + 2), [editWindowLines[cursorOriginalLinesOffset].slice(0, cursorLineOffset - 1) + lineWithCursorContinued.value + editWindowLines[cursorOriginalLinesOffset].slice(cursorLineOffset - 1)]);
468
- pushEdit(result_1.Result.ok({ edit, window: editWindow }));
491
+ yield { edit, isFromCursorJump, window: editWindow };
469
492
  const lines = [];
470
493
  let v = await linesIter.next();
471
494
  while (!v.done) {
@@ -478,12 +501,12 @@ let XtabProvider = class XtabProvider {
478
501
  v = await linesIter.next();
479
502
  }
480
503
  const line = editWindowLineRange.start + cursorOriginalLinesOffset + 2;
481
- pushEdit(result_1.Result.ok({
504
+ yield {
482
505
  edit: new lineEdit_1.LineReplacement(new lineRange_1.LineRange(line, line), lines),
506
+ isFromCursorJump,
483
507
  window: editWindow
484
- }));
485
- pushEdit(result_1.Result.error(new statelessNextEditProvider_1.NoNextEditReason.NoSuggestions(request.documentBeforeEdits, editWindow)));
486
- return;
508
+ };
509
+ return new statelessNextEditProvider_1.NoNextEditReason.NoSuggestions(request.documentBeforeEdits, editWindow);
487
510
  }
488
511
  if (trimmedLines === tags_1.ResponseTags.EDIT.start) {
489
512
  cleanedLinesStream = new async_2.AsyncIterableObject(async (emitter) => {
@@ -498,8 +521,7 @@ let XtabProvider = class XtabProvider {
498
521
  });
499
522
  }
500
523
  else {
501
- pushEdit(result_1.Result.error(new statelessNextEditProvider_1.NoNextEditReason.Unexpected(new Error(`unexpected tag ${trimmedLines}`))));
502
- return;
524
+ return new statelessNextEditProvider_1.NoNextEditReason.Unexpected(new Error(`unexpected tag ${trimmedLines}`));
503
525
  }
504
526
  }
505
527
  else if (opts.responseFormat === xtabPromptOptions.ResponseFormat.CodeBlock) {
@@ -514,129 +536,110 @@ let XtabProvider = class XtabProvider {
514
536
  nSignificantLinesToConverge: this.configService.getExperimentBasedConfig(configurationService_1.ConfigKey.TeamInternal.InlineEditsXtabNSignificantLinesToConverge, this.expService),
515
537
  };
516
538
  tracer.trace(`starting to diff stream against edit window lines with latency ${fetchRequestStopWatch.elapsed()} ms`);
517
- (async () => {
518
- let i = 0;
519
- let hasBeenDelayed = false;
520
- try {
521
- for await (const edit of responseProcessor_1.ResponseProcessor.diff(editWindowLines, cleanedLinesStream, cursorOriginalLinesOffset, diffOptions)) {
522
- tracer.trace(`ResponseProcessor streamed edit #${i} with latency ${fetchRequestStopWatch.elapsed()} ms`);
523
- const singleLineEdits = [];
524
- if (edit.lineRange.startLineNumber === edit.lineRange.endLineNumberExclusive || // we don't want to run diff on insertion
525
- edit.newLines.length === 0 || // we don't want to run diff on deletion
526
- edit.lineRange.endLineNumberExclusive - edit.lineRange.startLineNumber === 1 && edit.newLines.length === 1 // we want to run diff on single line edits
527
- ) {
528
- const singleLineEdit = new lineEdit_1.LineReplacement(new lineRange_1.LineRange(edit.lineRange.startLineNumber + editWindowLineRange.start, edit.lineRange.endLineNumberExclusive + editWindowLineRange.start), edit.newLines);
539
+ let i = 0;
540
+ let hasBeenDelayed = false;
541
+ try {
542
+ for await (const edit of responseProcessor_1.ResponseProcessor.diff(editWindowLines, cleanedLinesStream, cursorOriginalLinesOffset, diffOptions)) {
543
+ tracer.trace(`ResponseProcessor streamed edit #${i} with latency ${fetchRequestStopWatch.elapsed()} ms`);
544
+ const singleLineEdits = [];
545
+ if (edit.lineRange.startLineNumber === edit.lineRange.endLineNumberExclusive || // we don't want to run diff on insertion
546
+ edit.newLines.length === 0 || // we don't want to run diff on deletion
547
+ edit.lineRange.endLineNumberExclusive - edit.lineRange.startLineNumber === 1 && edit.newLines.length === 1 // we want to run diff on single line edits
548
+ ) {
549
+ const singleLineEdit = new lineEdit_1.LineReplacement(new lineRange_1.LineRange(edit.lineRange.startLineNumber + editWindowLineRange.start, edit.lineRange.endLineNumberExclusive + editWindowLineRange.start), edit.newLines);
550
+ singleLineEdits.push(singleLineEdit);
551
+ }
552
+ else {
553
+ const affectedOriginalLines = editWindowLines.slice(edit.lineRange.startLineNumber - 1, edit.lineRange.endLineNumberExclusive - 1).join('\n');
554
+ const diffResult = await this.diffService.computeDiff(affectedOriginalLines, edit.newLines.join('\n'), {
555
+ ignoreTrimWhitespace: false,
556
+ maxComputationTimeMs: 0,
557
+ computeMoves: false
558
+ });
559
+ tracer.trace(`Ran diff for #${i} with latency ${fetchRequestStopWatch.elapsed()} ms`);
560
+ const translateByNLines = editWindowLineRange.start + edit.lineRange.startLineNumber;
561
+ for (const change of diffResult.changes) {
562
+ const singleLineEdit = new lineEdit_1.LineReplacement(new lineRange_1.LineRange(translateByNLines + change.original.startLineNumber - 1, translateByNLines + change.original.endLineNumberExclusive - 1), edit.newLines.slice(change.modified.startLineNumber - 1, change.modified.endLineNumberExclusive - 1));
529
563
  singleLineEdits.push(singleLineEdit);
530
564
  }
531
- else {
532
- const affectedOriginalLines = editWindowLines.slice(edit.lineRange.startLineNumber - 1, edit.lineRange.endLineNumberExclusive - 1).join('\n');
533
- const diffResult = await this.diffService.computeDiff(affectedOriginalLines, edit.newLines.join('\n'), {
534
- ignoreTrimWhitespace: false,
535
- maxComputationTimeMs: 0,
536
- computeMoves: false
537
- });
538
- tracer.trace(`Ran diff for #${i} with latency ${fetchRequestStopWatch.elapsed()} ms`);
539
- const translateByNLines = editWindowLineRange.start + edit.lineRange.startLineNumber;
540
- for (const change of diffResult.changes) {
541
- const singleLineEdit = new lineEdit_1.LineReplacement(new lineRange_1.LineRange(translateByNLines + change.original.startLineNumber - 1, translateByNLines + change.original.endLineNumberExclusive - 1), edit.newLines.slice(change.modified.startLineNumber - 1, change.modified.endLineNumberExclusive - 1));
542
- singleLineEdits.push(singleLineEdit);
543
- }
544
- }
545
- if (chatResponseFailure) { // do not emit edits if chat response failed
546
- break;
547
- }
548
- logContext.setResponse(responseSoFar);
549
- for (const singleLineEdit of singleLineEdits) {
550
- tracer.trace(`pushing edit #${i}:\n${singleLineEdit.toString()}`);
551
- if (!hasBeenDelayed) { // delay only the first one
552
- hasBeenDelayed = true;
553
- const artificialDelay = this.determineArtificialDelayMs(delaySession, tracer, telemetryBuilder);
554
- if (artificialDelay) {
555
- await (0, async_2.timeout)(artificialDelay);
556
- tracer.trace(`Artificial delay of ${artificialDelay} ms completed`);
557
- if (cancellationToken.isCancellationRequested) {
558
- pushEdit(result_1.Result.error(new statelessNextEditProvider_1.NoNextEditReason.GotCancelled('afterArtificialDelay')));
559
- return;
560
- }
565
+ }
566
+ if (chatResponseFailure) { // do not emit edits if chat response failed
567
+ break;
568
+ }
569
+ logContext.setResponse(responseSoFar);
570
+ for (const singleLineEdit of singleLineEdits) {
571
+ tracer.trace(`extracting edit #${i}: ${singleLineEdit.toString()}`);
572
+ if (!hasBeenDelayed) { // delay only the first one
573
+ hasBeenDelayed = true;
574
+ const artificialDelay = this.determineArtificialDelayMs(delaySession, tracer, telemetryBuilder);
575
+ if (artificialDelay) {
576
+ await (0, async_2.timeout)(artificialDelay);
577
+ tracer.trace(`Artificial delay of ${artificialDelay} ms completed`);
578
+ if (cancellationToken.isCancellationRequested) {
579
+ return new statelessNextEditProvider_1.NoNextEditReason.GotCancelled('afterArtificialDelay');
561
580
  }
562
581
  }
563
- pushEdit(result_1.Result.ok({ edit: singleLineEdit, window: editWindow }));
564
- i++;
565
582
  }
566
- }
567
- if (chatResponseFailure) {
568
- pushEdit(result_1.Result.error(XtabProvider_1.mapChatFetcherErrorToNoNextEditReason(chatResponseFailure)));
569
- return;
570
- }
571
- const hadEdits = i > 0;
572
- if (hadEdits) {
573
- pushEdit(result_1.Result.error(new statelessNextEditProvider_1.NoNextEditReason.NoSuggestions(request.documentBeforeEdits, editWindow)));
574
- }
575
- else {
576
- await this.pushNoSuggestionsOrRetry(request, editWindow, promptPieces, pushEdit, delaySession, tracer, logContext, cancellationToken, telemetryBuilder, opts.retryState);
583
+ yield { edit: singleLineEdit, isFromCursorJump, window: editWindow };
584
+ i++;
577
585
  }
578
586
  }
579
- catch (err) {
580
- logContext.setError(err);
581
- // Properly handle the error by pushing it as a result
582
- pushEdit(result_1.Result.error(new statelessNextEditProvider_1.NoNextEditReason.Unexpected(errors.fromUnknown(err))));
587
+ if (chatResponseFailure) {
588
+ return XtabProvider_1.mapChatFetcherErrorToNoNextEditReason(chatResponseFailure);
583
589
  }
584
- })();
585
- }
586
- async pushNoSuggestionsOrRetry(request, editWindow, promptPieces, pushEdit, delaySession, tracer, logContext, cancellationToken, telemetryBuilder, retryState) {
587
- const allowRetryWithExpandedWindow = this.configService.getExperimentBasedConfig(configurationService_1.ConfigKey.TeamInternal.InlineEditsXtabProviderRetryWithNMoreLinesBelow, this.expService);
588
- // if allowed to retry and not retrying already, flip the retry state and try again
589
- if (allowRetryWithExpandedWindow && retryState === 0 /* RetryState.NotRetrying */ && request.expandedEditWindowNLines === undefined) {
590
- this.doGetNextEdit(request, pushEdit, delaySession, tracer, logContext, cancellationToken, telemetryBuilder, 1 /* RetryState.Retrying */);
591
- return;
590
+ return new statelessNextEditProvider_1.NoNextEditReason.NoSuggestions(request.documentBeforeEdits, editWindow);
591
+ }
592
+ catch (err) {
593
+ logContext.setError(err);
594
+ // Properly handle the error by pushing it as a result
595
+ return new statelessNextEditProvider_1.NoNextEditReason.Unexpected(errors.fromUnknown(err));
592
596
  }
597
+ }
598
+ async *doGetNextEditsWithCursorJump(request, editWindow, promptPieces, delaySession, tracer, logContext, cancellationToken, telemetryBuilder, retryState) {
599
+ const noSuggestions = new statelessNextEditProvider_1.NoNextEditReason.NoSuggestions(request.documentBeforeEdits, editWindow);
593
600
  const nextCursorLinePrediction = this.nextCursorPredictor.determineEnablement();
594
- if (nextCursorLinePrediction !== undefined && retryState === 0 /* RetryState.NotRetrying */) {
595
- const nextCursorLineR = await this.nextCursorPredictor.predictNextCursorPosition(promptPieces, tracer);
596
- if (cancellationToken.isCancellationRequested) {
597
- pushEdit(result_1.Result.error(new statelessNextEditProvider_1.NoNextEditReason.NoSuggestions(request.documentBeforeEdits, editWindow)));
598
- return;
601
+ if (nextCursorLinePrediction === undefined || retryState instanceof RetryState.Retrying) {
602
+ return noSuggestions;
603
+ }
604
+ const nextCursorLineR = await this.nextCursorPredictor.predictNextCursorPosition(promptPieces, tracer, telemetryBuilder, cancellationToken);
605
+ if (cancellationToken.isCancellationRequested) {
606
+ return new statelessNextEditProvider_1.NoNextEditReason.GotCancelled('afterNextCursorPredictionFetch');
607
+ }
608
+ if (nextCursorLineR.isError()) {
609
+ tracer.trace(`Predicted next cursor line error: ${nextCursorLineR.err.message}`);
610
+ telemetryBuilder.setNextCursorLineError(nextCursorLineR.err.message);
611
+ return noSuggestions;
612
+ }
613
+ const nextCursorLineZeroBased = nextCursorLineR.val;
614
+ const lineDistanceFromCursorLine = nextCursorLineZeroBased - promptPieces.currentDocument.cursorLineOffset;
615
+ telemetryBuilder.setNextCursorLineDistance(lineDistanceFromCursorLine);
616
+ tracer.trace(`Predicted next cursor line: ${nextCursorLineZeroBased}`);
617
+ if (nextCursorLineZeroBased >= promptPieces.currentDocument.lines.length) { // >= because the line index is zero-based
618
+ tracer.trace(`Predicted next cursor line error: exceedsDocumentLines`);
619
+ telemetryBuilder.setNextCursorLineError('exceedsDocumentLines');
620
+ return noSuggestions;
621
+ }
622
+ if (promptPieces.editWindowLinesRange.contains(nextCursorLineZeroBased)) {
623
+ tracer.trace(`Predicted next cursor line error: withinEditWindow`);
624
+ telemetryBuilder.setNextCursorLineError('withinEditWindow');
625
+ return noSuggestions;
626
+ }
627
+ const nextCursorLineOneBased = nextCursorLineZeroBased + 1;
628
+ const nextCursorLine = promptPieces.activeDoc.documentAfterEditsLines.at(nextCursorLineZeroBased);
629
+ const nextCursorColumn = (nextCursorLine?.length ?? 0) + 1;
630
+ switch (nextCursorLinePrediction) {
631
+ case nextCursorLinePrediction_1.NextCursorLinePrediction.Jump: {
632
+ const nextCursorPosition = new position_1.Position(nextCursorLineOneBased, nextCursorColumn);
633
+ return new statelessNextEditProvider_1.NoNextEditReason.NoSuggestions(request.documentBeforeEdits, editWindow, nextCursorPosition);
599
634
  }
600
- if (nextCursorLineR.isError()) {
601
- tracer.trace(`Predicted next cursor line error: ${nextCursorLineR.err.message}`);
602
- telemetryBuilder.setNextCursorLineError(nextCursorLineR.err.message);
635
+ case nextCursorLinePrediction_1.NextCursorLinePrediction.OnlyWithEdit: {
636
+ const v = this.doGetNextEditWithSelection(request, new range_1.Range(nextCursorLineOneBased, nextCursorColumn, nextCursorLineOneBased, nextCursorColumn), delaySession, tracer, logContext, cancellationToken, telemetryBuilder, new RetryState.Retrying('cursorJump'));
637
+ return yield* v;
603
638
  }
604
- else {
605
- const nextCursorLineZeroBased = nextCursorLineR.val;
606
- const lineDistanceFromCursorLine = nextCursorLineZeroBased - promptPieces.currentDocument.cursorLineOffset;
607
- telemetryBuilder.setNextCursorLineDistance(lineDistanceFromCursorLine);
608
- tracer.trace(`Predicted next cursor line: ${nextCursorLineZeroBased}`);
609
- if (nextCursorLineZeroBased >= promptPieces.currentDocument.lines.length) { // >= because the line index is zero-based
610
- tracer.trace(`Predicted next cursor line error: exceedsDocumentLines`);
611
- telemetryBuilder.setNextCursorLineError('exceedsDocumentLines');
612
- }
613
- else if (promptPieces.editWindowLinesRange.contains(nextCursorLineZeroBased)) {
614
- tracer.trace(`Predicted next cursor line error: withinEditWindow`);
615
- telemetryBuilder.setNextCursorLineError('withinEditWindow');
616
- }
617
- else {
618
- const nextCursorLineOneBased = nextCursorLineZeroBased + 1;
619
- const nextCursorLine = promptPieces.activeDoc.documentAfterEditsLines.at(nextCursorLineZeroBased);
620
- const nextCursorColumn = (nextCursorLine?.length ?? 0) + 1;
621
- switch (nextCursorLinePrediction) {
622
- case nextCursorLinePrediction_1.NextCursorLinePrediction.Jump: {
623
- const nextCursorPosition = new position_1.Position(nextCursorLineOneBased, nextCursorColumn);
624
- pushEdit(result_1.Result.error(new statelessNextEditProvider_1.NoNextEditReason.NoSuggestions(request.documentBeforeEdits, editWindow, nextCursorPosition)));
625
- return;
626
- }
627
- case nextCursorLinePrediction_1.NextCursorLinePrediction.OnlyWithEdit: {
628
- this.doGetNextEditWithSelection(request, new range_1.Range(nextCursorLineOneBased, nextCursorColumn, nextCursorLineOneBased, nextCursorColumn), pushEdit, delaySession, tracer, logContext, cancellationToken, telemetryBuilder, 1 /* RetryState.Retrying */);
629
- return;
630
- }
631
- default: {
632
- (0, assert_1.assertNever)(nextCursorLinePrediction);
633
- }
634
- }
635
- }
639
+ default: {
640
+ (0, assert_1.assertNever)(nextCursorLinePrediction);
636
641
  }
637
642
  }
638
- pushEdit(result_1.Result.error(new statelessNextEditProvider_1.NoNextEditReason.NoSuggestions(request.documentBeforeEdits, editWindow)));
639
- return;
640
643
  }
641
644
  computeAreaAroundEditWindowLinesRange(currentDocument) {
642
645
  const cursorLine = currentDocument.cursorLineOffset;
@@ -644,7 +647,7 @@ let XtabProvider = class XtabProvider {
644
647
  const areaAroundEndExcl = Math.min(currentDocument.lines.length, cursorLine + promptCrafting_1.N_LINES_AS_CONTEXT + 1);
645
648
  return new offsetRange_1.OffsetRange(areaAroundStart, areaAroundEndExcl);
646
649
  }
647
- computeEditWindowLinesRange(currentDocument, request, retryState, tracer, telemetry) {
650
+ computeEditWindowLinesRange(currentDocument, request, tracer, telemetry) {
648
651
  const currentDocLines = currentDocument.lines;
649
652
  const cursorLineOffset = currentDocument.cursorLineOffset;
650
653
  let nLinesAbove;
@@ -684,9 +687,6 @@ let XtabProvider = class XtabProvider {
684
687
  nLinesBelow = promptCrafting_1.N_LINES_BELOW; // default
685
688
  }
686
689
  }
687
- if (retryState === 1 /* RetryState.Retrying */) {
688
- nLinesBelow += this.configService.getExperimentBasedConfig(configurationService_1.ConfigKey.TeamInternal.InlineEditsXtabProviderRetryWithNMoreLinesBelow, this.expService) ?? 0;
689
- }
690
690
  let codeToEditStart = Math.max(0, cursorLineOffset - nLinesAbove);
691
691
  let codeToEditEndExcl = Math.min(currentDocLines.length, cursorLineOffset + nLinesBelow + 1);
692
692
  const maxMergeConflictLines = this.configService.getExperimentBasedConfig(configurationService_1.ConfigKey.TeamInternal.InlineEditsXtabMaxMergeConflictLines, this.expService);
@@ -756,11 +756,13 @@ let XtabProvider = class XtabProvider {
756
756
  nDocuments: this.configService.getExperimentBasedConfig(configurationService_1.ConfigKey.TeamInternal.InlineEditsXtabNRecentlyViewedDocuments, this.expService),
757
757
  maxTokens: this.configService.getExperimentBasedConfig(configurationService_1.ConfigKey.TeamInternal.InlineEditsXtabRecentlyViewedDocumentsMaxTokens, this.expService),
758
758
  includeViewedFiles: this.configService.getExperimentBasedConfig(configurationService_1.ConfigKey.TeamInternal.InlineEditsXtabIncludeViewedFiles, this.expService),
759
+ includeLineNumbers: false, // Line numbers are only used for next cursor prediction
759
760
  },
760
761
  languageContext: this.determineLanguageContextOptions(activeDocument.languageId, {
761
762
  enabled: this.configService.getExperimentBasedConfig(configurationService_1.ConfigKey.TeamInternal.InlineEditsXtabLanguageContextEnabled, this.expService),
762
763
  enabledLanguages: this.configService.getConfig(configurationService_1.ConfigKey.TeamInternal.InlineEditsXtabLanguageContextEnabledLanguages),
763
- enabledDiagnostics: this.configService.getExperimentBasedConfig(configurationService_1.ConfigKey.Advanced.DiagnosticsContextProvider, this.expService),
764
+ enableAllContextProviders: this.configService.getExperimentBasedConfig(configurationService_1.ConfigKey.Advanced.DiagnosticsContextProvider, this.expService)
765
+ || this.configService.getExperimentBasedConfig(configurationService_1.ConfigKey.Advanced.ChatSessionContextProvider, this.expService),
764
766
  maxTokens: this.configService.getExperimentBasedConfig(configurationService_1.ConfigKey.TeamInternal.InlineEditsXtabLanguageContextMaxTokens, this.expService),
765
767
  traitPosition: this.configService.getExperimentBasedConfig(configurationService_1.ConfigKey.TeamInternal.InlineEditsXtabLanguageContextTraitsPosition, this.expService),
766
768
  }),
@@ -812,11 +814,11 @@ let XtabProvider = class XtabProvider {
812
814
  (0, assert_1.assertNever)(promptingStrategy);
813
815
  }
814
816
  }
815
- determineLanguageContextOptions(languageId, { enabled, enabledLanguages, maxTokens, enabledDiagnostics: diagnosticsEnabled, traitPosition }) {
817
+ determineLanguageContextOptions(languageId, { enabled, enabledLanguages, maxTokens, enableAllContextProviders, traitPosition }) {
816
818
  if (languageId in enabledLanguages) {
817
819
  return { enabled: enabledLanguages[languageId], maxTokens, traitPosition };
818
820
  }
819
- if (diagnosticsEnabled) {
821
+ if (enableAllContextProviders) {
820
822
  return { enabled: true, maxTokens, traitPosition };
821
823
  }
822
824
  return { enabled, maxTokens, traitPosition };
@@ -861,7 +863,7 @@ let XtabProvider = class XtabProvider {
861
863
  if (this.simulationCtx.isInSimulationTests) {
862
864
  return;
863
865
  }
864
- if (retryState === 1 /* RetryState.Retrying */) {
866
+ if (retryState instanceof RetryState.Retrying) {
865
867
  tracer.trace('Skipping debounce on retry');
866
868
  return;
867
869
  }
@@ -882,6 +884,31 @@ let XtabProvider = class XtabProvider {
882
884
  telemetry.setArtificialDelay(artificialDelay);
883
885
  return artificialDelay;
884
886
  }
887
+ filterEdit(activeDoc, edits) {
888
+ const filters = [
889
+ (edits) => importFiltering_1.IgnoreImportChangesAspect.filterEdit(activeDoc, edits),
890
+ (edits) => statelessNextEditProviders_1.IgnoreEmptyLineAndLeadingTrailingWhitespaceChanges.filterEdit(activeDoc, edits),
891
+ ];
892
+ if (!this.configService.getExperimentBasedConfig(configurationService_1.ConfigKey.InlineEditsAllowWhitespaceOnlyChanges, this.expService)) {
893
+ filters.push((edits) => statelessNextEditProviders_1.IgnoreWhitespaceOnlyChanges.filterEdit(activeDoc, edits));
894
+ }
895
+ const undoInsertionFiltering = this.configService.getExperimentBasedConfig(configurationService_1.ConfigKey.TeamInternal.InlineEditsUndoInsertionFiltering, this.expService);
896
+ if (undoInsertionFiltering !== undefined) {
897
+ let filter;
898
+ switch (undoInsertionFiltering) {
899
+ case 'v1':
900
+ filter = statelessNextEditProviders_1.editWouldDeleteWhatWasJustInserted;
901
+ break;
902
+ case 'v2':
903
+ filter = statelessNextEditProviders_1.editWouldDeleteWhatWasJustInserted2;
904
+ break;
905
+ default:
906
+ (0, assert_1.assertNever)(undoInsertionFiltering);
907
+ }
908
+ filters.push((edits) => filter(activeDoc, new lineEdit_1.LineEdit(edits)) ? [] : edits);
909
+ }
910
+ return filters.reduce((acc, filter) => filter(acc), edits);
911
+ }
885
912
  };
886
913
  exports.XtabProvider = XtabProvider;
887
914
  exports.XtabProvider = XtabProvider = XtabProvider_1 = __decorate([