Path: blob/main/extensions/copilot/src/extension/test/vscode-node/services.ts
13399 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import { CopilotTokenStore, ICopilotTokenStore } from '../../../platform/authentication/common/copilotTokenStore';6import { BlockedExtensionService, IBlockedExtensionService } from '../../../platform/chat/common/blockedExtensionService';7import { IChatMLFetcher } from '../../../platform/chat/common/chatMLFetcher';8import { IChatSessionService } from '../../../platform/chat/common/chatSessionService';9import { TestChatSessionService } from '../../../platform/chat/test/common/testChatSessionService';10import { INaiveChunkingService, NaiveChunkingService } from '../../../platform/chunking/node/naiveChunkerService';11import { MockRunCommandExecutionService } from '../../../platform/commands/common/mockRunCommandExecutionService';12import { IRunCommandExecutionService } from '../../../platform/commands/common/runCommandExecutionService';13import { IConfigurationService } from '../../../platform/configuration/common/configurationService';14import { DefaultsOnlyConfigurationService } from '../../../platform/configuration/common/defaultsOnlyConfigurationService';15import { IDebugOutputService } from '../../../platform/debug/common/debugOutputService';16import { DebugOutputServiceImpl } from '../../../platform/debug/vscode/debugOutputServiceImpl';17import { IDialogService } from '../../../platform/dialog/common/dialogService';18import { IDiffService } from '../../../platform/diff/common/diffService';19import { DiffServiceImpl } from '../../../platform/diff/node/diffServiceImpl';20import { IEmbeddingsComputer } from '../../../platform/embeddings/common/embeddingsComputer';21import { RemoteEmbeddingsComputer } from '../../../platform/embeddings/common/remoteEmbeddingsComputer';22import { ICAPIClientService } from '../../../platform/endpoint/common/capiClient';23import { IDomainService } from '../../../platform/endpoint/common/domainService';24import { IEndpointProvider } from '../../../platform/endpoint/common/endpointProvider';25import { AutomodeService, IAutomodeService } from '../../../platform/endpoint/node/automodeService';26import { CAPIClientImpl } from '../../../platform/endpoint/node/capiClientImpl';27import { DomainService } from '../../../platform/endpoint/node/domainServiceImpl';28import { TestEndpointProvider } from '../../../platform/endpoint/test/node/testEndpointProvider';29import { IEnvService, INativeEnvService } from '../../../platform/env/common/envService';30import { NullNativeEnvService } from '../../../platform/env/common/nullEnvService';31import { EnvServiceImpl } from '../../../platform/env/vscode/envServiceImpl';32import { IVSCodeExtensionContext } from '../../../platform/extContext/common/extensionContext';33import { IExtensionsService } from '../../../platform/extensions/common/extensionsService';34import { VSCodeExtensionsService } from '../../../platform/extensions/vscode/extensionsService';35import { IFileSystemService } from '../../../platform/filesystem/common/fileSystemService';36import { NodeFileSystemService } from '../../../platform/filesystem/node/fileSystemServiceImpl';37import { IGitDiffService } from '../../../platform/git/common/gitDiffService';38import { IGitExtensionService } from '../../../platform/git/common/gitExtensionService';39import { IGitService } from '../../../platform/git/common/gitService';40import { GitServiceImpl } from '../../../platform/git/vscode-node/gitServiceImpl';41import { GitExtensionServiceImpl } from '../../../platform/git/vscode/gitExtensionServiceImpl';42import { IOctoKitService } from '../../../platform/github/common/githubService';43import { OctoKitService } from '../../../platform/github/common/octoKitServiceImpl';44import { IIgnoreService, NullIgnoreService } from '../../../platform/ignore/common/ignoreService';45import { IImageService, nullImageService } from '../../../platform/image/common/imageService';46import { IInlineEditsModelService, IUndesiredModelsManager } from '../../../platform/inlineEdits/common/inlineEditsModelService';47import { InlineEditsModelService, UndesiredModels } from '../../../platform/inlineEdits/node/inlineEditsModelService';48import { ILanguageDiagnosticsService } from '../../../platform/languages/common/languageDiagnosticsService';49import { ILanguageFeaturesService, NoopLanguageFeaturesService } from '../../../platform/languages/common/languageFeaturesService';50import { LanguageDiagnosticsServiceImpl } from '../../../platform/languages/vscode/languageDiagnosticsServiceImpl';51import { IMcpService, NullMcpService } from '../../../platform/mcp/common/mcpService';52import { EditLogService, IEditLogService } from '../../../platform/multiFileEdit/common/editLogService';53import { IMultiFileEditInternalTelemetryService, MultiFileEditInternalTelemetryService } from '../../../platform/multiFileEdit/common/multiFileEditQualityTelemetry';54import { ICompletionsFetchService } from '../../../platform/nesFetch/common/completionsFetchService';55import { CompletionsFetchService } from '../../../platform/nesFetch/node/completionsFetchServiceImpl';56import { IChatWebSocketManager, NullChatWebSocketManager } from '../../../platform/networking/node/chatWebSocketManager';57import { IAlternativeNotebookContentService } from '../../../platform/notebook/common/alternativeContent';58import { AlternativeNotebookContentEditGenerator, IAlternativeNotebookContentEditGenerator } from '../../../platform/notebook/common/alternativeContentEditGenerator';59import { MockAlternativeNotebookContentService } from '../../../platform/notebook/common/mockAlternativeContentService';60import { INotebookService } from '../../../platform/notebook/common/notebookService';61import { INotificationService, NullNotificationService } from '../../../platform/notification/common/notificationService';62import { IOTelSqliteStore, OTelSqliteStore } from '../../../platform/otel/node/sqlite/otelSqliteStore';63import { IPromptsService } from '../../../platform/promptFiles/common/promptsService';64import { PromptsServiceImpl } from '../../../platform/promptFiles/vscode/promptsServiceImpl';65import { IPromptPathRepresentationService, PromptPathRepresentationService } from '../../../platform/prompts/common/promptPathRepresentationService';66import { IProxyModelsService, NullProxyModelsService } from '../../../platform/proxyModels/common/proxyModelsService';67import { IRemoteRepositoriesService, RemoteRepositoriesService } from '../../../platform/remoteRepositories/vscode/remoteRepositories';68import { NullRequestLogger } from '../../../platform/requestLogger/node/nullRequestLogger';69import { IRequestLogger } from '../../../platform/requestLogger/common/requestLogger';70import { IReviewService } from '../../../platform/review/common/reviewService';71import { IScopeSelector } from '../../../platform/scopeSelection/common/scopeSelection';72import { ScopeSelectorImpl } from '../../../platform/scopeSelection/vscode-node/scopeSelectionImpl';73import { ISearchService } from '../../../platform/search/common/searchService';74import { SearchServiceImpl } from '../../../platform/search/vscode-node/searchServiceImpl';75import { ISimulationTestContext, NulSimulationTestContext } from '../../../platform/simulationTestContext/common/simulationTestContext';76import { ITabsAndEditorsService } from '../../../platform/tabs/common/tabsAndEditorsService';77import { TabsAndEditorsServiceImpl } from '../../../platform/tabs/vscode/tabsAndEditorsServiceImpl';78import { NullTelemetryService } from '../../../platform/telemetry/common/nullTelemetryService';79import { ITelemetryService } from '../../../platform/telemetry/common/telemetry';80import { ITerminalService } from '../../../platform/terminal/common/terminalService';81import { TerminalServiceImpl } from '../../../platform/terminal/vscode/terminalServiceImpl';82import { MockExtensionContext } from '../../../platform/test/node/extensionContext';83import { _createBaselineServices, TestingServiceCollection } from '../../../platform/test/node/services';84import { SimulationNotebookService, SimulationReviewService, TestingDialogService } from '../../../platform/test/node/simulationWorkspaceServices';85import { ITestProvider } from '../../../platform/testing/common/testProvider';86import { IWorkspaceMutationManager } from '../../../platform/testing/common/workspaceMutationManager';87import { ISetupTestsDetector, NullSetupTestsDetector } from '../../../platform/testing/node/setupTestDetector';88import { TestProvider } from '../../../platform/testing/vscode/testProviderImpl';89import { ITokenizerProvider, TokenizerProvider } from '../../../platform/tokenizer/node/tokenizer';90import { IWorkspaceService } from '../../../platform/workspace/common/workspaceService';91import { ExtensionTextDocumentManager } from '../../../platform/workspace/vscode/workspaceServiceImpl';92import { GithubAvailableEmbeddingTypesService, IGithubAvailableEmbeddingTypesService } from '../../../platform/workspaceChunkSearch/common/githubAvailableEmbeddingTypes';93import { IRerankerService, RerankerService } from '../../../platform/workspaceChunkSearch/common/rerankerService';94import { SyncDescriptor } from '../../../util/vs/platform/instantiation/common/descriptors';95import { IToolResultContentRenderer } from '../../agentDebug/common/toolResultRenderer';96import { ToolResultContentRenderer } from '../../agentDebug/vscode-node/toolResultContentRenderer';97import { GitHubOrgChatResourcesService, IGitHubOrgChatResourcesService } from '../../agents/vscode-node/githubOrgChatResourcesService';98import { CommandServiceImpl, ICommandService } from '../../commands/node/commandService';99import { ICopilotInlineCompletionItemProviderService, NullCopilotInlineCompletionItemProviderService } from '../../completions/common/copilotInlineCompletionItemProviderService';100import { IPromptWorkspaceLabels, PromptWorkspaceLabels } from '../../context/node/resolvers/promptWorkspaceLabels';101import { IUserFeedbackService, UserFeedbackService } from '../../conversation/vscode-node/userActions';102import { ConversationStore, IConversationStore } from '../../conversationStore/node/conversationStore';103import { ITestGenInfoStorage, TestGenInfoStorage } from '../../intents/node/testIntent/testInfoStorage';104import { ILinkifyService, LinkifyService } from '../../linkify/common/linkifyService';105import { ILaunchConfigService } from '../../onboardDebug/common/launchConfigService';106import { DebugCommandToConfigConverter, IDebugCommandToConfigConverter } from '../../onboardDebug/node/commandToConfigConverter';107import { DebuggableCommandIdentifier, IDebuggableCommandIdentifier } from '../../onboardDebug/node/debuggableCommandIdentifier';108import { ILanguageToolsProvider, LanguageToolsProvider } from '../../onboardDebug/node/languageToolsProvider';109import { LaunchConfigService } from '../../onboardDebug/vscode/launchConfigService';110import { IPowerService, NullPowerService } from '../../power/common/powerService';111import { ChatMLFetcherImpl } from '../../prompt/node/chatMLFetcher';112import { IFeedbackReporter, NullFeedbackReporterImpl } from '../../prompt/node/feedbackReporter';113import { IPromptVariablesService } from '../../prompt/node/promptVariablesService';114import { ITodoListContextProvider, TodoListContextProvider } from '../../prompt/node/todoListContextProvider';115import { GitDiffService } from '../../prompt/vscode-node/gitDiffService';116import { PromptVariablesServiceImpl } from '../../prompt/vscode-node/promptVariablesService';117import { IChatDiskSessionResources } from '../../prompts/common/chatDiskSessionResources';118import { ChatDiskSessionResources } from '../../prompts/node/chatDiskSessionResourcesImpl';119import { CodeMapperService, ICodeMapperService } from '../../prompts/node/codeMapper/codeMapperService';120import { FixCookbookService, IFixCookbookService } from '../../prompts/node/inline/fixCookbookService';121import { WorkspaceMutationManager } from '../../testing/node/setupTestsFileManager';122import { AgentMemoryService, IAgentMemoryService } from '../../tools/common/agentMemoryService';123import { EditToolLearningService, IEditToolLearningService } from '../../tools/common/editToolLearningService';124import { IToolDeferralService } from '../../../platform/networking/common/toolDeferralService';125import { ToolDeferralService } from '../../tools/common/toolDeferralService';126import { IToolsService, NullToolsService } from '../../tools/common/toolsService';127import { ToolGroupingService } from '../../tools/common/virtualTools/toolGroupingService';128import { ToolGroupingCache } from '../../tools/common/virtualTools/virtualToolGroupCache';129import { IToolGroupingCache, IToolGroupingService } from '../../tools/common/virtualTools/virtualToolTypes';130import { ISessionStore } from '../../../platform/chronicle/common/sessionStore';131import { SessionStore } from '../../../platform/chronicle/node/sessionStore';132133/**134* A default context for VSCode extension testing, building on general one in `lib`.135* Only includes items that are needed for almost all extension tests.136*/137export function createExtensionTestingServices(): TestingServiceCollection {138const testingServiceCollection = _createBaselineServices();139testingServiceCollection.define(IAutomodeService, new SyncDescriptor(AutomodeService));140testingServiceCollection.define(IFileSystemService, new SyncDescriptor(NodeFileSystemService));141testingServiceCollection.define(IConfigurationService, new SyncDescriptor(DefaultsOnlyConfigurationService));142testingServiceCollection.define(IEnvService, new SyncDescriptor(TestEnvService));143testingServiceCollection.define(INativeEnvService, new SyncDescriptor(NullNativeEnvService));144testingServiceCollection.define(ISimulationTestContext, new SyncDescriptor(NulSimulationTestContext));145testingServiceCollection.define(IRequestLogger, new SyncDescriptor(NullRequestLogger));146testingServiceCollection.define(IFeedbackReporter, new SyncDescriptor(NullFeedbackReporterImpl));147testingServiceCollection.define(IEndpointProvider, new SyncDescriptor(TestEndpointProvider, [undefined, undefined, undefined, undefined, false, undefined]));148testingServiceCollection.define(ICopilotTokenStore, new SyncDescriptor(CopilotTokenStore));149testingServiceCollection.define(IDomainService, new SyncDescriptor(DomainService));150testingServiceCollection.define(ICAPIClientService, new SyncDescriptor(CAPIClientImpl));151testingServiceCollection.define(INotificationService, new SyncDescriptor(NullNotificationService));152testingServiceCollection.define(ICommandService, new SyncDescriptor(CommandServiceImpl));153testingServiceCollection.define(IPromptVariablesService, new SyncDescriptor(PromptVariablesServiceImpl));154testingServiceCollection.define(IVSCodeExtensionContext, new SyncDescriptor(MockExtensionContext));155testingServiceCollection.define(IIgnoreService, new SyncDescriptor(NullIgnoreService));156testingServiceCollection.define(IRemoteRepositoriesService, new SyncDescriptor(RemoteRepositoriesService));157testingServiceCollection.define(IWorkspaceService, new SyncDescriptor(ExtensionTextDocumentManager));158testingServiceCollection.define(IMcpService, new SyncDescriptor(NullMcpService));159testingServiceCollection.define(IExtensionsService, new SyncDescriptor(VSCodeExtensionsService));160testingServiceCollection.define(IPowerService, new SyncDescriptor(NullPowerService));161testingServiceCollection.define(IChatMLFetcher, new SyncDescriptor(ChatMLFetcherImpl));162testingServiceCollection.define(IChatWebSocketManager, new SyncDescriptor(NullChatWebSocketManager));163testingServiceCollection.define(IImageService, nullImageService);164testingServiceCollection.define(ITabsAndEditorsService, new SyncDescriptor(TabsAndEditorsServiceImpl));165testingServiceCollection.define(IEmbeddingsComputer, new SyncDescriptor(RemoteEmbeddingsComputer));166testingServiceCollection.define(ITelemetryService, new SyncDescriptor(NullTelemetryService));167testingServiceCollection.define(ILanguageDiagnosticsService, new SyncDescriptor(LanguageDiagnosticsServiceImpl));168testingServiceCollection.define(ITokenizerProvider, new SyncDescriptor(TokenizerProvider, [true]));169testingServiceCollection.define(IPromptWorkspaceLabels, new SyncDescriptor(PromptWorkspaceLabels));170testingServiceCollection.define(IGitDiffService, new SyncDescriptor(GitDiffService));171testingServiceCollection.define(IGitExtensionService, new SyncDescriptor(GitExtensionServiceImpl));172testingServiceCollection.define(IGitService, new SyncDescriptor(GitServiceImpl));173testingServiceCollection.define(IOctoKitService, new SyncDescriptor(OctoKitService));174testingServiceCollection.define(ISetupTestsDetector, new SyncDescriptor(NullSetupTestsDetector));175testingServiceCollection.define(IWorkspaceMutationManager, new SyncDescriptor(WorkspaceMutationManager));176testingServiceCollection.define(ITestProvider, new SyncDescriptor(TestProvider));177testingServiceCollection.define(INaiveChunkingService, new SyncDescriptor(NaiveChunkingService));178testingServiceCollection.define(ILinkifyService, new SyncDescriptor(LinkifyService));179testingServiceCollection.define(ITestGenInfoStorage, new SyncDescriptor(TestGenInfoStorage));180testingServiceCollection.define(IEditToolLearningService, new SyncDescriptor(EditToolLearningService));181testingServiceCollection.define(IAgentMemoryService, new SyncDescriptor(AgentMemoryService));182testingServiceCollection.define(IDebugCommandToConfigConverter, new SyncDescriptor(DebugCommandToConfigConverter));183testingServiceCollection.define(ILaunchConfigService, new SyncDescriptor(LaunchConfigService));184testingServiceCollection.define(IDebuggableCommandIdentifier, new SyncDescriptor(DebuggableCommandIdentifier));185testingServiceCollection.define(ILanguageToolsProvider, new SyncDescriptor(LanguageToolsProvider));186testingServiceCollection.define(IEditLogService, new SyncDescriptor(EditLogService));187testingServiceCollection.define(IMultiFileEditInternalTelemetryService, new SyncDescriptor(MultiFileEditInternalTelemetryService));188testingServiceCollection.define(ICodeMapperService, new SyncDescriptor(CodeMapperService));189testingServiceCollection.define(IAlternativeNotebookContentService, new SyncDescriptor(MockAlternativeNotebookContentService));190testingServiceCollection.define(IAlternativeNotebookContentEditGenerator, new SyncDescriptor(AlternativeNotebookContentEditGenerator));191testingServiceCollection.define(IDiffService, new SyncDescriptor(DiffServiceImpl));192testingServiceCollection.define(ICompletionsFetchService, new SyncDescriptor(CompletionsFetchService));193testingServiceCollection.define(IDebugOutputService, new SyncDescriptor(DebugOutputServiceImpl));194testingServiceCollection.define(IUserFeedbackService, new SyncDescriptor(UserFeedbackService));195testingServiceCollection.define(ITerminalService, new SyncDescriptor(TerminalServiceImpl));196testingServiceCollection.define(IConversationStore, new SyncDescriptor(ConversationStore));197testingServiceCollection.define(IFixCookbookService, new SyncDescriptor(FixCookbookService));198testingServiceCollection.define(IReviewService, new SyncDescriptor(SimulationReviewService));199testingServiceCollection.define(IBlockedExtensionService, new SyncDescriptor(BlockedExtensionService));200testingServiceCollection.define(IDialogService, new SyncDescriptor(TestingDialogService));201testingServiceCollection.define(ILanguageFeaturesService, new SyncDescriptor(NoopLanguageFeaturesService));202testingServiceCollection.define(IScopeSelector, new SyncDescriptor(ScopeSelectorImpl));203testingServiceCollection.define(IPromptPathRepresentationService, new SyncDescriptor(PromptPathRepresentationService));204testingServiceCollection.define(IPromptsService, new SyncDescriptor(PromptsServiceImpl));205testingServiceCollection.define(IToolsService, new SyncDescriptor(NullToolsService));206testingServiceCollection.define(IToolDeferralService, new ToolDeferralService());207testingServiceCollection.define(IChatDiskSessionResources, new SyncDescriptor(ChatDiskSessionResources));208testingServiceCollection.define(IChatSessionService, new SyncDescriptor(TestChatSessionService));209testingServiceCollection.define(INotebookService, new SyncDescriptor(SimulationNotebookService));210testingServiceCollection.define(IRunCommandExecutionService, new SyncDescriptor(MockRunCommandExecutionService));211testingServiceCollection.define(ISearchService, new SyncDescriptor(SearchServiceImpl));212testingServiceCollection.define(IToolGroupingCache, new SyncDescriptor(ToolGroupingCache));213testingServiceCollection.define(IToolGroupingService, new SyncDescriptor(ToolGroupingService));214testingServiceCollection.define(ITodoListContextProvider, new SyncDescriptor(TodoListContextProvider));215testingServiceCollection.define(IGithubAvailableEmbeddingTypesService, new SyncDescriptor(GithubAvailableEmbeddingTypesService));216testingServiceCollection.define(IProxyModelsService, new SyncDescriptor(NullProxyModelsService));217testingServiceCollection.define(IInlineEditsModelService, new SyncDescriptor(InlineEditsModelService));218testingServiceCollection.define(IUndesiredModelsManager, new SyncDescriptor(UndesiredModels.Manager));219testingServiceCollection.define(ICopilotInlineCompletionItemProviderService, new SyncDescriptor(NullCopilotInlineCompletionItemProviderService));220testingServiceCollection.define(IRerankerService, new SyncDescriptor(RerankerService));221testingServiceCollection.define(IOTelSqliteStore, new OTelSqliteStore(':memory:'));222testingServiceCollection.define(ISessionStore, new SessionStore(':memory:'));223testingServiceCollection.define(IToolResultContentRenderer, new SyncDescriptor(ToolResultContentRenderer));224testingServiceCollection.define(IGitHubOrgChatResourcesService, new SyncDescriptor(GitHubOrgChatResourcesService));225226return testingServiceCollection;227}228229class TestEnvService extends EnvServiceImpl {230override get sessionId(): string {231return 'test-session';232}233234override get machineId(): string {235return 'test-machine';236}237238override get devDeviceId(): string {239return 'test-dev-device';240}241}242243244