@vscode/chat-lib 0.3.1-9 → 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.
- package/dist/src/_internal/extension/byok/node/openAIEndpoint.d.ts +1 -6
- package/dist/src/_internal/extension/byok/node/openAIEndpoint.d.ts.map +1 -1
- package/dist/src/_internal/extension/byok/node/openAIEndpoint.js +9 -20
- package/dist/src/_internal/extension/byok/node/openAIEndpoint.js.map +1 -1
- package/dist/src/_internal/extension/common/constants.d.ts +0 -1
- package/dist/src/_internal/extension/common/constants.d.ts.map +1 -1
- package/dist/src/_internal/extension/common/constants.js +2 -1
- package/dist/src/_internal/extension/common/constants.js.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/completionsFromNetwork.d.ts +4 -2
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/completionsFromNetwork.d.ts.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/completionsFromNetwork.js +38 -5
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/completionsFromNetwork.js.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/ghostText.d.ts +0 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/ghostText.d.ts.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/ghostText.js +13 -13
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/ghostText.js.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/openai/fetch.d.ts +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/openai/fetch.d.ts.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/openai/fetch.js +205 -122
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/openai/fetch.js.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/components/currentFile.d.ts.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/components/currentFile.js +15 -7
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/components/currentFile.js.map +1 -1
- package/dist/src/_internal/extension/inlineEdits/common/userInteractionMonitor.d.ts +52 -8
- package/dist/src/_internal/extension/inlineEdits/common/userInteractionMonitor.d.ts.map +1 -1
- package/dist/src/_internal/extension/inlineEdits/common/userInteractionMonitor.js +208 -41
- package/dist/src/_internal/extension/inlineEdits/common/userInteractionMonitor.js.map +1 -1
- package/dist/src/_internal/extension/inlineEdits/node/nesConfigs.d.ts +1 -0
- package/dist/src/_internal/extension/inlineEdits/node/nesConfigs.d.ts.map +1 -1
- package/dist/src/_internal/extension/inlineEdits/node/nextEditCache.d.ts +14 -4
- package/dist/src/_internal/extension/inlineEdits/node/nextEditCache.d.ts.map +1 -1
- package/dist/src/_internal/extension/inlineEdits/node/nextEditCache.js +46 -30
- package/dist/src/_internal/extension/inlineEdits/node/nextEditCache.js.map +1 -1
- package/dist/src/_internal/extension/inlineEdits/node/nextEditProvider.d.ts +24 -3
- package/dist/src/_internal/extension/inlineEdits/node/nextEditProvider.d.ts.map +1 -1
- package/dist/src/_internal/extension/inlineEdits/node/nextEditProvider.js +471 -128
- package/dist/src/_internal/extension/inlineEdits/node/nextEditProvider.js.map +1 -1
- package/dist/src/_internal/extension/inlineEdits/node/nextEditProviderTelemetry.d.ts.map +1 -1
- package/dist/src/_internal/extension/inlineEdits/node/nextEditProviderTelemetry.js +5 -1
- package/dist/src/_internal/extension/inlineEdits/node/nextEditProviderTelemetry.js.map +1 -1
- package/dist/src/_internal/extension/inlineEdits/node/nextEditResult.d.ts +0 -4
- package/dist/src/_internal/extension/inlineEdits/node/nextEditResult.d.ts.map +1 -1
- package/dist/src/_internal/extension/inlineEdits/node/nextEditResult.js.map +1 -1
- package/dist/src/_internal/extension/power/common/powerService.d.ts +22 -0
- package/dist/src/_internal/extension/power/common/powerService.d.ts.map +1 -0
- package/dist/src/_internal/extension/power/common/powerService.js +20 -0
- package/dist/src/_internal/extension/power/common/powerService.js.map +1 -0
- package/dist/src/_internal/extension/prompt/node/chatMLFetcher.d.ts +6 -2
- package/dist/src/_internal/extension/prompt/node/chatMLFetcher.d.ts.map +1 -1
- package/dist/src/_internal/extension/prompt/node/chatMLFetcher.js +32 -8
- package/dist/src/_internal/extension/prompt/node/chatMLFetcher.js.map +1 -1
- package/dist/src/_internal/extension/xtab/common/diffHistoryForPrompt.d.ts +6 -0
- package/dist/src/_internal/extension/xtab/common/diffHistoryForPrompt.d.ts.map +1 -0
- package/dist/src/_internal/extension/xtab/common/diffHistoryForPrompt.js +89 -0
- package/dist/src/_internal/extension/xtab/common/diffHistoryForPrompt.js.map +1 -0
- package/dist/src/_internal/extension/xtab/common/lintErrors.d.ts +4 -4
- package/dist/src/_internal/extension/xtab/common/lintErrors.d.ts.map +1 -1
- package/dist/src/_internal/extension/xtab/common/lintErrors.js +70 -26
- package/dist/src/_internal/extension/xtab/common/lintErrors.js.map +1 -1
- package/dist/src/_internal/extension/xtab/common/promptCrafting.d.ts +13022 -364
- package/dist/src/_internal/extension/xtab/common/promptCrafting.d.ts.map +1 -1
- package/dist/src/_internal/extension/xtab/common/promptCrafting.js +14 -233
- package/dist/src/_internal/extension/xtab/common/promptCrafting.js.map +1 -1
- package/dist/src/_internal/extension/xtab/common/promptCraftingUtils.d.ts +4 -0
- package/dist/src/_internal/extension/xtab/common/promptCraftingUtils.d.ts.map +1 -0
- package/dist/src/_internal/extension/xtab/common/promptCraftingUtils.js +22 -0
- package/dist/src/_internal/extension/xtab/common/promptCraftingUtils.js.map +1 -0
- package/dist/src/_internal/extension/xtab/common/recentFilesForPrompt.d.ts +41 -0
- package/dist/src/_internal/extension/xtab/common/recentFilesForPrompt.d.ts.map +1 -0
- package/dist/src/_internal/extension/xtab/common/recentFilesForPrompt.js +375 -0
- package/dist/src/_internal/extension/xtab/common/recentFilesForPrompt.js.map +1 -0
- package/dist/src/_internal/extension/xtab/common/terminalOutput.d.ts +20 -0
- package/dist/src/_internal/extension/xtab/common/terminalOutput.d.ts.map +1 -0
- package/dist/src/_internal/extension/xtab/common/terminalOutput.js +105 -0
- package/dist/src/_internal/extension/xtab/common/terminalOutput.js.map +1 -0
- package/dist/src/_internal/extension/xtab/node/xtabCustomDiffPatchResponseHandler.d.ts +2 -3
- package/dist/src/_internal/extension/xtab/node/xtabCustomDiffPatchResponseHandler.d.ts.map +1 -1
- package/dist/src/_internal/extension/xtab/node/xtabCustomDiffPatchResponseHandler.js +2 -1
- package/dist/src/_internal/extension/xtab/node/xtabCustomDiffPatchResponseHandler.js.map +1 -1
- package/dist/src/_internal/extension/xtab/node/xtabEndpoint.d.ts.map +1 -1
- package/dist/src/_internal/extension/xtab/node/xtabEndpoint.js +1 -1
- package/dist/src/_internal/extension/xtab/node/xtabEndpoint.js.map +1 -1
- package/dist/src/_internal/extension/xtab/node/xtabNextCursorPredictor.d.ts.map +1 -1
- package/dist/src/_internal/extension/xtab/node/xtabNextCursorPredictor.js +2 -1
- package/dist/src/_internal/extension/xtab/node/xtabNextCursorPredictor.js.map +1 -1
- package/dist/src/_internal/extension/xtab/node/xtabProvider.d.ts +52 -9
- package/dist/src/_internal/extension/xtab/node/xtabProvider.d.ts.map +1 -1
- package/dist/src/_internal/extension/xtab/node/xtabProvider.js +358 -155
- package/dist/src/_internal/extension/xtab/node/xtabProvider.js.map +1 -1
- package/dist/src/_internal/extension/xtab/node/xtabUtils.d.ts +1 -4
- package/dist/src/_internal/extension/xtab/node/xtabUtils.d.ts.map +1 -1
- package/dist/src/_internal/extension/xtab/node/xtabUtils.js +21 -39
- package/dist/src/_internal/extension/xtab/node/xtabUtils.js.map +1 -1
- package/dist/src/_internal/platform/chat/common/commonTypes.d.ts +2 -2
- package/dist/src/_internal/platform/chat/common/commonTypes.d.ts.map +1 -1
- package/dist/src/_internal/platform/chat/common/commonTypes.js +8 -8
- package/dist/src/_internal/platform/chat/common/commonTypes.js.map +1 -1
- package/dist/src/_internal/platform/configuration/common/configurationService.d.ts +39 -5
- package/dist/src/_internal/platform/configuration/common/configurationService.d.ts.map +1 -1
- package/dist/src/_internal/platform/configuration/common/configurationService.js +40 -8
- package/dist/src/_internal/platform/configuration/common/configurationService.js.map +1 -1
- package/dist/src/_internal/platform/endpoint/common/chatModelCapabilities.d.ts +1 -0
- package/dist/src/_internal/platform/endpoint/common/chatModelCapabilities.d.ts.map +1 -1
- package/dist/src/_internal/platform/endpoint/common/chatModelCapabilities.js +8 -3
- package/dist/src/_internal/platform/endpoint/common/chatModelCapabilities.js.map +1 -1
- package/dist/src/_internal/platform/endpoint/common/compactionDataContainer.d.ts +17 -0
- package/dist/src/_internal/platform/endpoint/common/compactionDataContainer.d.ts.map +1 -0
- package/dist/src/_internal/platform/endpoint/common/compactionDataContainer.js +37 -0
- package/dist/src/_internal/platform/endpoint/common/compactionDataContainer.js.map +1 -0
- package/dist/src/_internal/platform/endpoint/common/endpointProvider.d.ts +9 -5
- package/dist/src/_internal/platform/endpoint/common/endpointProvider.d.ts.map +1 -1
- package/dist/src/_internal/platform/endpoint/common/endpointProvider.js.map +1 -1
- package/dist/src/_internal/platform/endpoint/common/endpointTypes.d.ts +1 -0
- package/dist/src/_internal/platform/endpoint/common/endpointTypes.d.ts.map +1 -1
- package/dist/src/_internal/platform/endpoint/common/endpointTypes.js +1 -0
- package/dist/src/_internal/platform/endpoint/common/endpointTypes.js.map +1 -1
- package/dist/src/_internal/platform/endpoint/common/phaseDataContainer.d.ts +16 -0
- package/dist/src/_internal/platform/endpoint/common/phaseDataContainer.d.ts.map +1 -0
- package/dist/src/_internal/platform/endpoint/common/phaseDataContainer.js +37 -0
- package/dist/src/_internal/platform/endpoint/common/phaseDataContainer.js.map +1 -0
- package/dist/src/_internal/platform/endpoint/node/autoChatEndpoint.js +1 -1
- package/dist/src/_internal/platform/endpoint/node/autoChatEndpoint.js.map +1 -1
- package/dist/src/_internal/platform/endpoint/node/chatEndpoint.d.ts +6 -13
- package/dist/src/_internal/platform/endpoint/node/chatEndpoint.d.ts.map +1 -1
- package/dist/src/_internal/platform/endpoint/node/chatEndpoint.js +18 -53
- package/dist/src/_internal/platform/endpoint/node/chatEndpoint.js.map +1 -1
- package/dist/src/_internal/platform/endpoint/node/copilotChatEndpoint.d.ts.map +1 -1
- package/dist/src/_internal/platform/endpoint/node/copilotChatEndpoint.js +1 -1
- package/dist/src/_internal/platform/endpoint/node/copilotChatEndpoint.js.map +1 -1
- package/dist/src/_internal/platform/endpoint/node/messagesApi.d.ts.map +1 -1
- package/dist/src/_internal/platform/endpoint/node/messagesApi.js +68 -28
- package/dist/src/_internal/platform/endpoint/node/messagesApi.js.map +1 -1
- package/dist/src/_internal/platform/endpoint/node/responsesApi.d.ts.map +1 -1
- package/dist/src/_internal/platform/endpoint/node/responsesApi.js +81 -4
- package/dist/src/_internal/platform/endpoint/node/responsesApi.js.map +1 -1
- package/dist/src/_internal/platform/env/common/envService.d.ts +6 -0
- package/dist/src/_internal/platform/env/common/envService.d.ts.map +1 -1
- package/dist/src/_internal/platform/env/common/envService.js.map +1 -1
- package/dist/src/_internal/platform/env/common/nullEnvService.d.ts +3 -0
- package/dist/src/_internal/platform/env/common/nullEnvService.d.ts.map +1 -1
- package/dist/src/_internal/platform/env/common/nullEnvService.js +4 -0
- package/dist/src/_internal/platform/env/common/nullEnvService.js.map +1 -1
- package/dist/src/_internal/platform/github/common/githubAPI.d.ts +1 -1
- package/dist/src/_internal/platform/github/common/githubAPI.d.ts.map +1 -1
- package/dist/src/_internal/platform/github/common/githubAPI.js +4 -2
- package/dist/src/_internal/platform/github/common/githubAPI.js.map +1 -1
- package/dist/src/_internal/platform/github/common/githubService.d.ts +2 -0
- package/dist/src/_internal/platform/github/common/githubService.d.ts.map +1 -1
- package/dist/src/_internal/platform/github/common/githubService.js +3 -3
- package/dist/src/_internal/platform/github/common/githubService.js.map +1 -1
- package/dist/src/_internal/platform/inlineEdits/common/dataTypes/xtabHistoryOptions.d.ts +9 -0
- package/dist/src/_internal/platform/inlineEdits/common/dataTypes/xtabHistoryOptions.d.ts.map +1 -0
- package/dist/src/_internal/platform/inlineEdits/common/dataTypes/xtabHistoryOptions.js +18 -0
- package/dist/src/_internal/platform/inlineEdits/common/dataTypes/xtabHistoryOptions.js.map +1 -0
- package/dist/src/_internal/platform/inlineEdits/common/dataTypes/xtabPromptOptions.d.ts +103 -2
- package/dist/src/_internal/platform/inlineEdits/common/dataTypes/xtabPromptOptions.d.ts.map +1 -1
- package/dist/src/_internal/platform/inlineEdits/common/dataTypes/xtabPromptOptions.js +231 -1
- package/dist/src/_internal/platform/inlineEdits/common/dataTypes/xtabPromptOptions.js.map +1 -1
- package/dist/src/_internal/platform/inlineEdits/common/inlineEditLogContext.d.ts +11 -5
- package/dist/src/_internal/platform/inlineEdits/common/inlineEditLogContext.d.ts.map +1 -1
- package/dist/src/_internal/platform/inlineEdits/common/inlineEditLogContext.js +33 -18
- package/dist/src/_internal/platform/inlineEdits/common/inlineEditLogContext.js.map +1 -1
- package/dist/src/_internal/platform/inlineEdits/common/inlineEditsModelService.d.ts +2 -0
- package/dist/src/_internal/platform/inlineEdits/common/inlineEditsModelService.d.ts.map +1 -1
- package/dist/src/_internal/platform/inlineEdits/common/inlineEditsModelService.js +4 -0
- package/dist/src/_internal/platform/inlineEdits/common/inlineEditsModelService.js.map +1 -1
- package/dist/src/_internal/platform/inlineEdits/common/responseProcessor.d.ts +1 -2
- package/dist/src/_internal/platform/inlineEdits/common/responseProcessor.d.ts.map +1 -1
- package/dist/src/_internal/platform/inlineEdits/common/responseProcessor.js +13 -0
- package/dist/src/_internal/platform/inlineEdits/common/responseProcessor.js.map +1 -1
- package/dist/src/_internal/platform/inlineEdits/common/statelessNextEditProvider.d.ts +34 -10
- package/dist/src/_internal/platform/inlineEdits/common/statelessNextEditProvider.d.ts.map +1 -1
- package/dist/src/_internal/platform/inlineEdits/common/statelessNextEditProvider.js +38 -6
- package/dist/src/_internal/platform/inlineEdits/common/statelessNextEditProvider.js.map +1 -1
- package/dist/src/_internal/platform/inlineEdits/common/workspaceEditTracker/nesXtabHistoryTracker.d.ts +41 -2
- package/dist/src/_internal/platform/inlineEdits/common/workspaceEditTracker/nesXtabHistoryTracker.d.ts.map +1 -1
- package/dist/src/_internal/platform/inlineEdits/common/workspaceEditTracker/nesXtabHistoryTracker.js +90 -8
- package/dist/src/_internal/platform/inlineEdits/common/workspaceEditTracker/nesXtabHistoryTracker.js.map +1 -1
- package/dist/src/_internal/platform/inlineEdits/node/inlineEditsModelService.d.ts +9 -2
- package/dist/src/_internal/platform/inlineEdits/node/inlineEditsModelService.d.ts.map +1 -1
- package/dist/src/_internal/platform/inlineEdits/node/inlineEditsModelService.js +65 -54
- package/dist/src/_internal/platform/inlineEdits/node/inlineEditsModelService.js.map +1 -1
- package/dist/src/_internal/platform/log/common/logService.d.ts +30 -0
- package/dist/src/_internal/platform/log/common/logService.d.ts.map +1 -1
- package/dist/src/_internal/platform/log/common/logService.js.map +1 -1
- package/dist/src/_internal/platform/nesFetch/node/completionsFetchServiceImpl.d.ts +5 -1
- package/dist/src/_internal/platform/nesFetch/node/completionsFetchServiceImpl.d.ts.map +1 -1
- package/dist/src/_internal/platform/nesFetch/node/completionsFetchServiceImpl.js +121 -6
- package/dist/src/_internal/platform/nesFetch/node/completionsFetchServiceImpl.js.map +1 -1
- package/dist/src/_internal/platform/nesFetch/node/streamTransformer.d.ts +1 -4
- package/dist/src/_internal/platform/nesFetch/node/streamTransformer.d.ts.map +1 -1
- package/dist/src/_internal/platform/nesFetch/node/streamTransformer.js +1 -21
- package/dist/src/_internal/platform/nesFetch/node/streamTransformer.js.map +1 -1
- package/dist/src/_internal/platform/networking/common/anthropic.d.ts +16 -1
- package/dist/src/_internal/platform/networking/common/anthropic.d.ts.map +1 -1
- package/dist/src/_internal/platform/networking/common/anthropic.js +37 -4
- package/dist/src/_internal/platform/networking/common/anthropic.js.map +1 -1
- package/dist/src/_internal/platform/networking/common/fetch.d.ts +5 -2
- package/dist/src/_internal/platform/networking/common/fetch.d.ts.map +1 -1
- package/dist/src/_internal/platform/networking/common/fetch.js +9 -0
- package/dist/src/_internal/platform/networking/common/fetch.js.map +1 -1
- package/dist/src/_internal/platform/networking/common/fetcherService.d.ts +1 -0
- package/dist/src/_internal/platform/networking/common/fetcherService.d.ts.map +1 -1
- package/dist/src/_internal/platform/networking/common/fetcherService.js.map +1 -1
- package/dist/src/_internal/platform/networking/common/networking.d.ts +17 -15
- package/dist/src/_internal/platform/networking/common/networking.d.ts.map +1 -1
- package/dist/src/_internal/platform/networking/common/networking.js +5 -4
- package/dist/src/_internal/platform/networking/common/networking.js.map +1 -1
- package/dist/src/_internal/platform/networking/common/openai.d.ts +11 -0
- package/dist/src/_internal/platform/networking/common/openai.d.ts.map +1 -1
- package/dist/src/_internal/platform/networking/common/openai.js +3 -1
- package/dist/src/_internal/platform/networking/common/openai.js.map +1 -1
- package/dist/src/_internal/platform/requestLogger/common/capturingToken.d.ts +35 -1
- package/dist/src/_internal/platform/requestLogger/common/capturingToken.d.ts.map +1 -1
- package/dist/src/_internal/platform/requestLogger/common/capturingToken.js +21 -1
- package/dist/src/_internal/platform/requestLogger/common/capturingToken.js.map +1 -1
- package/dist/src/_internal/platform/requestLogger/node/requestLogger.d.ts +35 -0
- package/dist/src/_internal/platform/requestLogger/node/requestLogger.d.ts.map +1 -1
- package/dist/src/_internal/platform/requestLogger/node/requestLogger.js +54 -1
- package/dist/src/_internal/platform/requestLogger/node/requestLogger.js.map +1 -1
- package/dist/src/_internal/platform/telemetry/common/telemetry.d.ts +2 -0
- package/dist/src/_internal/platform/telemetry/common/telemetry.d.ts.map +1 -1
- package/dist/src/_internal/platform/telemetry/common/telemetry.js +1 -0
- package/dist/src/_internal/platform/telemetry/common/telemetry.js.map +1 -1
- package/dist/src/_internal/platform/telemetry/common/telemetryData.d.ts.map +1 -1
- package/dist/src/_internal/platform/telemetry/common/telemetryData.js +3 -0
- package/dist/src/_internal/platform/telemetry/common/telemetryData.js.map +1 -1
- package/dist/src/_internal/platform/terminal/common/terminalService.d.ts +111 -0
- package/dist/src/_internal/platform/terminal/common/terminalService.d.ts.map +1 -0
- package/dist/src/_internal/platform/terminal/common/terminalService.js +83 -0
- package/dist/src/_internal/platform/terminal/common/terminalService.js.map +1 -0
- package/dist/src/_internal/util/common/arrays.d.ts +5 -0
- package/dist/src/_internal/util/common/arrays.d.ts.map +1 -1
- package/dist/src/_internal/util/common/arrays.js +10 -0
- package/dist/src/_internal/util/common/arrays.js.map +1 -1
- package/dist/src/_internal/util/common/asyncIterableUtils.d.ts +17 -0
- package/dist/src/_internal/util/common/asyncIterableUtils.d.ts.map +1 -0
- package/dist/src/_internal/util/common/asyncIterableUtils.js +94 -0
- package/dist/src/_internal/util/common/asyncIterableUtils.js.map +1 -0
- package/dist/src/_internal/util/common/result.d.ts +34 -10
- package/dist/src/_internal/util/common/result.d.ts.map +1 -1
- package/dist/src/_internal/util/common/result.js +91 -2
- package/dist/src/_internal/util/common/result.js.map +1 -1
- package/dist/src/_internal/util/common/test/shims/chatTypes.d.ts +27 -3
- package/dist/src/_internal/util/common/test/shims/chatTypes.d.ts.map +1 -1
- package/dist/src/_internal/util/common/test/shims/chatTypes.js +36 -5
- package/dist/src/_internal/util/common/test/shims/chatTypes.js.map +1 -1
- package/dist/src/_internal/util/common/test/shims/themes.d.ts +13 -0
- package/dist/src/_internal/util/common/test/shims/themes.d.ts.map +1 -0
- package/dist/src/_internal/util/common/test/shims/themes.js +27 -0
- package/dist/src/_internal/util/common/test/shims/themes.js.map +1 -0
- package/dist/src/_internal/util/common/test/shims/vscodeTypesShim.d.ts.map +1 -1
- package/dist/src/_internal/util/common/test/shims/vscodeTypesShim.js +5 -1
- package/dist/src/_internal/util/common/test/shims/vscodeTypesShim.js.map +1 -1
- package/dist/src/_internal/util/vs/base/common/mime.d.ts.map +1 -1
- package/dist/src/_internal/util/vs/base/common/mime.js +7 -5
- package/dist/src/_internal/util/vs/base/common/mime.js.map +1 -1
- package/dist/src/_internal/vscodeTypes.d.ts +4 -0
- package/dist/src/_internal/vscodeTypes.d.ts.map +1 -1
- package/dist/src/_internal/vscodeTypes.js +6 -2
- package/dist/src/_internal/vscodeTypes.js.map +1 -1
- package/dist/src/main.d.ts +4 -1
- package/dist/src/main.d.ts.map +1 -1
- package/dist/src/main.js +10 -1
- package/dist/src/main.js.map +1 -1
- package/dist/src/package.json +560 -207
- 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");
|
|
@@ -87,8 +95,10 @@ const importFiltering_1 = require("../../inlineEdits/node/importFiltering");
|
|
|
87
95
|
const inlineSuggestion_1 = require("../common/inlineSuggestion");
|
|
88
96
|
const lintErrors_1 = require("../common/lintErrors");
|
|
89
97
|
const promptCrafting_1 = require("../common/promptCrafting");
|
|
98
|
+
const promptCraftingUtils_1 = require("../common/promptCraftingUtils");
|
|
90
99
|
const systemMessages_1 = require("../common/systemMessages");
|
|
91
100
|
const tags_1 = require("../common/tags");
|
|
101
|
+
const terminalOutput_1 = require("../common/terminalOutput");
|
|
92
102
|
const xtabCurrentDocument_1 = require("../common/xtabCurrentDocument");
|
|
93
103
|
const xtabCustomDiffPatchResponseHandler_1 = require("./xtabCustomDiffPatchResponseHandler");
|
|
94
104
|
const xtabEndpoint_1 = require("./xtabEndpoint");
|
|
@@ -123,9 +133,9 @@ let XtabProvider = class XtabProvider {
|
|
|
123
133
|
this.langDiagService = langDiagService;
|
|
124
134
|
this.ignoreService = ignoreService;
|
|
125
135
|
this.ID = XtabProvider_1.ID;
|
|
126
|
-
this.showNextEditPreference = "always" /* ShowNextEditPreference.Always */;
|
|
127
136
|
this.forceUseDefaultModel = false;
|
|
128
|
-
this.userInteractionMonitor =
|
|
137
|
+
this.userInteractionMonitor = this.instaService.createInstance(userInteractionMonitor_1.UserInteractionMonitor);
|
|
138
|
+
this.terminalMonitor = this.instaService.createInstance(terminalOutput_1.TerminalMonitor);
|
|
129
139
|
this.nextCursorPredictor = this.instaService.createInstance(xtabNextCursorPredictor_1.XtabNextCursorPredictor, XtabProvider_1.computeTokens);
|
|
130
140
|
}
|
|
131
141
|
handleAcceptance() {
|
|
@@ -134,46 +144,34 @@ let XtabProvider = class XtabProvider {
|
|
|
134
144
|
handleRejection() {
|
|
135
145
|
this.userInteractionMonitor.handleRejection();
|
|
136
146
|
}
|
|
137
|
-
|
|
138
|
-
|
|
147
|
+
handleIgnored() {
|
|
148
|
+
this.userInteractionMonitor.handleIgnored();
|
|
149
|
+
}
|
|
150
|
+
async *provideNextEdit(request, logger, logContext, cancellationToken) {
|
|
151
|
+
const telemetry = new statelessNextEditProvider_1.StatelessNextEditTelemetryBuilder(request.headerRequestId);
|
|
139
152
|
logContext.setProviderStartTime();
|
|
140
153
|
try {
|
|
141
154
|
if (request.xtabEditHistory.length === 0) {
|
|
142
|
-
|
|
155
|
+
const noSuggestionReason = new statelessNextEditProvider_1.NoNextEditReason.ActiveDocumentHasNoEdits();
|
|
156
|
+
return new statelessNextEditProvider_1.WithStatelessProviderTelemetry(noSuggestionReason, telemetry.build(result_1.Result.error(noSuggestionReason)));
|
|
143
157
|
}
|
|
144
158
|
const delaySession = this.userInteractionMonitor.createDelaySession(request.providerRequestStartDateTime);
|
|
145
159
|
const iterator = this.doGetNextEdit(request, delaySession, logger, logContext, cancellationToken, telemetry, RetryState.NotRetrying.INSTANCE);
|
|
146
160
|
let res = await iterator.next(); // for-async-await loop doesn't work because we need to access the final return value
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
nextEditResult = result_1.Result.error(res.value);
|
|
151
|
-
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();
|
|
152
164
|
}
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
nextEditResult = result_1.Result.ok(undefined);
|
|
156
|
-
(async () => {
|
|
157
|
-
let nEdits = 0;
|
|
158
|
-
while (!res.done) {
|
|
159
|
-
nEdits++;
|
|
160
|
-
pushEdit(result_1.Result.ok(res.value));
|
|
161
|
-
res = await iterator.next();
|
|
162
|
-
}
|
|
163
|
-
pushEdit(result_1.Result.error(res.value));
|
|
164
|
-
})().catch((err) => {
|
|
165
|
-
const error = errors.fromUnknown(err);
|
|
166
|
-
logContext.addLog(`Error while streaming further edits: ${errors.fromUnknown(err)}`);
|
|
167
|
-
pushEdit(result_1.Result.error(new statelessNextEditProvider_1.NoNextEditReason.Unexpected(error)));
|
|
168
|
-
});
|
|
169
|
-
}
|
|
170
|
-
if (nextEditResult.isError() && nextEditResult.err instanceof statelessNextEditProvider_1.NoNextEditReason.GotCancelled) {
|
|
165
|
+
const noNextEditReason = res.value;
|
|
166
|
+
if (noNextEditReason instanceof statelessNextEditProvider_1.NoNextEditReason.GotCancelled) {
|
|
171
167
|
logContext.setIsSkipped();
|
|
172
168
|
}
|
|
173
|
-
return new statelessNextEditProvider_1.
|
|
169
|
+
return new statelessNextEditProvider_1.WithStatelessProviderTelemetry(noNextEditReason, telemetry.build(result_1.Result.error(noNextEditReason)));
|
|
174
170
|
}
|
|
175
171
|
catch (err) {
|
|
176
|
-
|
|
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)));
|
|
177
175
|
}
|
|
178
176
|
finally {
|
|
179
177
|
logContext.setProviderEndTime();
|
|
@@ -182,7 +180,13 @@ let XtabProvider = class XtabProvider {
|
|
|
182
180
|
doGetNextEdit(request, delaySession, logger, logContext, cancellationToken, telemetryBuilder, retryState) {
|
|
183
181
|
return this.doGetNextEditWithSelection(request, (0, nearbyCursorInlineEditProvider_1.getOrDeduceSelectionFromLastEdit)(request.getActiveDocument()), delaySession, logger, logContext, cancellationToken, telemetryBuilder, retryState);
|
|
184
182
|
}
|
|
185
|
-
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) {
|
|
186
190
|
const tracer = parentTracer.createSubLogger(['XtabProvider', 'doGetNextEditWithSelection']);
|
|
187
191
|
const activeDocument = request.getActiveDocument();
|
|
188
192
|
if (selection === null) {
|
|
@@ -213,14 +217,14 @@ let XtabProvider = class XtabProvider {
|
|
|
213
217
|
else {
|
|
214
218
|
tracer.trace('No extra debounce applied');
|
|
215
219
|
}
|
|
216
|
-
const areaAroundEditWindowLinesRange =
|
|
220
|
+
const areaAroundEditWindowLinesRange = computeAreaAroundEditWindowLinesRange(currentDocument);
|
|
217
221
|
const editWindowLinesRange = this.computeEditWindowLinesRange(currentDocument, request, tracer, telemetryBuilder);
|
|
218
222
|
const cursorOriginalLinesOffset = Math.max(0, currentDocument.cursorLineOffset - editWindowLinesRange.start);
|
|
219
223
|
const editWindowLastLineLength = currentDocument.transformer.getLineLength(editWindowLinesRange.endExclusive);
|
|
220
224
|
const editWindow = currentDocument.transformer.getOffsetRange(new range_1.Range(editWindowLinesRange.start + 1, 1, editWindowLinesRange.endExclusive, editWindowLastLineLength + 1));
|
|
221
225
|
const editWindowLines = currentDocument.lines.slice(editWindowLinesRange.start, editWindowLinesRange.endExclusive);
|
|
222
226
|
const editWindowTokenLimit = this.configService.getExperimentBasedConfig(configurationService_1.ConfigKey.TeamInternal.InlineEditsXtabEditWindowMaxTokens, this.expService);
|
|
223
|
-
if (editWindowTokenLimit !== undefined && (0,
|
|
227
|
+
if (editWindowTokenLimit !== undefined && (0, promptCraftingUtils_1.countTokensForLines)(editWindowLines, XtabProvider_1.computeTokens) > editWindowTokenLimit) {
|
|
224
228
|
return new statelessNextEditProvider_1.NoNextEditReason.PromptTooLarge('editWindow');
|
|
225
229
|
}
|
|
226
230
|
// Expected: editWindow.substring(activeDocument.documentAfterEdits.value) === editWindowLines.join('\n')
|
|
@@ -238,8 +242,8 @@ let XtabProvider = class XtabProvider {
|
|
|
238
242
|
const { clippedTaggedCurrentDoc, areaAroundCodeToEdit } = taggedCurrentFileContentResult.val;
|
|
239
243
|
telemetryBuilder.setNLinesOfCurrentFileInPrompt(clippedTaggedCurrentDoc.lines.length);
|
|
240
244
|
const { aggressivenessLevel, userHappinessScore } = this.userInteractionMonitor.getAggressivenessLevel();
|
|
241
|
-
// Log aggressiveness level and user happiness score when using
|
|
242
|
-
if (
|
|
245
|
+
// Log aggressiveness level and user happiness score when using an aggressiveness-aware prompting strategy
|
|
246
|
+
if ((0, xtabPromptOptions_1.isAggressivenessStrategy)(promptOptions.promptingStrategy)) {
|
|
243
247
|
telemetryBuilder.setXtabAggressivenessLevel(aggressivenessLevel);
|
|
244
248
|
if (userHappinessScore !== undefined) {
|
|
245
249
|
telemetryBuilder.setXtabUserHappinessScore(userHappinessScore);
|
|
@@ -249,13 +253,13 @@ let XtabProvider = class XtabProvider {
|
|
|
249
253
|
if (cancellationToken.isCancellationRequested) {
|
|
250
254
|
return new statelessNextEditProvider_1.NoNextEditReason.GotCancelled('afterLanguageContextAwait');
|
|
251
255
|
}
|
|
252
|
-
const lintErrors =
|
|
256
|
+
const lintErrors = new lintErrors_1.LintErrors(activeDocument.id, currentDocument, this.langDiagService);
|
|
253
257
|
const promptPieces = new promptCrafting_1.PromptPieces(currentDocument, editWindowLinesRange, areaAroundEditWindowLinesRange, activeDocument, request.xtabEditHistory, clippedTaggedCurrentDoc.lines, areaAroundCodeToEdit, langCtx, aggressivenessLevel, lintErrors, XtabProvider_1.computeTokens, promptOptions);
|
|
254
258
|
const userPrompt = (0, promptCrafting_1.getUserPrompt)(promptPieces);
|
|
255
259
|
const responseFormat = xtabPromptOptions.ResponseFormat.fromPromptingStrategy(promptOptions.promptingStrategy);
|
|
256
260
|
const prediction = this.getPredictedOutput(activeDocument, editWindowLines, responseFormat);
|
|
257
261
|
const messages = (0, xtabUtils_1.constructMessages)({
|
|
258
|
-
systemMsg:
|
|
262
|
+
systemMsg: pickSystemPrompt(promptOptions.promptingStrategy),
|
|
259
263
|
userMsg: userPrompt,
|
|
260
264
|
});
|
|
261
265
|
logContext.setPrompt(messages);
|
|
@@ -269,13 +273,24 @@ let XtabProvider = class XtabProvider {
|
|
|
269
273
|
if (cancellationToken.isCancellationRequested) {
|
|
270
274
|
return new statelessNextEditProvider_1.NoNextEditReason.GotCancelled('afterDebounce');
|
|
271
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
|
+
});
|
|
272
285
|
request.fetchIssued = true;
|
|
273
286
|
const cursorLineOffset = cursorPosition.column;
|
|
274
287
|
return yield* this.streamEditsWithFiltering(request, endpoint, messages, editWindow, editWindowLines, cursorOriginalLinesOffset, cursorLineOffset, editWindowLinesRange, promptPieces, prediction, {
|
|
275
288
|
shouldRemoveCursorTagFromResponse,
|
|
276
289
|
responseFormat,
|
|
277
290
|
retryState,
|
|
278
|
-
|
|
291
|
+
aggressivenessLevel,
|
|
292
|
+
userHappinessScore,
|
|
293
|
+
}, delaySession, tracer, telemetryBuilder, logContext, cancellationToken, originalEditWindow);
|
|
279
294
|
}
|
|
280
295
|
getAndProcessLanguageContext(request, delaySession, activeDocument, cursorPosition, promptOptions, tracer, logContext, cancellationToken) {
|
|
281
296
|
const recordingEnabled = this.configService.getConfig(configurationService_1.ConfigKey.TeamInternal.InlineEditsLogContextRecorderEnabled);
|
|
@@ -285,7 +300,6 @@ let XtabProvider = class XtabProvider {
|
|
|
285
300
|
const langCtxPromise = this.getLanguageContext(request, delaySession, activeDocument, cursorPosition, tracer, logContext, cancellationToken);
|
|
286
301
|
// if recording, add diagnostics for the file to the recording and hook up the language context promise to write to the recording
|
|
287
302
|
if (recordingEnabled) {
|
|
288
|
-
logContext.setFileDiagnostics(this.langDiagService.getAllDiagnostics());
|
|
289
303
|
langCtxPromise.then(langCtxs => {
|
|
290
304
|
if (langCtxs) {
|
|
291
305
|
logContext.setLanguageContext(langCtxs);
|
|
@@ -310,7 +324,7 @@ let XtabProvider = class XtabProvider {
|
|
|
310
324
|
const cursorPositionVscode = new vscodeTypesShim_1.Position(cursorPosition.lineNumber - 1, cursorPosition.column - 1);
|
|
311
325
|
const ctxRequest = {
|
|
312
326
|
opportunityId: request.opportunityId,
|
|
313
|
-
completionId: request.
|
|
327
|
+
completionId: request.headerRequestId,
|
|
314
328
|
documentContext: {
|
|
315
329
|
uri: textDoc.uri.toString(),
|
|
316
330
|
languageId: textDoc.languageId,
|
|
@@ -359,9 +373,9 @@ let XtabProvider = class XtabProvider {
|
|
|
359
373
|
}
|
|
360
374
|
}
|
|
361
375
|
async *streamEditsWithFiltering(request, endpoint, messages, editWindow, editWindowLines, cursorOriginalLinesOffset, cursorLineOffset, // cursor offset within the line it's in; 1-based
|
|
362
|
-
editWindowLineRange, promptPieces, prediction, opts, delaySession, parentTracer, telemetryBuilder, logContext, cancellationToken) {
|
|
376
|
+
editWindowLineRange, promptPieces, prediction, opts, delaySession, parentTracer, telemetryBuilder, logContext, cancellationToken, originalEditWindow) {
|
|
363
377
|
const tracer = parentTracer.createSubLogger('streamEditsWithFiltering');
|
|
364
|
-
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);
|
|
365
379
|
let nEdits = 0;
|
|
366
380
|
let r = await iterator.next();
|
|
367
381
|
while (!r.done) {
|
|
@@ -386,7 +400,7 @@ let XtabProvider = class XtabProvider {
|
|
|
386
400
|
return r.value;
|
|
387
401
|
}
|
|
388
402
|
async *streamEdits(request, endpoint, messages, editWindow, editWindowLines, cursorOriginalLinesOffset, cursorLineOffset, // cursor offset within the line it's in; 1-based
|
|
389
|
-
editWindowLineRange, promptPieces, prediction, opts, delaySession, parentTracer, telemetryBuilder, logContext, cancellationToken) {
|
|
403
|
+
editWindowLineRange, promptPieces, prediction, opts, delaySession, parentTracer, telemetryBuilder, logContext, cancellationToken, originalEditWindow) {
|
|
390
404
|
const tracer = parentTracer.createSubLogger('streamEdits');
|
|
391
405
|
const useFetcher = this.configService.getExperimentBasedConfig(configurationService_1.ConfigKey.NextEditSuggestionsFetcher, this.expService) || undefined;
|
|
392
406
|
const fetchStreamSource = new chatMLFetcher_1.FetchStreamSource();
|
|
@@ -395,6 +409,7 @@ let XtabProvider = class XtabProvider {
|
|
|
395
409
|
let chatResponseFailure;
|
|
396
410
|
let ttft;
|
|
397
411
|
const firstTokenReceived = new async_2.DeferredPromise();
|
|
412
|
+
logContext.setHeaderRequestId(request.headerRequestId);
|
|
398
413
|
telemetryBuilder.setFetchStartedAt();
|
|
399
414
|
logContext.setFetchStartTime();
|
|
400
415
|
// we must not await this promise because we want to stream edits as they come in
|
|
@@ -423,9 +438,13 @@ let XtabProvider = class XtabProvider {
|
|
|
423
438
|
},
|
|
424
439
|
userInitiatedRequest: undefined,
|
|
425
440
|
telemetryProperties: {
|
|
426
|
-
requestId: request.
|
|
441
|
+
requestId: request.headerRequestId,
|
|
427
442
|
},
|
|
428
443
|
useFetcher,
|
|
444
|
+
customMetadata: {
|
|
445
|
+
aggressivenessLevel: opts.aggressivenessLevel,
|
|
446
|
+
userHappinessScore: opts.userHappinessScore,
|
|
447
|
+
},
|
|
429
448
|
}, cancellationToken);
|
|
430
449
|
telemetryBuilder.setResponse(fetchResultPromise.then((response) => ({ response, ttft })));
|
|
431
450
|
logContext.setFullResponse(fetchResultPromise.then((response) => response.type === commonTypes_1.ChatFetchResponseType.Success ? response.value : undefined));
|
|
@@ -437,7 +456,7 @@ let XtabProvider = class XtabProvider {
|
|
|
437
456
|
this.forceUseDefaultModel = true;
|
|
438
457
|
return yield* this.doGetNextEdit(request, delaySession, tracer, logContext, cancellationToken, telemetryBuilder, opts.retryState); // use the same retry state
|
|
439
458
|
}
|
|
440
|
-
return
|
|
459
|
+
return mapChatFetcherErrorToNoNextEditReason(fetchRes);
|
|
441
460
|
}
|
|
442
461
|
fetchResultPromise
|
|
443
462
|
.then((response) => {
|
|
@@ -457,26 +476,47 @@ let XtabProvider = class XtabProvider {
|
|
|
457
476
|
fetchStreamSource.resolve();
|
|
458
477
|
logContext.setResponse(responseSoFar);
|
|
459
478
|
});
|
|
460
|
-
const llmLinesStream = (
|
|
479
|
+
const llmLinesStream = asyncIterableUtils_1.AsyncIterUtilsExt.splitLines(asyncIterableUtils_1.AsyncIterUtils.map(fetchStreamSource.stream, (chunk) => chunk.delta.text));
|
|
461
480
|
// logging of times
|
|
462
481
|
// removal of cursor tag if option is set
|
|
463
|
-
const linesStream = (()
|
|
482
|
+
const linesStream = (async function* () {
|
|
464
483
|
let i = 0;
|
|
465
|
-
|
|
484
|
+
for await (const v of llmLinesStream) {
|
|
466
485
|
const trace = `Line ${i++} emitted with latency ${fetchRequestStopWatch.elapsed()} ms`;
|
|
467
486
|
tracer.trace(trace);
|
|
468
|
-
|
|
487
|
+
yield opts.shouldRemoveCursorTagFromResponse
|
|
469
488
|
? v.replaceAll(tags_1.PromptTags.CURSOR, '')
|
|
470
489
|
: v;
|
|
471
|
-
}
|
|
490
|
+
}
|
|
472
491
|
})();
|
|
473
492
|
const isFromCursorJump = opts.retryState instanceof RetryState.Retrying && opts.retryState.reason === 'cursorJump';
|
|
474
493
|
let cleanedLinesStream;
|
|
475
494
|
if (opts.responseFormat === xtabPromptOptions.ResponseFormat.EditWindowOnly) {
|
|
476
495
|
cleanedLinesStream = linesStream;
|
|
477
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
|
+
}
|
|
478
518
|
else if (opts.responseFormat === xtabPromptOptions.ResponseFormat.CustomDiffPatch) {
|
|
479
|
-
return yield* xtabCustomDiffPatchResponseHandler_1.XtabCustomDiffPatchResponseHandler.handleResponse(linesStream, request.documentBeforeEdits, editWindow);
|
|
519
|
+
return yield* xtabCustomDiffPatchResponseHandler_1.XtabCustomDiffPatchResponseHandler.handleResponse(linesStream, request.documentBeforeEdits, editWindow, originalEditWindow);
|
|
480
520
|
}
|
|
481
521
|
else if (opts.responseFormat === xtabPromptOptions.ResponseFormat.UnifiedWithXml) {
|
|
482
522
|
const linesIter = linesStream[Symbol.asyncIterator]();
|
|
@@ -497,7 +537,7 @@ let XtabProvider = class XtabProvider {
|
|
|
497
537
|
return new statelessNextEditProvider_1.NoNextEditReason.NoSuggestions(request.documentBeforeEdits, editWindow);
|
|
498
538
|
}
|
|
499
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)]);
|
|
500
|
-
yield { edit, isFromCursorJump, window: editWindow };
|
|
540
|
+
yield { edit, isFromCursorJump, window: editWindow, originalWindow: originalEditWindow };
|
|
501
541
|
const lines = [];
|
|
502
542
|
let v = await linesIter.next();
|
|
503
543
|
while (!v.done) {
|
|
@@ -513,21 +553,22 @@ let XtabProvider = class XtabProvider {
|
|
|
513
553
|
yield {
|
|
514
554
|
edit: new lineEdit_1.LineReplacement(new lineRange_1.LineRange(line, line), lines),
|
|
515
555
|
isFromCursorJump,
|
|
516
|
-
window: editWindow
|
|
556
|
+
window: editWindow,
|
|
557
|
+
originalWindow: originalEditWindow
|
|
517
558
|
};
|
|
518
559
|
return new statelessNextEditProvider_1.NoNextEditReason.NoSuggestions(request.documentBeforeEdits, editWindow);
|
|
519
560
|
}
|
|
520
561
|
if (trimmedLines === tags_1.ResponseTags.EDIT.start) {
|
|
521
|
-
cleanedLinesStream =
|
|
562
|
+
cleanedLinesStream = (async function* () {
|
|
522
563
|
let v = await linesIter.next();
|
|
523
564
|
while (!v.done) {
|
|
524
565
|
if (v.value.includes(tags_1.ResponseTags.EDIT.end)) {
|
|
525
566
|
return;
|
|
526
567
|
}
|
|
527
|
-
|
|
568
|
+
yield v.value;
|
|
528
569
|
v = await linesIter.next();
|
|
529
570
|
}
|
|
530
|
-
});
|
|
571
|
+
})();
|
|
531
572
|
}
|
|
532
573
|
else {
|
|
533
574
|
return new statelessNextEditProvider_1.NoNextEditReason.Unexpected(new Error(`unexpected tag ${trimmedLines}`));
|
|
@@ -589,12 +630,12 @@ let XtabProvider = class XtabProvider {
|
|
|
589
630
|
}
|
|
590
631
|
}
|
|
591
632
|
}
|
|
592
|
-
yield { edit: singleLineEdit, isFromCursorJump, window: editWindow };
|
|
633
|
+
yield { edit: singleLineEdit, isFromCursorJump, window: editWindow, originalWindow: originalEditWindow };
|
|
593
634
|
i++;
|
|
594
635
|
}
|
|
595
636
|
}
|
|
596
637
|
if (chatResponseFailure) {
|
|
597
|
-
return
|
|
638
|
+
return mapChatFetcherErrorToNoNextEditReason(chatResponseFailure);
|
|
598
639
|
}
|
|
599
640
|
return new statelessNextEditProvider_1.NoNextEditReason.NoSuggestions(request.documentBeforeEdits, editWindow);
|
|
600
641
|
}
|
|
@@ -642,7 +683,7 @@ let XtabProvider = class XtabProvider {
|
|
|
642
683
|
return new statelessNextEditProvider_1.NoNextEditReason.NoSuggestions(request.documentBeforeEdits, editWindow, nextCursorPosition);
|
|
643
684
|
}
|
|
644
685
|
case nextCursorLinePrediction_1.NextCursorLinePrediction.OnlyWithEdit: {
|
|
645
|
-
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);
|
|
646
687
|
return yield* v;
|
|
647
688
|
}
|
|
648
689
|
default: {
|
|
@@ -650,12 +691,6 @@ let XtabProvider = class XtabProvider {
|
|
|
650
691
|
}
|
|
651
692
|
}
|
|
652
693
|
}
|
|
653
|
-
computeAreaAroundEditWindowLinesRange(currentDocument) {
|
|
654
|
-
const cursorLine = currentDocument.cursorLineOffset;
|
|
655
|
-
const areaAroundStart = Math.max(0, cursorLine - promptCrafting_1.N_LINES_AS_CONTEXT);
|
|
656
|
-
const areaAroundEndExcl = Math.min(currentDocument.lines.length, cursorLine + promptCrafting_1.N_LINES_AS_CONTEXT + 1);
|
|
657
|
-
return new offsetRange_1.OffsetRange(areaAroundStart, areaAroundEndExcl);
|
|
658
|
-
}
|
|
659
694
|
computeEditWindowLinesRange(currentDocument, request, tracer, telemetry) {
|
|
660
695
|
const currentDocLines = currentDocument.lines;
|
|
661
696
|
const cursorLineOffset = currentDocument.cursorLineOffset;
|
|
@@ -718,29 +753,6 @@ let XtabProvider = class XtabProvider {
|
|
|
718
753
|
}
|
|
719
754
|
return new offsetRange_1.OffsetRange(codeToEditStart, codeToEditEndExcl);
|
|
720
755
|
}
|
|
721
|
-
static mapChatFetcherErrorToNoNextEditReason(fetchError) {
|
|
722
|
-
switch (fetchError.type) {
|
|
723
|
-
case commonTypes_1.ChatFetchResponseType.Canceled:
|
|
724
|
-
return new statelessNextEditProvider_1.NoNextEditReason.GotCancelled('afterFetchCall');
|
|
725
|
-
case commonTypes_1.ChatFetchResponseType.OffTopic:
|
|
726
|
-
case commonTypes_1.ChatFetchResponseType.Filtered:
|
|
727
|
-
case commonTypes_1.ChatFetchResponseType.PromptFiltered:
|
|
728
|
-
case commonTypes_1.ChatFetchResponseType.Length:
|
|
729
|
-
case commonTypes_1.ChatFetchResponseType.RateLimited:
|
|
730
|
-
case commonTypes_1.ChatFetchResponseType.QuotaExceeded:
|
|
731
|
-
case commonTypes_1.ChatFetchResponseType.ExtensionBlocked:
|
|
732
|
-
case commonTypes_1.ChatFetchResponseType.AgentUnauthorized:
|
|
733
|
-
case commonTypes_1.ChatFetchResponseType.AgentFailedDependency:
|
|
734
|
-
case commonTypes_1.ChatFetchResponseType.InvalidStatefulMarker:
|
|
735
|
-
return new statelessNextEditProvider_1.NoNextEditReason.Uncategorized(errors.fromUnknown(fetchError));
|
|
736
|
-
case commonTypes_1.ChatFetchResponseType.BadRequest:
|
|
737
|
-
case commonTypes_1.ChatFetchResponseType.NotFound:
|
|
738
|
-
case commonTypes_1.ChatFetchResponseType.Failed:
|
|
739
|
-
case commonTypes_1.ChatFetchResponseType.NetworkError:
|
|
740
|
-
case commonTypes_1.ChatFetchResponseType.Unknown:
|
|
741
|
-
return new statelessNextEditProvider_1.NoNextEditReason.FetchFailure(errors.fromUnknown(fetchError));
|
|
742
|
-
}
|
|
743
|
-
}
|
|
744
756
|
determineModelConfiguration(activeDocument) {
|
|
745
757
|
if (this.forceUseDefaultModel) {
|
|
746
758
|
const defaultOptions = {
|
|
@@ -748,7 +760,7 @@ let XtabProvider = class XtabProvider {
|
|
|
748
760
|
...xtabPromptOptions.DEFAULT_OPTIONS,
|
|
749
761
|
};
|
|
750
762
|
const defaultModelConfig = this.modelService.defaultModelConfiguration();
|
|
751
|
-
return
|
|
763
|
+
return overrideModelConfig(defaultOptions, defaultModelConfig);
|
|
752
764
|
}
|
|
753
765
|
const sourcedModelConfig = {
|
|
754
766
|
modelName: undefined,
|
|
@@ -768,8 +780,9 @@ let XtabProvider = class XtabProvider {
|
|
|
768
780
|
maxTokens: this.configService.getExperimentBasedConfig(configurationService_1.ConfigKey.TeamInternal.InlineEditsXtabRecentlyViewedDocumentsMaxTokens, this.expService),
|
|
769
781
|
includeViewedFiles: this.configService.getExperimentBasedConfig(configurationService_1.ConfigKey.TeamInternal.InlineEditsXtabIncludeViewedFiles, this.expService),
|
|
770
782
|
includeLineNumbers: this.configService.getExperimentBasedConfig(configurationService_1.ConfigKey.TeamInternal.InlineEditsXtabRecentlyViewedIncludeLineNumbers, this.expService),
|
|
783
|
+
clippingStrategy: this.configService.getExperimentBasedConfig(configurationService_1.ConfigKey.TeamInternal.InlineEditsXtabRecentlyViewedClippingStrategy, this.expService),
|
|
771
784
|
},
|
|
772
|
-
languageContext:
|
|
785
|
+
languageContext: determineLanguageContextOptions(activeDocument.languageId, {
|
|
773
786
|
enabled: this.configService.getExperimentBasedConfig(configurationService_1.ConfigKey.TeamInternal.InlineEditsXtabLanguageContextEnabled, this.expService),
|
|
774
787
|
enabledLanguages: this.configService.getConfig(configurationService_1.ConfigKey.TeamInternal.InlineEditsXtabLanguageContextEnabledLanguages),
|
|
775
788
|
enableAllContextProviders: this.configService.getExperimentBasedConfig(configurationService_1.ConfigKey.Advanced.DiagnosticsContextProvider, this.expService)
|
|
@@ -791,49 +804,7 @@ let XtabProvider = class XtabProvider {
|
|
|
791
804
|
const modelConfig = selectedModelConfig.promptingStrategy === xtabPromptOptions.PromptingStrategy.CopilotNesXtab
|
|
792
805
|
? { ...selectedModelConfig, includeTagsInCurrentFile: true }
|
|
793
806
|
: selectedModelConfig;
|
|
794
|
-
return
|
|
795
|
-
}
|
|
796
|
-
static overrideModelConfig(modelConfig, overridingConfig) {
|
|
797
|
-
return {
|
|
798
|
-
...modelConfig,
|
|
799
|
-
modelName: overridingConfig.modelName,
|
|
800
|
-
promptingStrategy: overridingConfig.promptingStrategy,
|
|
801
|
-
currentFile: {
|
|
802
|
-
...modelConfig.currentFile,
|
|
803
|
-
includeTags: overridingConfig.includeTagsInCurrentFile,
|
|
804
|
-
},
|
|
805
|
-
lintOptions: overridingConfig.lintOptions ? { ...modelConfig.lintOptions, ...overridingConfig.lintOptions } : modelConfig.lintOptions,
|
|
806
|
-
};
|
|
807
|
-
}
|
|
808
|
-
pickSystemPrompt(promptingStrategy) {
|
|
809
|
-
switch (promptingStrategy) {
|
|
810
|
-
case xtabPromptOptions.PromptingStrategy.UnifiedModel:
|
|
811
|
-
return systemMessages_1.unifiedModelSystemPrompt;
|
|
812
|
-
case xtabPromptOptions.PromptingStrategy.Codexv21NesUnified:
|
|
813
|
-
case xtabPromptOptions.PromptingStrategy.SimplifiedSystemPrompt:
|
|
814
|
-
return systemMessages_1.simplifiedPrompt;
|
|
815
|
-
case xtabPromptOptions.PromptingStrategy.PatchBased:
|
|
816
|
-
case xtabPromptOptions.PromptingStrategy.PatchBased01:
|
|
817
|
-
case xtabPromptOptions.PromptingStrategy.Xtab275:
|
|
818
|
-
case xtabPromptOptions.PromptingStrategy.XtabAggressiveness:
|
|
819
|
-
return systemMessages_1.xtab275SystemPrompt;
|
|
820
|
-
case xtabPromptOptions.PromptingStrategy.Nes41Miniv3:
|
|
821
|
-
return systemMessages_1.nes41Miniv3SystemPrompt;
|
|
822
|
-
case xtabPromptOptions.PromptingStrategy.CopilotNesXtab:
|
|
823
|
-
case undefined:
|
|
824
|
-
return systemMessages_1.systemPromptTemplate;
|
|
825
|
-
default:
|
|
826
|
-
(0, assert_1.assertNever)(promptingStrategy);
|
|
827
|
-
}
|
|
828
|
-
}
|
|
829
|
-
determineLanguageContextOptions(languageId, { enabled, enabledLanguages, maxTokens, enableAllContextProviders, traitPosition }) {
|
|
830
|
-
if (languageId in enabledLanguages) {
|
|
831
|
-
return { enabled: enabledLanguages[languageId], maxTokens, traitPosition };
|
|
832
|
-
}
|
|
833
|
-
if (enableAllContextProviders) {
|
|
834
|
-
return { enabled: true, maxTokens, traitPosition };
|
|
835
|
-
}
|
|
836
|
-
return { enabled, maxTokens, traitPosition };
|
|
807
|
+
return overrideModelConfig(sourcedModelConfig, modelConfig);
|
|
837
808
|
}
|
|
838
809
|
getEndpoint(configuredModelName) {
|
|
839
810
|
const url = this.configService.getConfig(configurationService_1.ConfigKey.TeamInternal.InlineEditsXtabProviderUrl);
|
|
@@ -845,32 +816,13 @@ let XtabProvider = class XtabProvider {
|
|
|
845
816
|
return (0, proxyXtabEndpoint_1.createProxyXtabEndpoint)(this.instaService, configuredModelName);
|
|
846
817
|
}
|
|
847
818
|
getPredictedOutput(doc, editWindowLines, responseFormat) {
|
|
848
|
-
return this.configService.
|
|
819
|
+
return this.configService.getExperimentBasedConfig(configurationService_1.ConfigKey.TeamInternal.InlineEditsXtabProviderUsePrediction, this.expService)
|
|
849
820
|
? {
|
|
850
821
|
type: 'content',
|
|
851
|
-
content:
|
|
822
|
+
content: getPredictionContents(doc, editWindowLines, responseFormat)
|
|
852
823
|
}
|
|
853
824
|
: undefined;
|
|
854
825
|
}
|
|
855
|
-
getPredictionContents(doc, editWindowLines, responseFormat) {
|
|
856
|
-
if (responseFormat === xtabPromptOptions.ResponseFormat.UnifiedWithXml) {
|
|
857
|
-
return ['<EDIT>', ...editWindowLines, '</EDIT>'].join('\n');
|
|
858
|
-
}
|
|
859
|
-
else if (responseFormat === xtabPromptOptions.ResponseFormat.EditWindowOnly) {
|
|
860
|
-
return editWindowLines.join('\n');
|
|
861
|
-
}
|
|
862
|
-
else if (responseFormat === xtabPromptOptions.ResponseFormat.CodeBlock) {
|
|
863
|
-
return ['```', ...editWindowLines, '```'].join('\n');
|
|
864
|
-
}
|
|
865
|
-
else if (responseFormat === xtabPromptOptions.ResponseFormat.CustomDiffPatch) {
|
|
866
|
-
const workspacePath = doc.workspaceRoot?.path;
|
|
867
|
-
const workspaceRelativeDocPath = (0, promptCrafting_1.toUniquePath)(doc.id, workspacePath);
|
|
868
|
-
return `${workspaceRelativeDocPath}:`;
|
|
869
|
-
}
|
|
870
|
-
else {
|
|
871
|
-
(0, assert_1.assertNever)(responseFormat);
|
|
872
|
-
}
|
|
873
|
-
}
|
|
874
826
|
async debounce(delaySession, retryState, logger, telemetry) {
|
|
875
827
|
if (this.simulationCtx.isInSimulationTests) {
|
|
876
828
|
return;
|
|
@@ -935,6 +887,257 @@ exports.XtabProvider = XtabProvider = XtabProvider_1 = __decorate([
|
|
|
935
887
|
__param(8, languageDiagnosticsService_1.ILanguageDiagnosticsService),
|
|
936
888
|
__param(9, ignoreService_1.IIgnoreService)
|
|
937
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
|
+
}
|
|
938
1141
|
/**
|
|
939
1142
|
* Finds the range of lines containing merge conflict markers within a specified edit window.
|
|
940
1143
|
*
|