@vscode/chat-lib 0.4.0 → 0.4.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 (273) hide show
  1. package/dist/src/_internal/extension/byok/node/openAIEndpoint.d.ts +1 -6
  2. package/dist/src/_internal/extension/byok/node/openAIEndpoint.d.ts.map +1 -1
  3. package/dist/src/_internal/extension/byok/node/openAIEndpoint.js +9 -20
  4. package/dist/src/_internal/extension/byok/node/openAIEndpoint.js.map +1 -1
  5. package/dist/src/_internal/extension/common/constants.d.ts +0 -1
  6. package/dist/src/_internal/extension/common/constants.d.ts.map +1 -1
  7. package/dist/src/_internal/extension/common/constants.js +2 -1
  8. package/dist/src/_internal/extension/common/constants.js.map +1 -1
  9. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/completionsFromNetwork.d.ts +4 -2
  10. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/completionsFromNetwork.d.ts.map +1 -1
  11. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/completionsFromNetwork.js +38 -5
  12. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/completionsFromNetwork.js.map +1 -1
  13. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/ghostText.d.ts +0 -1
  14. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/ghostText.d.ts.map +1 -1
  15. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/ghostText.js +17 -36
  16. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/ghostText.js.map +1 -1
  17. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/openai/fetch.d.ts +1 -1
  18. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/openai/fetch.d.ts.map +1 -1
  19. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/openai/fetch.js +205 -122
  20. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/openai/fetch.js.map +1 -1
  21. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/components/currentFile.d.ts.map +1 -1
  22. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/components/currentFile.js +15 -7
  23. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/components/currentFile.js.map +1 -1
  24. package/dist/src/_internal/extension/inlineEdits/common/userInteractionMonitor.d.ts +52 -8
  25. package/dist/src/_internal/extension/inlineEdits/common/userInteractionMonitor.d.ts.map +1 -1
  26. package/dist/src/_internal/extension/inlineEdits/common/userInteractionMonitor.js +208 -41
  27. package/dist/src/_internal/extension/inlineEdits/common/userInteractionMonitor.js.map +1 -1
  28. package/dist/src/_internal/extension/inlineEdits/node/nesConfigs.d.ts +1 -0
  29. package/dist/src/_internal/extension/inlineEdits/node/nesConfigs.d.ts.map +1 -1
  30. package/dist/src/_internal/extension/inlineEdits/node/nextEditCache.d.ts +14 -4
  31. package/dist/src/_internal/extension/inlineEdits/node/nextEditCache.d.ts.map +1 -1
  32. package/dist/src/_internal/extension/inlineEdits/node/nextEditCache.js +46 -30
  33. package/dist/src/_internal/extension/inlineEdits/node/nextEditCache.js.map +1 -1
  34. package/dist/src/_internal/extension/inlineEdits/node/nextEditProvider.d.ts +24 -3
  35. package/dist/src/_internal/extension/inlineEdits/node/nextEditProvider.d.ts.map +1 -1
  36. package/dist/src/_internal/extension/inlineEdits/node/nextEditProvider.js +471 -128
  37. package/dist/src/_internal/extension/inlineEdits/node/nextEditProvider.js.map +1 -1
  38. package/dist/src/_internal/extension/inlineEdits/node/nextEditProviderTelemetry.d.ts.map +1 -1
  39. package/dist/src/_internal/extension/inlineEdits/node/nextEditProviderTelemetry.js +8 -2
  40. package/dist/src/_internal/extension/inlineEdits/node/nextEditProviderTelemetry.js.map +1 -1
  41. package/dist/src/_internal/extension/inlineEdits/node/nextEditResult.d.ts +0 -4
  42. package/dist/src/_internal/extension/inlineEdits/node/nextEditResult.d.ts.map +1 -1
  43. package/dist/src/_internal/extension/inlineEdits/node/nextEditResult.js.map +1 -1
  44. package/dist/src/_internal/extension/power/common/powerService.d.ts +22 -0
  45. package/dist/src/_internal/extension/power/common/powerService.d.ts.map +1 -0
  46. package/dist/src/_internal/extension/power/common/powerService.js +20 -0
  47. package/dist/src/_internal/extension/power/common/powerService.js.map +1 -0
  48. package/dist/src/_internal/extension/prompt/node/chatMLFetcher.d.ts +6 -2
  49. package/dist/src/_internal/extension/prompt/node/chatMLFetcher.d.ts.map +1 -1
  50. package/dist/src/_internal/extension/prompt/node/chatMLFetcher.js +30 -6
  51. package/dist/src/_internal/extension/prompt/node/chatMLFetcher.js.map +1 -1
  52. package/dist/src/_internal/extension/xtab/common/diffHistoryForPrompt.d.ts +6 -0
  53. package/dist/src/_internal/extension/xtab/common/diffHistoryForPrompt.d.ts.map +1 -0
  54. package/dist/src/_internal/extension/xtab/common/diffHistoryForPrompt.js +89 -0
  55. package/dist/src/_internal/extension/xtab/common/diffHistoryForPrompt.js.map +1 -0
  56. package/dist/src/_internal/extension/xtab/common/inlineSuggestion.d.ts +15 -0
  57. package/dist/src/_internal/extension/xtab/common/inlineSuggestion.d.ts.map +1 -0
  58. package/dist/src/_internal/extension/xtab/common/inlineSuggestion.js +43 -0
  59. package/dist/src/_internal/extension/xtab/common/inlineSuggestion.js.map +1 -0
  60. package/dist/src/_internal/extension/xtab/common/lintErrors.d.ts +4 -4
  61. package/dist/src/_internal/extension/xtab/common/lintErrors.d.ts.map +1 -1
  62. package/dist/src/_internal/extension/xtab/common/lintErrors.js +70 -26
  63. package/dist/src/_internal/extension/xtab/common/lintErrors.js.map +1 -1
  64. package/dist/src/_internal/extension/xtab/common/promptCrafting.d.ts +13022 -364
  65. package/dist/src/_internal/extension/xtab/common/promptCrafting.d.ts.map +1 -1
  66. package/dist/src/_internal/extension/xtab/common/promptCrafting.js +14 -233
  67. package/dist/src/_internal/extension/xtab/common/promptCrafting.js.map +1 -1
  68. package/dist/src/_internal/extension/xtab/common/promptCraftingUtils.d.ts +4 -0
  69. package/dist/src/_internal/extension/xtab/common/promptCraftingUtils.d.ts.map +1 -0
  70. package/dist/src/_internal/extension/xtab/common/promptCraftingUtils.js +22 -0
  71. package/dist/src/_internal/extension/xtab/common/promptCraftingUtils.js.map +1 -0
  72. package/dist/src/_internal/extension/xtab/common/recentFilesForPrompt.d.ts +41 -0
  73. package/dist/src/_internal/extension/xtab/common/recentFilesForPrompt.d.ts.map +1 -0
  74. package/dist/src/_internal/extension/xtab/common/recentFilesForPrompt.js +375 -0
  75. package/dist/src/_internal/extension/xtab/common/recentFilesForPrompt.js.map +1 -0
  76. package/dist/src/_internal/extension/xtab/common/terminalOutput.d.ts +20 -0
  77. package/dist/src/_internal/extension/xtab/common/terminalOutput.d.ts.map +1 -0
  78. package/dist/src/_internal/extension/xtab/common/terminalOutput.js +105 -0
  79. package/dist/src/_internal/extension/xtab/common/terminalOutput.js.map +1 -0
  80. package/dist/src/_internal/extension/xtab/node/xtabCustomDiffPatchResponseHandler.d.ts +2 -3
  81. package/dist/src/_internal/extension/xtab/node/xtabCustomDiffPatchResponseHandler.d.ts.map +1 -1
  82. package/dist/src/_internal/extension/xtab/node/xtabCustomDiffPatchResponseHandler.js +2 -1
  83. package/dist/src/_internal/extension/xtab/node/xtabCustomDiffPatchResponseHandler.js.map +1 -1
  84. package/dist/src/_internal/extension/xtab/node/xtabEndpoint.d.ts.map +1 -1
  85. package/dist/src/_internal/extension/xtab/node/xtabEndpoint.js +1 -1
  86. package/dist/src/_internal/extension/xtab/node/xtabEndpoint.js.map +1 -1
  87. package/dist/src/_internal/extension/xtab/node/xtabNextCursorPredictor.d.ts.map +1 -1
  88. package/dist/src/_internal/extension/xtab/node/xtabNextCursorPredictor.js +2 -1
  89. package/dist/src/_internal/extension/xtab/node/xtabNextCursorPredictor.js.map +1 -1
  90. package/dist/src/_internal/extension/xtab/node/xtabProvider.d.ts +52 -9
  91. package/dist/src/_internal/extension/xtab/node/xtabProvider.d.ts.map +1 -1
  92. package/dist/src/_internal/extension/xtab/node/xtabProvider.js +370 -158
  93. package/dist/src/_internal/extension/xtab/node/xtabProvider.js.map +1 -1
  94. package/dist/src/_internal/extension/xtab/node/xtabUtils.d.ts +1 -7
  95. package/dist/src/_internal/extension/xtab/node/xtabUtils.d.ts.map +1 -1
  96. package/dist/src/_internal/extension/xtab/node/xtabUtils.js +21 -40
  97. package/dist/src/_internal/extension/xtab/node/xtabUtils.js.map +1 -1
  98. package/dist/src/_internal/platform/chat/common/commonTypes.d.ts +2 -2
  99. package/dist/src/_internal/platform/chat/common/commonTypes.d.ts.map +1 -1
  100. package/dist/src/_internal/platform/chat/common/commonTypes.js +8 -8
  101. package/dist/src/_internal/platform/chat/common/commonTypes.js.map +1 -1
  102. package/dist/src/_internal/platform/configuration/common/configurationService.d.ts +40 -5
  103. package/dist/src/_internal/platform/configuration/common/configurationService.d.ts.map +1 -1
  104. package/dist/src/_internal/platform/configuration/common/configurationService.js +42 -9
  105. package/dist/src/_internal/platform/configuration/common/configurationService.js.map +1 -1
  106. package/dist/src/_internal/platform/endpoint/common/chatModelCapabilities.d.ts +1 -1
  107. package/dist/src/_internal/platform/endpoint/common/chatModelCapabilities.d.ts.map +1 -1
  108. package/dist/src/_internal/platform/endpoint/common/chatModelCapabilities.js +5 -10
  109. package/dist/src/_internal/platform/endpoint/common/chatModelCapabilities.js.map +1 -1
  110. package/dist/src/_internal/platform/endpoint/common/compactionDataContainer.d.ts +17 -0
  111. package/dist/src/_internal/platform/endpoint/common/compactionDataContainer.d.ts.map +1 -0
  112. package/dist/src/_internal/platform/endpoint/common/compactionDataContainer.js +37 -0
  113. package/dist/src/_internal/platform/endpoint/common/compactionDataContainer.js.map +1 -0
  114. package/dist/src/_internal/platform/endpoint/common/endpointProvider.d.ts +9 -5
  115. package/dist/src/_internal/platform/endpoint/common/endpointProvider.d.ts.map +1 -1
  116. package/dist/src/_internal/platform/endpoint/common/endpointProvider.js.map +1 -1
  117. package/dist/src/_internal/platform/endpoint/node/autoChatEndpoint.js +1 -1
  118. package/dist/src/_internal/platform/endpoint/node/autoChatEndpoint.js.map +1 -1
  119. package/dist/src/_internal/platform/endpoint/node/chatEndpoint.d.ts +4 -11
  120. package/dist/src/_internal/platform/endpoint/node/chatEndpoint.d.ts.map +1 -1
  121. package/dist/src/_internal/platform/endpoint/node/chatEndpoint.js +14 -53
  122. package/dist/src/_internal/platform/endpoint/node/chatEndpoint.js.map +1 -1
  123. package/dist/src/_internal/platform/endpoint/node/copilotChatEndpoint.d.ts.map +1 -1
  124. package/dist/src/_internal/platform/endpoint/node/copilotChatEndpoint.js +1 -1
  125. package/dist/src/_internal/platform/endpoint/node/copilotChatEndpoint.js.map +1 -1
  126. package/dist/src/_internal/platform/endpoint/node/messagesApi.d.ts.map +1 -1
  127. package/dist/src/_internal/platform/endpoint/node/messagesApi.js +41 -23
  128. package/dist/src/_internal/platform/endpoint/node/messagesApi.js.map +1 -1
  129. package/dist/src/_internal/platform/endpoint/node/responsesApi.d.ts.map +1 -1
  130. package/dist/src/_internal/platform/endpoint/node/responsesApi.js +58 -2
  131. package/dist/src/_internal/platform/endpoint/node/responsesApi.js.map +1 -1
  132. package/dist/src/_internal/platform/env/common/envService.d.ts +6 -0
  133. package/dist/src/_internal/platform/env/common/envService.d.ts.map +1 -1
  134. package/dist/src/_internal/platform/env/common/envService.js.map +1 -1
  135. package/dist/src/_internal/platform/env/common/nullEnvService.d.ts +3 -0
  136. package/dist/src/_internal/platform/env/common/nullEnvService.d.ts.map +1 -1
  137. package/dist/src/_internal/platform/env/common/nullEnvService.js +4 -0
  138. package/dist/src/_internal/platform/env/common/nullEnvService.js.map +1 -1
  139. package/dist/src/_internal/platform/github/common/githubAPI.d.ts +1 -1
  140. package/dist/src/_internal/platform/github/common/githubAPI.d.ts.map +1 -1
  141. package/dist/src/_internal/platform/github/common/githubAPI.js +4 -2
  142. package/dist/src/_internal/platform/github/common/githubAPI.js.map +1 -1
  143. package/dist/src/_internal/platform/github/common/githubService.d.ts +2 -0
  144. package/dist/src/_internal/platform/github/common/githubService.d.ts.map +1 -1
  145. package/dist/src/_internal/platform/github/common/githubService.js +3 -3
  146. package/dist/src/_internal/platform/github/common/githubService.js.map +1 -1
  147. package/dist/src/_internal/platform/inlineEdits/common/dataTypes/xtabHistoryOptions.d.ts +9 -0
  148. package/dist/src/_internal/platform/inlineEdits/common/dataTypes/xtabHistoryOptions.d.ts.map +1 -0
  149. package/dist/src/_internal/platform/inlineEdits/common/dataTypes/xtabHistoryOptions.js +18 -0
  150. package/dist/src/_internal/platform/inlineEdits/common/dataTypes/xtabHistoryOptions.js.map +1 -0
  151. package/dist/src/_internal/platform/inlineEdits/common/dataTypes/xtabPromptOptions.d.ts +103 -2
  152. package/dist/src/_internal/platform/inlineEdits/common/dataTypes/xtabPromptOptions.d.ts.map +1 -1
  153. package/dist/src/_internal/platform/inlineEdits/common/dataTypes/xtabPromptOptions.js +231 -1
  154. package/dist/src/_internal/platform/inlineEdits/common/dataTypes/xtabPromptOptions.js.map +1 -1
  155. package/dist/src/_internal/platform/inlineEdits/common/inlineEditLogContext.d.ts +11 -5
  156. package/dist/src/_internal/platform/inlineEdits/common/inlineEditLogContext.d.ts.map +1 -1
  157. package/dist/src/_internal/platform/inlineEdits/common/inlineEditLogContext.js +33 -18
  158. package/dist/src/_internal/platform/inlineEdits/common/inlineEditLogContext.js.map +1 -1
  159. package/dist/src/_internal/platform/inlineEdits/common/inlineEditsModelService.d.ts +2 -0
  160. package/dist/src/_internal/platform/inlineEdits/common/inlineEditsModelService.d.ts.map +1 -1
  161. package/dist/src/_internal/platform/inlineEdits/common/inlineEditsModelService.js +4 -0
  162. package/dist/src/_internal/platform/inlineEdits/common/inlineEditsModelService.js.map +1 -1
  163. package/dist/src/_internal/platform/inlineEdits/common/responseProcessor.d.ts +1 -2
  164. package/dist/src/_internal/platform/inlineEdits/common/responseProcessor.d.ts.map +1 -1
  165. package/dist/src/_internal/platform/inlineEdits/common/responseProcessor.js +13 -0
  166. package/dist/src/_internal/platform/inlineEdits/common/responseProcessor.js.map +1 -1
  167. package/dist/src/_internal/platform/inlineEdits/common/statelessNextEditProvider.d.ts +37 -10
  168. package/dist/src/_internal/platform/inlineEdits/common/statelessNextEditProvider.d.ts.map +1 -1
  169. package/dist/src/_internal/platform/inlineEdits/common/statelessNextEditProvider.js +43 -6
  170. package/dist/src/_internal/platform/inlineEdits/common/statelessNextEditProvider.js.map +1 -1
  171. package/dist/src/_internal/platform/inlineEdits/common/workspaceEditTracker/nesXtabHistoryTracker.d.ts +41 -2
  172. package/dist/src/_internal/platform/inlineEdits/common/workspaceEditTracker/nesXtabHistoryTracker.d.ts.map +1 -1
  173. package/dist/src/_internal/platform/inlineEdits/common/workspaceEditTracker/nesXtabHistoryTracker.js +90 -8
  174. package/dist/src/_internal/platform/inlineEdits/common/workspaceEditTracker/nesXtabHistoryTracker.js.map +1 -1
  175. package/dist/src/_internal/platform/inlineEdits/node/inlineEditsModelService.d.ts +9 -2
  176. package/dist/src/_internal/platform/inlineEdits/node/inlineEditsModelService.d.ts.map +1 -1
  177. package/dist/src/_internal/platform/inlineEdits/node/inlineEditsModelService.js +65 -54
  178. package/dist/src/_internal/platform/inlineEdits/node/inlineEditsModelService.js.map +1 -1
  179. package/dist/src/_internal/platform/log/common/logService.d.ts +30 -0
  180. package/dist/src/_internal/platform/log/common/logService.d.ts.map +1 -1
  181. package/dist/src/_internal/platform/log/common/logService.js.map +1 -1
  182. package/dist/src/_internal/platform/nesFetch/node/completionsFetchServiceImpl.d.ts +5 -1
  183. package/dist/src/_internal/platform/nesFetch/node/completionsFetchServiceImpl.d.ts.map +1 -1
  184. package/dist/src/_internal/platform/nesFetch/node/completionsFetchServiceImpl.js +121 -6
  185. package/dist/src/_internal/platform/nesFetch/node/completionsFetchServiceImpl.js.map +1 -1
  186. package/dist/src/_internal/platform/nesFetch/node/streamTransformer.d.ts +1 -4
  187. package/dist/src/_internal/platform/nesFetch/node/streamTransformer.d.ts.map +1 -1
  188. package/dist/src/_internal/platform/nesFetch/node/streamTransformer.js +1 -21
  189. package/dist/src/_internal/platform/nesFetch/node/streamTransformer.js.map +1 -1
  190. package/dist/src/_internal/platform/networking/common/anthropic.d.ts +4 -1
  191. package/dist/src/_internal/platform/networking/common/anthropic.d.ts.map +1 -1
  192. package/dist/src/_internal/platform/networking/common/anthropic.js +17 -4
  193. package/dist/src/_internal/platform/networking/common/anthropic.js.map +1 -1
  194. package/dist/src/_internal/platform/networking/common/fetch.d.ts +4 -2
  195. package/dist/src/_internal/platform/networking/common/fetch.d.ts.map +1 -1
  196. package/dist/src/_internal/platform/networking/common/fetch.js +9 -0
  197. package/dist/src/_internal/platform/networking/common/fetch.js.map +1 -1
  198. package/dist/src/_internal/platform/networking/common/fetcherService.d.ts +1 -0
  199. package/dist/src/_internal/platform/networking/common/fetcherService.d.ts.map +1 -1
  200. package/dist/src/_internal/platform/networking/common/fetcherService.js.map +1 -1
  201. package/dist/src/_internal/platform/networking/common/networking.d.ts +14 -12
  202. package/dist/src/_internal/platform/networking/common/networking.d.ts.map +1 -1
  203. package/dist/src/_internal/platform/networking/common/networking.js +1 -0
  204. package/dist/src/_internal/platform/networking/common/networking.js.map +1 -1
  205. package/dist/src/_internal/platform/networking/common/openai.d.ts +11 -0
  206. package/dist/src/_internal/platform/networking/common/openai.d.ts.map +1 -1
  207. package/dist/src/_internal/platform/networking/common/openai.js +3 -1
  208. package/dist/src/_internal/platform/networking/common/openai.js.map +1 -1
  209. package/dist/src/_internal/platform/requestLogger/common/capturingToken.d.ts +35 -1
  210. package/dist/src/_internal/platform/requestLogger/common/capturingToken.d.ts.map +1 -1
  211. package/dist/src/_internal/platform/requestLogger/common/capturingToken.js +21 -1
  212. package/dist/src/_internal/platform/requestLogger/common/capturingToken.js.map +1 -1
  213. package/dist/src/_internal/platform/requestLogger/node/requestLogger.d.ts +35 -0
  214. package/dist/src/_internal/platform/requestLogger/node/requestLogger.d.ts.map +1 -1
  215. package/dist/src/_internal/platform/requestLogger/node/requestLogger.js +54 -1
  216. package/dist/src/_internal/platform/requestLogger/node/requestLogger.js.map +1 -1
  217. package/dist/src/_internal/platform/telemetry/common/telemetry.d.ts +2 -0
  218. package/dist/src/_internal/platform/telemetry/common/telemetry.d.ts.map +1 -1
  219. package/dist/src/_internal/platform/telemetry/common/telemetry.js +1 -0
  220. package/dist/src/_internal/platform/telemetry/common/telemetry.js.map +1 -1
  221. package/dist/src/_internal/platform/telemetry/common/telemetryData.d.ts.map +1 -1
  222. package/dist/src/_internal/platform/telemetry/common/telemetryData.js +3 -0
  223. package/dist/src/_internal/platform/telemetry/common/telemetryData.js.map +1 -1
  224. package/dist/src/_internal/platform/terminal/common/terminalService.d.ts +111 -0
  225. package/dist/src/_internal/platform/terminal/common/terminalService.d.ts.map +1 -0
  226. package/dist/src/_internal/platform/terminal/common/terminalService.js +83 -0
  227. package/dist/src/_internal/platform/terminal/common/terminalService.js.map +1 -0
  228. package/dist/src/_internal/util/common/arrays.d.ts +5 -0
  229. package/dist/src/_internal/util/common/arrays.d.ts.map +1 -1
  230. package/dist/src/_internal/util/common/arrays.js +10 -0
  231. package/dist/src/_internal/util/common/arrays.js.map +1 -1
  232. package/dist/src/_internal/util/common/asyncIterableUtils.d.ts +17 -0
  233. package/dist/src/_internal/util/common/asyncIterableUtils.d.ts.map +1 -0
  234. package/dist/src/_internal/util/common/asyncIterableUtils.js +94 -0
  235. package/dist/src/_internal/util/common/asyncIterableUtils.js.map +1 -0
  236. package/dist/src/_internal/util/common/result.d.ts +34 -10
  237. package/dist/src/_internal/util/common/result.d.ts.map +1 -1
  238. package/dist/src/_internal/util/common/result.js +91 -2
  239. package/dist/src/_internal/util/common/result.js.map +1 -1
  240. package/dist/src/_internal/util/common/test/shims/chatTypes.d.ts +15 -3
  241. package/dist/src/_internal/util/common/test/shims/chatTypes.d.ts.map +1 -1
  242. package/dist/src/_internal/util/common/test/shims/chatTypes.js +26 -4
  243. package/dist/src/_internal/util/common/test/shims/chatTypes.js.map +1 -1
  244. package/dist/src/_internal/util/common/test/shims/themes.d.ts +13 -0
  245. package/dist/src/_internal/util/common/test/shims/themes.d.ts.map +1 -0
  246. package/dist/src/_internal/util/common/test/shims/themes.js +27 -0
  247. package/dist/src/_internal/util/common/test/shims/themes.js.map +1 -0
  248. package/dist/src/_internal/util/common/test/shims/vscodeTypesShim.d.ts.map +1 -1
  249. package/dist/src/_internal/util/common/test/shims/vscodeTypesShim.js +4 -1
  250. package/dist/src/_internal/util/common/test/shims/vscodeTypesShim.js.map +1 -1
  251. package/dist/src/_internal/util/vs/base/common/codicons.d.ts +2 -0
  252. package/dist/src/_internal/util/vs/base/common/codicons.d.ts.map +1 -1
  253. package/dist/src/_internal/util/vs/base/common/codiconsLibrary.d.ts +2 -0
  254. package/dist/src/_internal/util/vs/base/common/codiconsLibrary.d.ts.map +1 -1
  255. package/dist/src/_internal/util/vs/base/common/codiconsLibrary.js +2 -0
  256. package/dist/src/_internal/util/vs/base/common/codiconsLibrary.js.map +1 -1
  257. package/dist/src/_internal/util/vs/base/common/mime.d.ts.map +1 -1
  258. package/dist/src/_internal/util/vs/base/common/mime.js +7 -5
  259. package/dist/src/_internal/util/vs/base/common/mime.js.map +1 -1
  260. package/dist/src/_internal/util/vs/editor/common/core/ranges/offsetRange.d.ts +4 -0
  261. package/dist/src/_internal/util/vs/editor/common/core/ranges/offsetRange.d.ts.map +1 -1
  262. package/dist/src/_internal/util/vs/editor/common/core/ranges/offsetRange.js +4 -0
  263. package/dist/src/_internal/util/vs/editor/common/core/ranges/offsetRange.js.map +1 -1
  264. package/dist/src/_internal/vscodeTypes.d.ts +2 -0
  265. package/dist/src/_internal/vscodeTypes.d.ts.map +1 -1
  266. package/dist/src/_internal/vscodeTypes.js +4 -2
  267. package/dist/src/_internal/vscodeTypes.js.map +1 -1
  268. package/dist/src/main.d.ts +4 -1
  269. package/dist/src/main.d.ts.map +1 -1
  270. package/dist/src/main.js +10 -1
  271. package/dist/src/main.js.map +1 -1
  272. package/dist/src/package.json +445 -193
  273. package/package.json +2 -2
