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