@@ -47,7 +47,14 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
47
47
  };
48
48
  var XtabProvider_1;
49
49
  Object.defineProperty(exports, "__esModule", { value: true });
50
- exports.XtabProvider = void 0;
50
+ exports.EditIntentParseMode = exports.XtabProvider = void 0;
51
+ exports.computeAreaAroundEditWindowLinesRange = computeAreaAroundEditWindowLinesRange;
52
+ exports.mapChatFetcherErrorToNoNextEditReason = mapChatFetcherErrorToNoNextEditReason;
53
+ exports.overrideModelConfig = overrideModelConfig;
54
+ exports.pickSystemPrompt = pickSystemPrompt;
55
+ exports.determineLanguageContextOptions = determineLanguageContextOptions;
56
+ exports.getPredictionContents = getPredictionContents;
57
+ exports.parseEditIntentFromStream = parseEditIntentFromStream;
51
58
  exports.findMergeConflictMarkersRange = findMergeConflictMarkersRange;
52
59
  const chatMLFetcher_1 = require("../../../platform/chat/common/chatMLFetcher");
53
60
  const commonTypes_1 = require("../../../platform/chat/common/commonTypes");
@@ -69,6 +76,7 @@ const simulationTestContext_1 = require("../../../platform/simulationTestContext
69
76
  const nullExperimentationService_1 = require("../../../platform/telemetry/common/nullExperimentationService");
70
77
  const workspaceService_1 = require("../../../platform/workspace/common/workspaceService");
71
78
  const async_1 = require("../../../util/common/async");
79
+ const asyncIterableUtils_1 = require("../../../util/common/asyncIterableUtils");
72
80
  const errors = __importStar(require("../../../util/common/errors"));
73
81
  const result_1 = require("../../../util/common/result");
74
82
  const assert_1 = require("../../../util/vs/base/common/assert");
@@ -84,10 +92,13 @@ const vscodeTypesShim_1 = require("../../../util/common/test/shims/vscodeTypesSh
84
92
  const nearbyCursorInlineEditProvider_1 = require("../../inlineEdits/common/nearbyCursorInlineEditProvider");
85
93
  const userInteractionMonitor_1 = require("../../inlineEdits/common/userInteractionMonitor");
86
94
  const importFiltering_1 = require("../../inlineEdits/node/importFiltering");
95
+ const inlineSuggestion_1 = require("../common/inlineSuggestion");
87
96
  const lintErrors_1 = require("../common/lintErrors");
88
97
  const promptCrafting_1 = require("../common/promptCrafting");
98
+ const promptCraftingUtils_1 = require("../common/promptCraftingUtils");
89
99
  const systemMessages_1 = require("../common/systemMessages");
90
100
  const tags_1 = require("../common/tags");
101
+ const terminalOutput_1 = require("../common/terminalOutput");
91
102
  const xtabCurrentDocument_1 = require("../common/xtabCurrentDocument");
92
103
  const xtabCustomDiffPatchResponseHandler_1 = require("./xtabCustomDiffPatchResponseHandler");
93
104
  const xtabEndpoint_1 = require("./xtabEndpoint");
@@ -122,9 +133,9 @@ let XtabProvider = class XtabProvider {
122
133
  this.langDiagService = langDiagService;
123
134
  this.ignoreService = ignoreService;
124
135
  this.ID = XtabProvider_1.ID;
125
- this.showNextEditPreference = "always" /* ShowNextEditPreference.Always */;
126
136
  this.forceUseDefaultModel = false;
127
- this.userInteractionMonitor = new userInteractionMonitor_1.UserInteractionMonitor(this.configService, this.expService);
137
+ this.userInteractionMonitor = this.instaService.createInstance(userInteractionMonitor_1.UserInteractionMonitor);
138
+ this.terminalMonitor = this.instaService.createInstance(terminalOutput_1.TerminalMonitor);
128
139
  this.nextCursorPredictor = this.instaService.createInstance(xtabNextCursorPredictor_1.XtabNextCursorPredictor, XtabProvider_1.computeTokens);
129
140
  }
130
141
  handleAcceptance() {
@@ -133,46 +144,34 @@ let XtabProvider = class XtabProvider {
133
144
  handleRejection() {
134
145
  this.userInteractionMonitor.handleRejection();
135
146
  }
136
- async provideNextEdit(request, pushEdit, logger, logContext, cancellationToken) {
137
- const telemetry = new statelessNextEditProvider_1.StatelessNextEditTelemetryBuilder(request);
147
+ handleIgnored() {
148
+ this.userInteractionMonitor.handleIgnored();
149
+ }
150
+ async *provideNextEdit(request, logger, logContext, cancellationToken) {
151
+ const telemetry = new statelessNextEditProvider_1.StatelessNextEditTelemetryBuilder(request.headerRequestId);
138
152
  logContext.setProviderStartTime();
139
153
  try {
140
154
  if (request.xtabEditHistory.length === 0) {
141
- return statelessNextEditProvider_1.StatelessNextEditResult.noEdit(new statelessNextEditProvider_1.NoNextEditReason.ActiveDocumentHasNoEdits(), telemetry);
155
+ const noSuggestionReason = new statelessNextEditProvider_1.NoNextEditReason.ActiveDocumentHasNoEdits();
156
+ return new statelessNextEditProvider_1.WithStatelessProviderTelemetry(noSuggestionReason, telemetry.build(result_1.Result.error(noSuggestionReason)));
142
157
  }
143
158
  const delaySession = this.userInteractionMonitor.createDelaySession(request.providerRequestStartDateTime);
144
159
  const iterator = this.doGetNextEdit(request, delaySession, logger, logContext, cancellationToken, telemetry, RetryState.NotRetrying.INSTANCE);
145
160
  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);
161
+ while (!res.done) {
162
+ yield new statelessNextEditProvider_1.WithStatelessProviderTelemetry(res.value, telemetry.build(result_1.Result.ok(undefined)));
163
+ res = await iterator.next();
151
164
  }
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
- }
169
- if (nextEditResult.isError() && nextEditResult.err instanceof statelessNextEditProvider_1.NoNextEditReason.GotCancelled) {
165
+ const noNextEditReason = res.value;
166
+ if (noNextEditReason instanceof statelessNextEditProvider_1.NoNextEditReason.GotCancelled) {
170
167
  logContext.setIsSkipped();
171
168
  }
172
- return new statelessNextEditProvider_1.StatelessNextEditResult(nextEditResult, telemetry.build(nextEditResult));
169
+ return new statelessNextEditProvider_1.WithStatelessProviderTelemetry(noNextEditReason, telemetry.build(result_1.Result.error(noNextEditReason)));
173
170
  }
174
171
  catch (err) {
175
- return statelessNextEditProvider_1.StatelessNextEditResult.noEdit(new statelessNextEditProvider_1.NoNextEditReason.Unexpected(errors.fromUnknown(err)), telemetry);
172
+ const error = errors.fromUnknown(err);
173
+ const noSuggestionReason = new statelessNextEditProvider_1.NoNextEditReason.Unexpected(error);
174
+ return new statelessNextEditProvider_1.WithStatelessProviderTelemetry(noSuggestionReason, telemetry.build(result_1.Result.error(noSuggestionReason)));
176
175
  }
177
176
  finally {
178
177
  logContext.setProviderEndTime();
@@ -181,7 +180,13 @@ let XtabProvider = class XtabProvider {
181
180
  doGetNextEdit(request, delaySession, logger, logContext, cancellationToken, telemetryBuilder, retryState) {
182
181
  return this.doGetNextEditWithSelection(request, (0, nearbyCursorInlineEditProvider_1.getOrDeduceSelectionFromLastEdit)(request.getActiveDocument()), delaySession, logger, logContext, cancellationToken, telemetryBuilder, retryState);
183
182
  }
184
- async *doGetNextEditWithSelection(request, selection, delaySession, parentTracer, logContext, cancellationToken, telemetryBuilder, retryState) {
183
+ async *doGetNextEditWithSelection(request, selection, delaySession, parentTracer, logContext, cancellationToken, telemetryBuilder, retryState,
184
+ /**
185
+ * For cursor jump scenarios, this is the edit window around the original cursor position
186
+ * (before the jump). When provided, yielded edits will include this as `originalWindow`
187
+ * so the cache can serve the edit when the cursor is in either location.
188
+ */
189
+ originalEditWindow) {
185
190
  const tracer = parentTracer.createSubLogger(['XtabProvider', 'doGetNextEditWithSelection']);
186
191
  const activeDocument = request.getActiveDocument();
187
192
  if (selection === null) {
@@ -196,22 +201,30 @@ let XtabProvider = class XtabProvider {
196
201
  const cursorLine = currentDocument.lines[currentDocument.cursorLineOffset];
197
202
  // check if there's any non-whitespace character after the cursor in the line
198
203
  const isCursorAtEndOfLine = cursorLine.substring(cursorPosition.column - 1).match(/^\s*$/) !== null;
199
- if (isCursorAtEndOfLine) {
204
+ telemetryBuilder.setIsCursorAtLineEnd(isCursorAtEndOfLine);
205
+ // Apply extra debounce based on cursor position - only one applies
206
+ const isInlineSuggestionPosition = (0, inlineSuggestion_1.isInlineSuggestion)(currentDocument, cursorPosition);
207
+ telemetryBuilder.setIsInlineSuggestion(!!isInlineSuggestionPosition);
208
+ const inlineSuggestionDebounce = this.configService.getExperimentBasedConfig(configurationService_1.ConfigKey.TeamInternal.InlineEditsExtraDebounceInlineSuggestion, this.expService);
209
+ if (isInlineSuggestionPosition && inlineSuggestionDebounce > 0) {
210
+ tracer.trace('Debouncing for inline suggestion position');
211
+ delaySession.setExtraDebounce(inlineSuggestionDebounce);
212
+ }
213
+ else if (isCursorAtEndOfLine) {
200
214
  tracer.trace('Debouncing for cursor at end of line');
201
215
  delaySession.setExtraDebounce(this.configService.getExperimentBasedConfig(configurationService_1.ConfigKey.TeamInternal.InlineEditsExtraDebounceEndOfLine, this.expService));
202
216
  }
203
217
  else {
204
- tracer.trace('Debouncing for cursor NOT at end of line');
218
+ tracer.trace('No extra debounce applied');
205
219
  }
206
- telemetryBuilder.setIsCursorAtLineEnd(isCursorAtEndOfLine);
207
- const areaAroundEditWindowLinesRange = this.computeAreaAroundEditWindowLinesRange(currentDocument);
220
+ const areaAroundEditWindowLinesRange = computeAreaAroundEditWindowLinesRange(currentDocument);
208
221
  const editWindowLinesRange = this.computeEditWindowLinesRange(currentDocument, request, tracer, telemetryBuilder);
209
222
  const cursorOriginalLinesOffset = Math.max(0, currentDocument.cursorLineOffset - editWindowLinesRange.start);
210
223
  const editWindowLastLineLength = currentDocument.transformer.getLineLength(editWindowLinesRange.endExclusive);
211
224
  const editWindow = currentDocument.transformer.getOffsetRange(new range_1.Range(editWindowLinesRange.start + 1, 1, editWindowLinesRange.endExclusive, editWindowLastLineLength + 1));
212
225
  const editWindowLines = currentDocument.lines.slice(editWindowLinesRange.start, editWindowLinesRange.endExclusive);
213
226
  const editWindowTokenLimit = this.configService.getExperimentBasedConfig(configurationService_1.ConfigKey.TeamInternal.InlineEditsXtabEditWindowMaxTokens, this.expService);
214
- if (editWindowTokenLimit !== undefined && (0, promptCrafting_1.countTokensForLines)(editWindowLines, XtabProvider_1.computeTokens) > editWindowTokenLimit) {
227
+ if (editWindowTokenLimit !== undefined && (0, promptCraftingUtils_1.countTokensForLines)(editWindowLines, XtabProvider_1.computeTokens) > editWindowTokenLimit) {
215
228
  return new statelessNextEditProvider_1.NoNextEditReason.PromptTooLarge('editWindow');
216
229
  }
217
230
  // Expected: editWindow.substring(activeDocument.documentAfterEdits.value) === editWindowLines.join('\n')
@@ -229,8 +242,8 @@ let XtabProvider = class XtabProvider {
229
242
  const { clippedTaggedCurrentDoc, areaAroundCodeToEdit } = taggedCurrentFileContentResult.val;
230
243
  telemetryBuilder.setNLinesOfCurrentFileInPrompt(clippedTaggedCurrentDoc.lines.length);
231
244
  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) {
245
+ // Log aggressiveness level and user happiness score when using an aggressiveness-aware prompting strategy
246
+ if ((0, xtabPromptOptions_1.isAggressivenessStrategy)(promptOptions.promptingStrategy)) {
234
247
  telemetryBuilder.setXtabAggressivenessLevel(aggressivenessLevel);
235
248
  if (userHappinessScore !== undefined) {
236
249
  telemetryBuilder.setXtabUserHappinessScore(userHappinessScore);
@@ -240,13 +253,13 @@ let XtabProvider = class XtabProvider {
240
253
  if (cancellationToken.isCancellationRequested) {
241
254
  return new statelessNextEditProvider_1.NoNextEditReason.GotCancelled('afterLanguageContextAwait');
242
255
  }
243
- const lintErrors = promptOptions.lintOptions ? new lintErrors_1.LintErrors(promptOptions.lintOptions, activeDocument.id, currentDocument, this.langDiagService) : undefined;
256
+ const lintErrors = new lintErrors_1.LintErrors(activeDocument.id, currentDocument, this.langDiagService);
244
257
  const promptPieces = new promptCrafting_1.PromptPieces(currentDocument, editWindowLinesRange, areaAroundEditWindowLinesRange, activeDocument, request.xtabEditHistory, clippedTaggedCurrentDoc.lines, areaAroundCodeToEdit, langCtx, aggressivenessLevel, lintErrors, XtabProvider_1.computeTokens, promptOptions);
245
258
  const userPrompt = (0, promptCrafting_1.getUserPrompt)(promptPieces);
246
259
  const responseFormat = xtabPromptOptions.ResponseFormat.fromPromptingStrategy(promptOptions.promptingStrategy);
247
260
  const prediction = this.getPredictedOutput(activeDocument, editWindowLines, responseFormat);
248
261
  const messages = (0, xtabUtils_1.constructMessages)({
249
- systemMsg: this.pickSystemPrompt(promptOptions.promptingStrategy),
262
+ systemMsg: pickSystemPrompt(promptOptions.promptingStrategy),
250
263
  userMsg: userPrompt,
251
264
  });
252
265
  logContext.setPrompt(messages);
@@ -260,13 +273,24 @@ let XtabProvider = class XtabProvider {
260
273
  if (cancellationToken.isCancellationRequested) {
261
274
  return new statelessNextEditProvider_1.NoNextEditReason.GotCancelled('afterDebounce');
262
275
  }
276
+ // Fire-and-forget: collect lint errors and terminal output for telemetry in background to avoid blocking the main path
277
+ Promise.resolve().then(() => {
278
+ const lintErrorsData = lintErrors.getData();
279
+ telemetryBuilder.setLintErrors(lintErrorsData);
280
+ logContext.setDiagnosticsData(lintErrorsData);
281
+ const terminalOutputData = this.terminalMonitor.getData();
282
+ telemetryBuilder.setTerminalOutput(terminalOutputData);
283
+ logContext.setTerminalData(terminalOutputData);
284
+ });
263
285
  request.fetchIssued = true;
264
286
  const cursorLineOffset = cursorPosition.column;
265
287
  return yield* this.streamEditsWithFiltering(request, endpoint, messages, editWindow, editWindowLines, cursorOriginalLinesOffset, cursorLineOffset, editWindowLinesRange, promptPieces, prediction, {
266
288
  shouldRemoveCursorTagFromResponse,
267
289
  responseFormat,
268
290
  retryState,
269
- }, delaySession, tracer, telemetryBuilder, logContext, cancellationToken);
291
+ aggressivenessLevel,
292
+ userHappinessScore,
293
+ }, delaySession, tracer, telemetryBuilder, logContext, cancellationToken, originalEditWindow);
270
294
  }
271
295
  getAndProcessLanguageContext(request, delaySession, activeDocument, cursorPosition, promptOptions, tracer, logContext, cancellationToken) {
272
296
  const recordingEnabled = this.configService.getConfig(configurationService_1.ConfigKey.TeamInternal.InlineEditsLogContextRecorderEnabled);
@@ -276,7 +300,6 @@ let XtabProvider = class XtabProvider {
276
300
  const langCtxPromise = this.getLanguageContext(request, delaySession, activeDocument, cursorPosition, tracer, logContext, cancellationToken);
277
301
  // if recording, add diagnostics for the file to the recording and hook up the language context promise to write to the recording
278
302
  if (recordingEnabled) {
279
- logContext.setFileDiagnostics(this.langDiagService.getAllDiagnostics());
280
303
  langCtxPromise.then(langCtxs => {
281
304
  if (langCtxs) {
282
305
  logContext.setLanguageContext(langCtxs);
@@ -301,7 +324,7 @@ let XtabProvider = class XtabProvider {
301
324
  const cursorPositionVscode = new vscodeTypesShim_1.Position(cursorPosition.lineNumber - 1, cursorPosition.column - 1);
302
325
  const ctxRequest = {
303
326
  opportunityId: request.opportunityId,
304
- completionId: request.id,
327
+ completionId: request.headerRequestId,
305
328
  documentContext: {
306
329
  uri: textDoc.uri.toString(),
307
330
  languageId: textDoc.languageId,
@@ -350,9 +373,9 @@ let XtabProvider = class XtabProvider {
350
373
  }
351
374
  }
352
375
  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) {
376
+ editWindowLineRange, promptPieces, prediction, opts, delaySession, parentTracer, telemetryBuilder, logContext, cancellationToken, originalEditWindow) {
354
377
  const tracer = parentTracer.createSubLogger('streamEditsWithFiltering');
355
- const iterator = this.streamEdits(request, endpoint, messages, editWindow, editWindowLines, cursorOriginalLinesOffset, cursorLineOffset, editWindowLineRange, promptPieces, prediction, opts, delaySession, tracer, telemetryBuilder, logContext, cancellationToken);
378
+ const iterator = this.streamEdits(request, endpoint, messages, editWindow, editWindowLines, cursorOriginalLinesOffset, cursorLineOffset, editWindowLineRange, promptPieces, prediction, opts, delaySession, tracer, telemetryBuilder, logContext, cancellationToken, originalEditWindow);
356
379
  let nEdits = 0;
357
380
  let r = await iterator.next();
358
381
  while (!r.done) {
@@ -377,7 +400,7 @@ let XtabProvider = class XtabProvider {
377
400
  return r.value;
378
401
  }
379
402
  async *streamEdits(request, endpoint, messages, editWindow, editWindowLines, cursorOriginalLinesOffset, cursorLineOffset, // cursor offset within the line it's in; 1-based
380
- editWindowLineRange, promptPieces, prediction, opts, delaySession, parentTracer, telemetryBuilder, logContext, cancellationToken) {
403
+ editWindowLineRange, promptPieces, prediction, opts, delaySession, parentTracer, telemetryBuilder, logContext, cancellationToken, originalEditWindow) {
381
404
  const tracer = parentTracer.createSubLogger('streamEdits');
382
405
  const useFetcher = this.configService.getExperimentBasedConfig(configurationService_1.ConfigKey.NextEditSuggestionsFetcher, this.expService) || undefined;
383
406
  const fetchStreamSource = new chatMLFetcher_1.FetchStreamSource();
@@ -386,6 +409,7 @@ let XtabProvider = class XtabProvider {
386
409
  let chatResponseFailure;
387
410
  let ttft;
388
411
  const firstTokenReceived = new async_2.DeferredPromise();
412
+ logContext.setHeaderRequestId(request.headerRequestId);
389
413
  telemetryBuilder.setFetchStartedAt();
390
414
  logContext.setFetchStartTime();
391
415
  // we must not await this promise because we want to stream edits as they come in
@@ -414,9 +438,13 @@ let XtabProvider = class XtabProvider {
414
438
  },
415
439
  userInitiatedRequest: undefined,
416
440
  telemetryProperties: {
417
- requestId: request.id,
441
+ requestId: request.headerRequestId,
418
442
  },
419
443
  useFetcher,
444
+ customMetadata: {
445
+ aggressivenessLevel: opts.aggressivenessLevel,
446
+ userHappinessScore: opts.userHappinessScore,
447
+ },
420
448
  }, cancellationToken);
421
449
  telemetryBuilder.setResponse(fetchResultPromise.then((response) => ({ response, ttft })));
422
450
  logContext.setFullResponse(fetchResultPromise.then((response) => response.type === commonTypes_1.ChatFetchResponseType.Success ? response.value : undefined));
@@ -428,7 +456,7 @@ let XtabProvider = class XtabProvider {
428
456
  this.forceUseDefaultModel = true;
429
457
  return yield* this.doGetNextEdit(request, delaySession, tracer, logContext, cancellationToken, telemetryBuilder, opts.retryState); // use the same retry state
430
458
  }
431
- return XtabProvider_1.mapChatFetcherErrorToNoNextEditReason(fetchRes);
459
+ return mapChatFetcherErrorToNoNextEditReason(fetchRes);
432
460
  }
433
461
  fetchResultPromise
434
462
  .then((response) => {
@@ -448,26 +476,47 @@ let XtabProvider = class XtabProvider {
448
476
  fetchStreamSource.resolve();
449
477
  logContext.setResponse(responseSoFar);
450
478
  });
451
- const llmLinesStream = (0, xtabUtils_1.toLines)(fetchStreamSource.stream);
479
+ const llmLinesStream = asyncIterableUtils_1.AsyncIterUtilsExt.splitLines(asyncIterableUtils_1.AsyncIterUtils.map(fetchStreamSource.stream, (chunk) => chunk.delta.text));
452
480
  // logging of times
453
481
  // removal of cursor tag if option is set
454
- const linesStream = (() => {
482
+ const linesStream = (async function* () {
455
483
  let i = 0;
456
- return llmLinesStream.map((v) => {
484
+ for await (const v of llmLinesStream) {
457
485
  const trace = `Line ${i++} emitted with latency ${fetchRequestStopWatch.elapsed()} ms`;
458
486
  tracer.trace(trace);
459
- return opts.shouldRemoveCursorTagFromResponse
487
+ yield opts.shouldRemoveCursorTagFromResponse
460
488
  ? v.replaceAll(tags_1.PromptTags.CURSOR, '')
461
489
  : v;
462
- });
490
+ }
463
491
  })();
464
492
  const isFromCursorJump = opts.retryState instanceof RetryState.Retrying && opts.retryState.reason === 'cursorJump';
465
493
  let cleanedLinesStream;
466
494
  if (opts.responseFormat === xtabPromptOptions.ResponseFormat.EditWindowOnly) {
467
495
  cleanedLinesStream = linesStream;
468
496
  }
497
+ else if (opts.responseFormat === xtabPromptOptions.ResponseFormat.EditWindowWithEditIntent ||
498
+ opts.responseFormat === xtabPromptOptions.ResponseFormat.EditWindowWithEditIntentShort) {
499
+ // Determine parse mode based on response format
500
+ const parseMode = opts.responseFormat === xtabPromptOptions.ResponseFormat.EditWindowWithEditIntentShort
501
+ ? EditIntentParseMode.ShortName
502
+ : EditIntentParseMode.Tags;
503
+ // Parse the edit_intent from the response
504
+ const { editIntent, remainingLinesStream, parseError } = await parseEditIntentFromStream(linesStream, tracer, parseMode);
505
+ // Log the edit intent for telemetry
506
+ telemetryBuilder.setEditIntent(editIntent);
507
+ // Log parse errors for telemetry - this helps detect malformed model output during flights
508
+ if (parseError) {
509
+ telemetryBuilder.setEditIntentParseError(parseError);
510
+ }
511
+ // Check if we should show this edit based on intent and aggressiveness
512
+ if (!xtabPromptOptions.EditIntent.shouldShowEdit(editIntent, promptPieces.aggressivenessLevel)) {
513
+ tracer.trace(`Filtered out edit due to edit intent "${editIntent}" with aggressiveness "${promptPieces.aggressivenessLevel}"`);
514
+ return new statelessNextEditProvider_1.NoNextEditReason.FilteredOut(`editIntent:${editIntent} aggressivenessLevel:${promptPieces.aggressivenessLevel}`);
515
+ }
516
+ cleanedLinesStream = remainingLinesStream;
517
+ }
469
518
  else if (opts.responseFormat === xtabPromptOptions.ResponseFormat.CustomDiffPatch) {
470
- return yield* xtabCustomDiffPatchResponseHandler_1.XtabCustomDiffPatchResponseHandler.handleResponse(linesStream, request.documentBeforeEdits, editWindow);
519
+ return yield* xtabCustomDiffPatchResponseHandler_1.XtabCustomDiffPatchResponseHandler.handleResponse(linesStream, request.documentBeforeEdits, editWindow, originalEditWindow);
471
520
  }
472
521
  else if (opts.responseFormat === xtabPromptOptions.ResponseFormat.UnifiedWithXml) {
473
522
  const linesIter = linesStream[Symbol.asyncIterator]();
@@ -488,7 +537,7 @@ let XtabProvider = class XtabProvider {
488
537
  return new statelessNextEditProvider_1.NoNextEditReason.NoSuggestions(request.documentBeforeEdits, editWindow);
489
538
  }
490
539
  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)]);
491
- yield { edit, isFromCursorJump, window: editWindow };
540
+ yield { edit, isFromCursorJump, window: editWindow, originalWindow: originalEditWindow };
492
541
  const lines = [];
493
542
  let v = await linesIter.next();
494
543
  while (!v.done) {
@@ -504,21 +553,22 @@ let XtabProvider = class XtabProvider {
504
553
  yield {
505
554
  edit: new lineEdit_1.LineReplacement(new lineRange_1.LineRange(line, line), lines),
506
555
  isFromCursorJump,
507
- window: editWindow
556
+ window: editWindow,
557
+ originalWindow: originalEditWindow
508
558
  };
509
559
  return new statelessNextEditProvider_1.NoNextEditReason.NoSuggestions(request.documentBeforeEdits, editWindow);
510
560
  }
511
561
  if (trimmedLines === tags_1.ResponseTags.EDIT.start) {
512
- cleanedLinesStream = new async_2.AsyncIterableObject(async (emitter) => {
562
+ cleanedLinesStream = (async function* () {
513
563
  let v = await linesIter.next();
514
564
  while (!v.done) {
515
565
  if (v.value.includes(tags_1.ResponseTags.EDIT.end)) {
516
566
  return;
517
567
  }
518
- emitter.emitOne(v.value);
568
+ yield v.value;
519
569
  v = await linesIter.next();
520
570
  }
521
- });
571
+ })();
522
572
  }
523
573
  else {
524
574
  return new statelessNextEditProvider_1.NoNextEditReason.Unexpected(new Error(`unexpected tag ${trimmedLines}`));
@@ -580,12 +630,12 @@ let XtabProvider = class XtabProvider {
580
630
  }
581
631
  }
582
632
  }
583
- yield { edit: singleLineEdit, isFromCursorJump, window: editWindow };
633
+ yield { edit: singleLineEdit, isFromCursorJump, window: editWindow, originalWindow: originalEditWindow };
584
634
  i++;
585
635
  }
586
636
  }
587
637
  if (chatResponseFailure) {
588
- return XtabProvider_1.mapChatFetcherErrorToNoNextEditReason(chatResponseFailure);
638
+ return mapChatFetcherErrorToNoNextEditReason(chatResponseFailure);
589
639
  }
590
640
  return new statelessNextEditProvider_1.NoNextEditReason.NoSuggestions(request.documentBeforeEdits, editWindow);
591
641
  }
@@ -633,7 +683,7 @@ let XtabProvider = class XtabProvider {
633
683
  return new statelessNextEditProvider_1.NoNextEditReason.NoSuggestions(request.documentBeforeEdits, editWindow, nextCursorPosition);
634
684
  }
635
685
  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'));
686
+ const v = this.doGetNextEditWithSelection(request, new range_1.Range(nextCursorLineOneBased, nextCursorColumn, nextCursorLineOneBased, nextCursorColumn), delaySession, tracer, logContext, cancellationToken, telemetryBuilder, new RetryState.Retrying('cursorJump'), editWindow);
637
687
  return yield* v;
638
688
  }
639
689
  default: {
@@ -641,12 +691,6 @@ let XtabProvider = class XtabProvider {
641
691
  }
642
692
  }
643
693
  }
644
- computeAreaAroundEditWindowLinesRange(currentDocument) {
645
- const cursorLine = currentDocument.cursorLineOffset;
646
- const areaAroundStart = Math.max(0, cursorLine - promptCrafting_1.N_LINES_AS_CONTEXT);
647
- const areaAroundEndExcl = Math.min(currentDocument.lines.length, cursorLine + promptCrafting_1.N_LINES_AS_CONTEXT + 1);
648
- return new offsetRange_1.OffsetRange(areaAroundStart, areaAroundEndExcl);
649
- }
650
694
  computeEditWindowLinesRange(currentDocument, request, tracer, telemetry) {
651
695
  const currentDocLines = currentDocument.lines;
652
696
  const cursorLineOffset = currentDocument.cursorLineOffset;
@@ -709,29 +753,6 @@ let XtabProvider = class XtabProvider {
709
753
  }
710
754
  return new offsetRange_1.OffsetRange(codeToEditStart, codeToEditEndExcl);
711
755
  }
712
- static mapChatFetcherErrorToNoNextEditReason(fetchError) {
713
- switch (fetchError.type) {
714
- case commonTypes_1.ChatFetchResponseType.Canceled:
715
- return new statelessNextEditProvider_1.NoNextEditReason.GotCancelled('afterFetchCall');
716
- case commonTypes_1.ChatFetchResponseType.OffTopic:
717
- case commonTypes_1.ChatFetchResponseType.Filtered:
718
- case commonTypes_1.ChatFetchResponseType.PromptFiltered:
719
- case commonTypes_1.ChatFetchResponseType.Length:
720
- case commonTypes_1.ChatFetchResponseType.RateLimited:
721
- case commonTypes_1.ChatFetchResponseType.QuotaExceeded:
722
- case commonTypes_1.ChatFetchResponseType.ExtensionBlocked:
723
- case commonTypes_1.ChatFetchResponseType.AgentUnauthorized:
724
- case commonTypes_1.ChatFetchResponseType.AgentFailedDependency:
725
- case commonTypes_1.ChatFetchResponseType.InvalidStatefulMarker:
726
- return new statelessNextEditProvider_1.NoNextEditReason.Uncategorized(errors.fromUnknown(fetchError));
727
- case commonTypes_1.ChatFetchResponseType.BadRequest:
728
- case commonTypes_1.ChatFetchResponseType.NotFound:
729
- case commonTypes_1.ChatFetchResponseType.Failed:
730
- case commonTypes_1.ChatFetchResponseType.NetworkError:
731
- case commonTypes_1.ChatFetchResponseType.Unknown:
732
- return new statelessNextEditProvider_1.NoNextEditReason.FetchFailure(errors.fromUnknown(fetchError));
733
- }
734
- }
735
756
  determineModelConfiguration(activeDocument) {
736
757
  if (this.forceUseDefaultModel) {
737
758
  const defaultOptions = {
@@ -739,7 +760,7 @@ let XtabProvider = class XtabProvider {
739
760
  ...xtabPromptOptions.DEFAULT_OPTIONS,
740
761
  };
741
762
  const defaultModelConfig = this.modelService.defaultModelConfiguration();
742
- return XtabProvider_1.overrideModelConfig(defaultOptions, defaultModelConfig);
763
+ return overrideModelConfig(defaultOptions, defaultModelConfig);
743
764
  }
744
765
  const sourcedModelConfig = {
745
766
  modelName: undefined,
@@ -759,8 +780,9 @@ let XtabProvider = class XtabProvider {
759
780
  maxTokens: this.configService.getExperimentBasedConfig(configurationService_1.ConfigKey.TeamInternal.InlineEditsXtabRecentlyViewedDocumentsMaxTokens, this.expService),
760
781
  includeViewedFiles: this.configService.getExperimentBasedConfig(configurationService_1.ConfigKey.TeamInternal.InlineEditsXtabIncludeViewedFiles, this.expService),
761
782
  includeLineNumbers: this.configService.getExperimentBasedConfig(configurationService_1.ConfigKey.TeamInternal.InlineEditsXtabRecentlyViewedIncludeLineNumbers, this.expService),
783
+ clippingStrategy: this.configService.getExperimentBasedConfig(configurationService_1.ConfigKey.TeamInternal.InlineEditsXtabRecentlyViewedClippingStrategy, this.expService),
762
784
  },
763
- languageContext: this.determineLanguageContextOptions(activeDocument.languageId, {
785
+ languageContext: determineLanguageContextOptions(activeDocument.languageId, {
764
786
  enabled: this.configService.getExperimentBasedConfig(configurationService_1.ConfigKey.TeamInternal.InlineEditsXtabLanguageContextEnabled, this.expService),
765
787
  enabledLanguages: this.configService.getConfig(configurationService_1.ConfigKey.TeamInternal.InlineEditsXtabLanguageContextEnabledLanguages),
766
788
  enableAllContextProviders: this.configService.getExperimentBasedConfig(configurationService_1.ConfigKey.Advanced.DiagnosticsContextProvider, this.expService)
@@ -782,49 +804,7 @@ let XtabProvider = class XtabProvider {
782
804
  const modelConfig = selectedModelConfig.promptingStrategy === xtabPromptOptions.PromptingStrategy.CopilotNesXtab
783
805
  ? { ...selectedModelConfig, includeTagsInCurrentFile: true }
784
806
  : selectedModelConfig;
785
- return XtabProvider_1.overrideModelConfig(sourcedModelConfig, modelConfig);
786
- }
787
- static overrideModelConfig(modelConfig, overridingConfig) {
788
- return {
789
- ...modelConfig,
790
- modelName: overridingConfig.modelName,
791
- promptingStrategy: overridingConfig.promptingStrategy,
792
- currentFile: {
793
- ...modelConfig.currentFile,
794
- includeTags: overridingConfig.includeTagsInCurrentFile,
795
- },
796
- lintOptions: overridingConfig.lintOptions ? { ...modelConfig.lintOptions, ...overridingConfig.lintOptions } : modelConfig.lintOptions,
797
- };
798
- }
799
- pickSystemPrompt(promptingStrategy) {
800
- switch (promptingStrategy) {
801
- case xtabPromptOptions.PromptingStrategy.UnifiedModel:
802
- return systemMessages_1.unifiedModelSystemPrompt;
803
- case xtabPromptOptions.PromptingStrategy.Codexv21NesUnified:
804
- case xtabPromptOptions.PromptingStrategy.SimplifiedSystemPrompt:
805
- return systemMessages_1.simplifiedPrompt;
806
- case xtabPromptOptions.PromptingStrategy.PatchBased:
807
- case xtabPromptOptions.PromptingStrategy.PatchBased01:
808
- case xtabPromptOptions.PromptingStrategy.Xtab275:
809
- case xtabPromptOptions.PromptingStrategy.XtabAggressiveness:
810
- return systemMessages_1.xtab275SystemPrompt;
811
- case xtabPromptOptions.PromptingStrategy.Nes41Miniv3:
812
- return systemMessages_1.nes41Miniv3SystemPrompt;
813
- case xtabPromptOptions.PromptingStrategy.CopilotNesXtab:
814
- case undefined:
815
- return systemMessages_1.systemPromptTemplate;
816
- default:
817
- (0, assert_1.assertNever)(promptingStrategy);
818
- }
819
- }
820
- determineLanguageContextOptions(languageId, { enabled, enabledLanguages, maxTokens, enableAllContextProviders, traitPosition }) {
821
- if (languageId in enabledLanguages) {
822
- return { enabled: enabledLanguages[languageId], maxTokens, traitPosition };
823
- }
824
- if (enableAllContextProviders) {
825
- return { enabled: true, maxTokens, traitPosition };
826
- }
827
- return { enabled, maxTokens, traitPosition };
807
+ return overrideModelConfig(sourcedModelConfig, modelConfig);
828
808
  }
829
809
  getEndpoint(configuredModelName) {
830
810
  const url = this.configService.getConfig(configurationService_1.ConfigKey.TeamInternal.InlineEditsXtabProviderUrl);
@@ -836,32 +816,13 @@ let XtabProvider = class XtabProvider {
836
816
  return (0, proxyXtabEndpoint_1.createProxyXtabEndpoint)(this.instaService, configuredModelName);
837
817
  }
838
818
  getPredictedOutput(doc, editWindowLines, responseFormat) {
839
- return this.configService.getConfig(configurationService_1.ConfigKey.TeamInternal.InlineEditsXtabProviderUsePrediction)
819
+ return this.configService.getExperimentBasedConfig(configurationService_1.ConfigKey.TeamInternal.InlineEditsXtabProviderUsePrediction, this.expService)
840
820
  ? {
841
821
  type: 'content',
842
- content: this.getPredictionContents(doc, editWindowLines, responseFormat)
822
+ content: getPredictionContents(doc, editWindowLines, responseFormat)
843
823
  }
844
824
  : undefined;
845
825
  }
846
- getPredictionContents(doc, editWindowLines, responseFormat) {
847
- if (responseFormat === xtabPromptOptions.ResponseFormat.UnifiedWithXml) {
848
- return ['<EDIT>', ...editWindowLines, '</EDIT>'].join('\n');
849
- }
850
- else if (responseFormat === xtabPromptOptions.ResponseFormat.EditWindowOnly) {
851
- return editWindowLines.join('\n');
852
- }
853
- else if (responseFormat === xtabPromptOptions.ResponseFormat.CodeBlock) {
854
- return ['```', ...editWindowLines, '```'].join('\n');
855
- }
856
- else if (responseFormat === xtabPromptOptions.ResponseFormat.CustomDiffPatch) {
857
- const workspacePath = doc.workspaceRoot?.path;
858
- const workspaceRelativeDocPath = (0, promptCrafting_1.toUniquePath)(doc.id, workspacePath);
859
- return `${workspaceRelativeDocPath}:`;
860
- }
861
- else {
862
- (0, assert_1.assertNever)(responseFormat);
863
- }
864
- }
865
826
  async debounce(delaySession, retryState, logger, telemetry) {
866
827
  if (this.simulationCtx.isInSimulationTests) {
867
828
  return;
@@ -926,6 +887,257 @@ exports.XtabProvider = XtabProvider = XtabProvider_1 = __decorate([
926
887
  __param(8, languageDiagnosticsService_1.ILanguageDiagnosticsService),
927
888
  __param(9, ignoreService_1.IIgnoreService)
928
889
  ], XtabProvider);
890
+ function computeAreaAroundEditWindowLinesRange(currentDocument) {
891
+ const cursorLine = currentDocument.cursorLineOffset;
892
+ const areaAroundStart = Math.max(0, cursorLine - promptCrafting_1.N_LINES_AS_CONTEXT);
893
+ const areaAroundEndExcl = Math.min(currentDocument.lines.length, cursorLine + promptCrafting_1.N_LINES_AS_CONTEXT + 1);
894
+ return new offsetRange_1.OffsetRange(areaAroundStart, areaAroundEndExcl);
895
+ }
896
+ function mapChatFetcherErrorToNoNextEditReason(fetchError) {
897
+ switch (fetchError.type) {
898
+ case commonTypes_1.ChatFetchResponseType.Canceled:
899
+ return new statelessNextEditProvider_1.NoNextEditReason.GotCancelled('afterFetchCall');
900
+ case commonTypes_1.ChatFetchResponseType.OffTopic:
901
+ case commonTypes_1.ChatFetchResponseType.Filtered:
902
+ case commonTypes_1.ChatFetchResponseType.PromptFiltered:
903
+ case commonTypes_1.ChatFetchResponseType.Length:
904
+ case commonTypes_1.ChatFetchResponseType.RateLimited:
905
+ case commonTypes_1.ChatFetchResponseType.QuotaExceeded:
906
+ case commonTypes_1.ChatFetchResponseType.ExtensionBlocked:
907
+ case commonTypes_1.ChatFetchResponseType.AgentUnauthorized:
908
+ case commonTypes_1.ChatFetchResponseType.AgentFailedDependency:
909
+ case commonTypes_1.ChatFetchResponseType.InvalidStatefulMarker:
910
+ return new statelessNextEditProvider_1.NoNextEditReason.Uncategorized(errors.fromUnknown(fetchError));
911
+ case commonTypes_1.ChatFetchResponseType.BadRequest:
912
+ case commonTypes_1.ChatFetchResponseType.NotFound:
913
+ case commonTypes_1.ChatFetchResponseType.Failed:
914
+ case commonTypes_1.ChatFetchResponseType.NetworkError:
915
+ case commonTypes_1.ChatFetchResponseType.Unknown:
916
+ return new statelessNextEditProvider_1.NoNextEditReason.FetchFailure(errors.fromUnknown(fetchError));
917
+ }
918
+ }
919
+ function overrideModelConfig(modelConfig, overridingConfig) {
920
+ return {
921
+ ...modelConfig,
922
+ modelName: overridingConfig.modelName,
923
+ promptingStrategy: overridingConfig.promptingStrategy,
924
+ currentFile: {
925
+ ...modelConfig.currentFile,
926
+ includeTags: overridingConfig.includeTagsInCurrentFile,
927
+ },
928
+ lintOptions: overridingConfig.lintOptions ? { ...modelConfig.lintOptions, ...overridingConfig.lintOptions } : modelConfig.lintOptions,
929
+ };
930
+ }
931
+ function pickSystemPrompt(promptingStrategy) {
932
+ switch (promptingStrategy) {
933
+ case xtabPromptOptions.PromptingStrategy.UnifiedModel:
934
+ return systemMessages_1.unifiedModelSystemPrompt;
935
+ case xtabPromptOptions.PromptingStrategy.Codexv21NesUnified:
936
+ case xtabPromptOptions.PromptingStrategy.SimplifiedSystemPrompt:
937
+ return systemMessages_1.simplifiedPrompt;
938
+ case xtabPromptOptions.PromptingStrategy.PatchBased:
939
+ case xtabPromptOptions.PromptingStrategy.PatchBased01:
940
+ case xtabPromptOptions.PromptingStrategy.Xtab275:
941
+ case xtabPromptOptions.PromptingStrategy.XtabAggressiveness:
942
+ case xtabPromptOptions.PromptingStrategy.Xtab275Aggressiveness:
943
+ case xtabPromptOptions.PromptingStrategy.Xtab275EditIntent:
944
+ case xtabPromptOptions.PromptingStrategy.Xtab275EditIntentShort:
945
+ return systemMessages_1.xtab275SystemPrompt;
946
+ case xtabPromptOptions.PromptingStrategy.Nes41Miniv3:
947
+ return systemMessages_1.nes41Miniv3SystemPrompt;
948
+ case xtabPromptOptions.PromptingStrategy.CopilotNesXtab:
949
+ case undefined:
950
+ return systemMessages_1.systemPromptTemplate;
951
+ default:
952
+ (0, assert_1.assertNever)(promptingStrategy);
953
+ }
954
+ }
955
+ function determineLanguageContextOptions(languageId, { enabled, enabledLanguages, maxTokens, enableAllContextProviders, traitPosition }) {
956
+ if (languageId in enabledLanguages) {
957
+ return { enabled: enabledLanguages[languageId], maxTokens, traitPosition };
958
+ }
959
+ if (enableAllContextProviders) {
960
+ return { enabled: true, maxTokens, traitPosition };
961
+ }
962
+ return { enabled, maxTokens, traitPosition };
963
+ }
964
+ function getPredictionContents(doc, editWindowLines, responseFormat) {
965
+ if (responseFormat === xtabPromptOptions.ResponseFormat.UnifiedWithXml) {
966
+ return ['<EDIT>', ...editWindowLines, '</EDIT>'].join('\n');
967
+ }
968
+ else if (responseFormat === xtabPromptOptions.ResponseFormat.EditWindowOnly) {
969
+ return editWindowLines.join('\n');
970
+ }
971
+ else if (responseFormat === xtabPromptOptions.ResponseFormat.EditWindowWithEditIntent) {
972
+ // For EditWindowWithIntent, we predict the edit intent as high (most likely case) followed by the code
973
+ return ['<|edit_intent|>high<|/edit_intent|>', ...editWindowLines].join('\n');
974
+ }
975
+ else if (responseFormat === xtabPromptOptions.ResponseFormat.EditWindowWithEditIntentShort) {
976
+ // For EditWindowWithIntentShort, we predict 'H' (high) followed by the code
977
+ return ['H', ...editWindowLines].join('\n');
978
+ }
979
+ else if (responseFormat === xtabPromptOptions.ResponseFormat.CodeBlock) {
980
+ return ['```', ...editWindowLines, '```'].join('\n');
981
+ }
982
+ else if (responseFormat === xtabPromptOptions.ResponseFormat.CustomDiffPatch) {
983
+ const workspacePath = doc.workspaceRoot?.path;
984
+ const workspaceRelativeDocPath = (0, promptCraftingUtils_1.toUniquePath)(doc.id, workspacePath);
985
+ return `${workspaceRelativeDocPath}:`;
986
+ }
987
+ else {
988
+ (0, assert_1.assertNever)(responseFormat);
989
+ }
990
+ }
991
+ /**
992
+ * Mode for parsing edit intent from the model response.
993
+ */
994
+ var EditIntentParseMode;
995
+ (function (EditIntentParseMode) {
996
+ /** Parse using XML-style tags: <|edit_intent|>value<|/edit_intent|> */
997
+ EditIntentParseMode["Tags"] = "tags";
998
+ /** Parse using short names on the first line: N|L|M|H */
999
+ EditIntentParseMode["ShortName"] = "shortName";
1000
+ })(EditIntentParseMode || (exports.EditIntentParseMode = EditIntentParseMode = {}));
1001
+ /**
1002
+ * Parses the edit_intent from the first line of the response stream.
1003
+ * The edit_intent MUST be on the first line, otherwise it's treated as not provided.
1004
+ * Returns the parsed EditIntent and a new stream with the remaining content.
1005
+ *
1006
+ * Supports two modes:
1007
+ * - Tags (default): <|edit_intent|>low|medium|high|no_edit<|/edit_intent|>
1008
+ * - ShortName: N|L|M|H on the first line
1009
+ *
1010
+ * @param linesStream The stream of lines from the model response
1011
+ * @param tracer Logger for tracing
1012
+ * @param mode The parse mode (Tags or ShortName), defaults to Tags
1013
+ */
1014
+ async function parseEditIntentFromStream(linesStream, tracer, mode = EditIntentParseMode.Tags) {
1015
+ if (mode === EditIntentParseMode.ShortName) {
1016
+ return parseEditIntentFromStreamShortName(linesStream, tracer);
1017
+ }
1018
+ return parseEditIntentFromStreamTags(linesStream, tracer);
1019
+ }
1020
+ /**
1021
+ * Parses the edit_intent using short name format (N|L|M|H on first line).
1022
+ */
1023
+ async function parseEditIntentFromStreamShortName(linesStream, tracer) {
1024
+ let editIntent = xtabPromptOptions.EditIntent.High; // Default to high (always show) if no short name found
1025
+ let parseError;
1026
+ const linesIter = linesStream[Symbol.asyncIterator]();
1027
+ const firstLineResult = await linesIter.next();
1028
+ if (firstLineResult.done) {
1029
+ // Empty stream
1030
+ parseError = 'emptyResponse';
1031
+ tracer.warn(`Empty response stream, no edit_intent short name found`);
1032
+ const remainingLinesStream = (async function* () { })();
1033
+ return { editIntent, remainingLinesStream, parseError };
1034
+ }
1035
+ const firstLine = firstLineResult.value.trim();
1036
+ // Check if the first line is a single character short name
1037
+ const parsedIntent = xtabPromptOptions.EditIntent.fromShortName(firstLine);
1038
+ if (parsedIntent !== undefined) {
1039
+ editIntent = parsedIntent;
1040
+ tracer.trace(`Parsed edit_intent short name from first line: "${firstLine}" -> ${editIntent}`);
1041
+ // Create a new stream with the remaining lines (excluding the short name line)
1042
+ const remainingLinesStream = (async function* () {
1043
+ let next = await linesIter.next();
1044
+ while (!next.done) {
1045
+ yield next.value;
1046
+ next = await linesIter.next();
1047
+ }
1048
+ })();
1049
+ return { editIntent, remainingLinesStream, parseError };
1050
+ }
1051
+ // Short name not found or invalid
1052
+ parseError = `unknownIntentValue:${firstLine}`;
1053
+ tracer.warn(`Edit intent parse error: ${parseError} (using Xtab275EditIntentShort prompting strategy). ` +
1054
+ `Defaulting to High (always show). First line was: "${firstLine.substring(0, 100)}..."`);
1055
+ // Return the first line plus the rest of the stream
1056
+ const remainingLinesStream = (async function* () {
1057
+ yield firstLineResult.value; // Use original value, not trimmed
1058
+ let next = await linesIter.next();
1059
+ while (!next.done) {
1060
+ yield next.value;
1061
+ next = await linesIter.next();
1062
+ }
1063
+ })();
1064
+ return { editIntent, remainingLinesStream, parseError };
1065
+ }
1066
+ /**
1067
+ * Parses the edit_intent tag from the first line of the response stream (original tag-based format).
1068
+ */
1069
+ async function parseEditIntentFromStreamTags(linesStream, tracer) {
1070
+ const EDIT_INTENT_START_TAG = '<|edit_intent|>';
1071
+ const EDIT_INTENT_END_TAG = '<|/edit_intent|>';
1072
+ let editIntent = xtabPromptOptions.EditIntent.High; // Default to high (always show) if no tag found
1073
+ let parseError;
1074
+ const linesIter = linesStream[Symbol.asyncIterator]();
1075
+ const firstLineResult = await linesIter.next();
1076
+ if (firstLineResult.done) {
1077
+ // Empty stream
1078
+ parseError = 'emptyResponse';
1079
+ tracer.warn(`Empty response stream, no edit_intent tag found`);
1080
+ const remainingLinesStream = (async function* () { })();
1081
+ return { editIntent, remainingLinesStream, parseError };
1082
+ }
1083
+ const firstLine = firstLineResult.value;
1084
+ // Check if the first line contains the complete edit_intent tag
1085
+ const startIdx = firstLine.indexOf(EDIT_INTENT_START_TAG);
1086
+ const endIdx = firstLine.indexOf(EDIT_INTENT_END_TAG);
1087
+ if (startIdx !== -1 && endIdx !== -1 && endIdx > startIdx) {
1088
+ // Found complete tag on first line
1089
+ const intentValue = firstLine.substring(startIdx + EDIT_INTENT_START_TAG.length, endIdx).trim().toLowerCase();
1090
+ // Check if it's a known intent value
1091
+ const knownIntentValues = ['no_edit', 'low', 'medium', 'high'];
1092
+ if (!knownIntentValues.includes(intentValue)) {
1093
+ parseError = `unknownIntentValue:${intentValue}`;
1094
+ tracer.warn(`Unknown edit_intent value: "${intentValue}", defaulting to High`);
1095
+ }
1096
+ editIntent = xtabPromptOptions.EditIntent.fromString(intentValue);
1097
+ tracer.trace(`Parsed edit_intent from first line: "${intentValue}" -> ${editIntent}`);
1098
+ // Calculate remaining content after the end tag on the first line
1099
+ const afterEndTag = firstLine.substring(endIdx + EDIT_INTENT_END_TAG.length);
1100
+ // Create a new stream that first yields remaining content from first line, then continues
1101
+ const remainingLinesStream = (async function* () {
1102
+ // Only yield remaining content from first line if non-empty
1103
+ if (afterEndTag.trim() !== '') {
1104
+ yield afterEndTag;
1105
+ }
1106
+ // Continue with rest of the stream
1107
+ let next = await linesIter.next();
1108
+ while (!next.done) {
1109
+ yield next.value;
1110
+ next = await linesIter.next();
1111
+ }
1112
+ })();
1113
+ return { editIntent, remainingLinesStream, parseError };
1114
+ }
1115
+ // Determine the parse error type
1116
+ if (startIdx !== -1 && endIdx === -1) {
1117
+ // Start tag found but no end tag - malformed (possibly split across lines)
1118
+ parseError = 'malformedTag:startWithoutEnd';
1119
+ }
1120
+ else if (startIdx === -1 && endIdx !== -1) {
1121
+ // End tag found but no start tag - malformed
1122
+ parseError = 'malformedTag:endWithoutStart';
1123
+ }
1124
+ else {
1125
+ // No tag found at all
1126
+ parseError = 'noTagFound';
1127
+ }
1128
+ tracer.warn(`Edit intent parse error: ${parseError} (using Xtab275EditIntent prompting strategy). ` +
1129
+ `Defaulting to High (always show). First line was: "${firstLine.substring(0, 100)}..."`);
1130
+ // Return the first line plus the rest of the stream
1131
+ const remainingLinesStream = (async function* () {
1132
+ yield firstLine;
1133
+ let next = await linesIter.next();
1134
+ while (!next.done) {
1135
+ yield next.value;
1136
+ next = await linesIter.next();
1137
+ }
1138
+ })();
1139
+ return { editIntent, remainingLinesStream, parseError };
1140
+ }
929
1141
  /**
930
1142
  * Finds the range of lines containing merge conflict markers within a specified edit window.
931
1143
  *