Path: blob/main/extensions/copilot/src/extension/test/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 { ToolGroupingCache } from '../../../extension/tools/common/virtualTools/virtualToolGroupCache';6import { IToolGroupingCache, IToolGroupingService } from '../../../extension/tools/common/virtualTools/virtualToolTypes';7import { IChatDebugFileLoggerService, NullChatDebugFileLoggerService } from '../../../platform/chat/common/chatDebugFileLoggerService';8import { IChatHookService } from '../../../platform/chat/common/chatHookService';9import { IChatMLFetcher } from '../../../platform/chat/common/chatMLFetcher';10import { ISessionTranscriptService, NullSessionTranscriptService } from '../../../platform/chat/common/sessionTranscriptService';11import { MockChatMLFetcher } from '../../../platform/chat/test/common/mockChatMLFetcher';12import { ISessionStore } from '../../../platform/chronicle/common/sessionStore';13import { SessionStore } from '../../../platform/chronicle/node/sessionStore';14import { IDiffService } from '../../../platform/diff/common/diffService';15import { DiffServiceImpl } from '../../../platform/diff/node/diffServiceImpl';16import { EmbeddingType, IEmbeddingsComputer } from '../../../platform/embeddings/common/embeddingsComputer';17import { RemoteEmbeddingsComputer } from '../../../platform/embeddings/common/remoteEmbeddingsComputer';18import { IEndpointProvider } from '../../../platform/endpoint/common/endpointProvider';19import { IAutomodeService } from '../../../platform/endpoint/node/automodeService';20import { IModelConfig } from '../../../platform/endpoint/test/node/openaiCompatibleEndpoint';21import { TestEndpointProvider } from '../../../platform/endpoint/test/node/testEndpointProvider';22import { IGitCommitMessageService, NoopGitCommitMessageService } from '../../../platform/git/common/gitCommitMessageService';23import { IGitDiffService } from '../../../platform/git/common/gitDiffService';24import { IGitExtensionService } from '../../../platform/git/common/gitExtensionService';25import { IGitService } from '../../../platform/git/common/gitService';26import { NullGitDiffService } from '../../../platform/git/common/nullGitDiffService';27import { NullGitExtensionService } from '../../../platform/git/common/nullGitExtensionService';28import { GithubApiFetcherService, IGithubApiFetcherService } from '../../../platform/github/common/githubApiFetcherService';29import { IInlineEditsModelService, IUndesiredModelsManager } from '../../../platform/inlineEdits/common/inlineEditsModelService';30import { InlineEditsModelService, UndesiredModels } from '../../../platform/inlineEdits/node/inlineEditsModelService';31import { ILogService } from '../../../platform/log/common/logService';32import { IMcpService, NullMcpService } from '../../../platform/mcp/common/mcpService';33import { EditLogService, IEditLogService } from '../../../platform/multiFileEdit/common/editLogService';34import { IMultiFileEditInternalTelemetryService, MultiFileEditInternalTelemetryService } from '../../../platform/multiFileEdit/common/multiFileEditQualityTelemetry';35import { IToolDeferralService } from '../../../platform/networking/common/toolDeferralService';36import { IChatWebSocketManager, NullChatWebSocketManager } from '../../../platform/networking/node/chatWebSocketManager';37import { IAlternativeNotebookContentService } from '../../../platform/notebook/common/alternativeContent';38import { AlternativeNotebookContentEditGenerator, IAlternativeNotebookContentEditGenerator } from '../../../platform/notebook/common/alternativeContentEditGenerator';39import { INotebookService } from '../../../platform/notebook/common/notebookService';40import { INotebookSummaryTracker } from '../../../platform/notebook/common/notebookSummaryTracker';41import { IProxyModelsService, NullProxyModelsService } from '../../../platform/proxyModels/common/proxyModelsService';42import { AdoCodeSearchService, IAdoCodeSearchService } from '../../../platform/remoteCodeSearch/common/adoCodeSearchService';43import { GithubCodeSearchService, IGithubCodeSearchService } from '../../../platform/remoteCodeSearch/common/githubCodeSearchService';44import { ISimulationTestContext, NulSimulationTestContext } from '../../../platform/simulationTestContext/common/simulationTestContext';45import { ITerminalService, NullTerminalService } from '../../../platform/terminal/common/terminalService';46import { TestingServiceCollection, createPlatformServices } from '../../../platform/test/node/services';47import { SimulationAlternativeNotebookContentService, SimulationNotebookService, SimulationNotebookSummaryTracker } from '../../../platform/test/node/simulationWorkspaceServices';48import { NullTestProvider } from '../../../platform/testing/common/nullTestProvider';49import { TestLogService } from '../../../platform/testing/common/testLogService';50import { ITestProvider } from '../../../platform/testing/common/testProvider';51import { IGithubAvailableEmbeddingTypesService, MockGithubAvailableEmbeddingTypesService } from '../../../platform/workspaceChunkSearch/common/githubAvailableEmbeddingTypes';52import { IWorkspaceChunkSearchService, NullWorkspaceChunkSearchService } from '../../../platform/workspaceChunkSearch/node/workspaceChunkSearchService';53import { DisposableStore } from '../../../util/vs/base/common/lifecycle';54import { SyncDescriptor } from '../../../util/vs/platform/instantiation/common/descriptors';55import { ILanguageModelServer } from '../../agents/node/langModelServer';56import { MockLanguageModelServer } from '../../agents/node/test/mockLanguageModelServer';57import { IClaudeRuntimeDataService } from '../../chatSessions/claude/common/claudeRuntimeDataService';58import { IClaudeSessionStateService } from '../../chatSessions/claude/common/claudeSessionStateService';59import { IClaudeToolPermissionService } from '../../chatSessions/claude/common/claudeToolPermissionService';60import { ClaudeCodeModels, IClaudeCodeModels } from '../../chatSessions/claude/node/claudeCodeModels';61import { IClaudeCodeSdkService } from '../../chatSessions/claude/node/claudeCodeSdkService';62import { ClaudeRuntimeDataService } from '../../chatSessions/claude/node/claudeRuntimeDataService';63import { ClaudeSessionStateService } from '../../chatSessions/claude/node/claudeSessionStateService';64import { IClaudePluginService } from '../../chatSessions/claude/node/claudeSkills';65import { MockClaudeCodeSdkService } from '../../chatSessions/claude/node/test/mockClaudeCodeSdkService';66import { MockClaudeToolPermissionService } from '../../chatSessions/claude/node/test/mockClaudeToolPermissionService';67import { CommandServiceImpl, ICommandService } from '../../commands/node/commandService';68import { IPromptWorkspaceLabels, PromptWorkspaceLabels } from '../../context/node/resolvers/promptWorkspaceLabels';69import { ILinkifyService, LinkifyService } from '../../linkify/common/linkifyService';70import { IPowerService, NullPowerService } from '../../power/common/powerService';71import { IFeedbackReporter, NullFeedbackReporterImpl } from '../../prompt/node/feedbackReporter';72import { IPromptVariablesService, NullPromptVariablesService } from '../../prompt/node/promptVariablesService';73import { ITodoListContextProvider, TodoListContextProvider } from '../../prompt/node/todoListContextProvider';74import { IChatDiskSessionResources } from '../../prompts/common/chatDiskSessionResources';75import { ChatDiskSessionResources } from '../../prompts/node/chatDiskSessionResourcesImpl';76import { CodeMapperService, ICodeMapperService } from '../../prompts/node/codeMapper/codeMapperService';77import { FixCookbookService, IFixCookbookService } from '../../prompts/node/inline/fixCookbookService';78import { AgentMemoryService, IAgentMemoryService } from '../../tools/common/agentMemoryService';79import { EditToolLearningService, IEditToolLearningService } from '../../tools/common/editToolLearningService';80import { IMemoryCleanupService, MemoryCleanupService } from '../../tools/common/memoryCleanupService';81import { ToolDeferralService } from '../../tools/common/toolDeferralService';82import { IToolsService } from '../../tools/common/toolsService';83import { IToolEmbeddingsComputer } from '../../tools/common/virtualTools/toolEmbeddingsComputer';84import { ToolGroupingService } from '../../tools/common/virtualTools/toolGroupingService';85import '../../tools/node/allTools';86import { TestToolsService } from '../../tools/node/test/testToolsService';87import { TestToolEmbeddingsComputer } from '../../tools/test/node/virtualTools/testVirtualTools';88import { ISimilarFilesContextService, NullSimilarFilesContextService } from '../../xtab/common/similarFilesContextService';8990export interface ISimulationModelConfig {91chatModel?: string;92smartChatModel?: string;93fastChatModel?: string;94readonly embeddingType?: EmbeddingType;95fastRewriteModel?: string;96skipModelMetadataCache?: boolean;97customModelConfigs?: Map<string, IModelConfig>;98}99100export function createExtensionUnitTestingServices(disposables: Pick<DisposableStore, 'add'> = new DisposableStore(), currentTestRunInfo?: any, modelConfig?: ISimulationModelConfig): TestingServiceCollection {101const testingServiceCollection = createPlatformServices(disposables);102testingServiceCollection.define(103IEndpointProvider,104new SyncDescriptor(TestEndpointProvider, [105modelConfig?.smartChatModel ?? modelConfig?.chatModel,106modelConfig?.fastChatModel ?? modelConfig?.chatModel,107modelConfig?.fastRewriteModel,108currentTestRunInfo,109!!modelConfig?.skipModelMetadataCache,110modelConfig?.customModelConfigs,111])112);113testingServiceCollection.define(IGithubApiFetcherService, new SyncDescriptor(GithubApiFetcherService));114testingServiceCollection.define(IGithubCodeSearchService, new SyncDescriptor(GithubCodeSearchService));115testingServiceCollection.define(ITestProvider, new NullTestProvider());116testingServiceCollection.define(ILogService, new SyncDescriptor(TestLogService));117testingServiceCollection.define(IAdoCodeSearchService, new SyncDescriptor(AdoCodeSearchService));118testingServiceCollection.define(IWorkspaceChunkSearchService, new SyncDescriptor(NullWorkspaceChunkSearchService));119testingServiceCollection.define(IPromptVariablesService, new SyncDescriptor(NullPromptVariablesService));120testingServiceCollection.define(ILinkifyService, new SyncDescriptor(LinkifyService));121testingServiceCollection.define(ICommandService, new SyncDescriptor(CommandServiceImpl));122testingServiceCollection.define(IFeedbackReporter, new SyncDescriptor(NullFeedbackReporterImpl));123testingServiceCollection.define(IChatMLFetcher, new SyncDescriptor(MockChatMLFetcher));124testingServiceCollection.define(IToolsService, new SyncDescriptor(TestToolsService, [new Set()]));125testingServiceCollection.define(IToolDeferralService, new ToolDeferralService());126testingServiceCollection.define(IChatDiskSessionResources, new SyncDescriptor(ChatDiskSessionResources));127testingServiceCollection.define(IClaudeCodeSdkService, new SyncDescriptor(MockClaudeCodeSdkService));128testingServiceCollection.define(IClaudeToolPermissionService, new SyncDescriptor(MockClaudeToolPermissionService));129testingServiceCollection.define(IClaudeCodeModels, new SyncDescriptor(ClaudeCodeModels));130testingServiceCollection.define(IClaudeSessionStateService, new SyncDescriptor(ClaudeSessionStateService));131testingServiceCollection.define(IClaudeRuntimeDataService, new SyncDescriptor(ClaudeRuntimeDataService));132testingServiceCollection.define(IMcpService, new SyncDescriptor(NullMcpService));133testingServiceCollection.define(IEditLogService, new SyncDescriptor(EditLogService));134testingServiceCollection.define(IProxyModelsService, new SyncDescriptor(NullProxyModelsService));135testingServiceCollection.define(IInlineEditsModelService, new SyncDescriptor(InlineEditsModelService));136testingServiceCollection.define(IUndesiredModelsManager, new SyncDescriptor(UndesiredModels.Manager));137testingServiceCollection.define(IMultiFileEditInternalTelemetryService, new SyncDescriptor(MultiFileEditInternalTelemetryService));138testingServiceCollection.define(ICodeMapperService, new SyncDescriptor(CodeMapperService));139testingServiceCollection.define(IAlternativeNotebookContentService, new SyncDescriptor(SimulationAlternativeNotebookContentService));140testingServiceCollection.define(IAlternativeNotebookContentEditGenerator, new SyncDescriptor(AlternativeNotebookContentEditGenerator));141testingServiceCollection.define(IDiffService, new SyncDescriptor(DiffServiceImpl));142testingServiceCollection.define(IFixCookbookService, new SyncDescriptor(FixCookbookService));143testingServiceCollection.define(ISimulationTestContext, new SyncDescriptor(NulSimulationTestContext));144testingServiceCollection.define(INotebookService, new SyncDescriptor(SimulationNotebookService));145testingServiceCollection.define(INotebookSummaryTracker, new SyncDescriptor(SimulationNotebookSummaryTracker));146testingServiceCollection.define(ITerminalService, new SyncDescriptor(NullTerminalService));147testingServiceCollection.define(IToolGroupingCache, new SyncDescriptor(ToolGroupingCache));148testingServiceCollection.define(IToolGroupingService, new SyncDescriptor(ToolGroupingService));149testingServiceCollection.define(IToolEmbeddingsComputer, new SyncDescriptor(TestToolEmbeddingsComputer));150testingServiceCollection.define(IEmbeddingsComputer, new SyncDescriptor(RemoteEmbeddingsComputer));151testingServiceCollection.define(ITodoListContextProvider, new SyncDescriptor(TodoListContextProvider));152testingServiceCollection.define(ILanguageModelServer, new SyncDescriptor(MockLanguageModelServer));153testingServiceCollection.define(IEditToolLearningService, new SyncDescriptor(EditToolLearningService));154testingServiceCollection.define(IAgentMemoryService, new SyncDescriptor(AgentMemoryService));155testingServiceCollection.define(IMemoryCleanupService, new SyncDescriptor(MemoryCleanupService));156testingServiceCollection.define(IGitService, new SyncDescriptor(NullGitExtensionService));157testingServiceCollection.define(IGitExtensionService, new SyncDescriptor(NullGitExtensionService));158testingServiceCollection.define(IGitDiffService, new SyncDescriptor(NullGitDiffService));159testingServiceCollection.define(IGitCommitMessageService, new SyncDescriptor(NoopGitCommitMessageService));160testingServiceCollection.define(IGithubAvailableEmbeddingTypesService, new SyncDescriptor(MockGithubAvailableEmbeddingTypesService));161testingServiceCollection.define(IPowerService, new SyncDescriptor(NullPowerService));162testingServiceCollection.define(IPromptWorkspaceLabels, new SyncDescriptor(PromptWorkspaceLabels));163testingServiceCollection.define(IChatHookService, new SyncDescriptor(NullChatHookService));164testingServiceCollection.define(ISessionTranscriptService, new SyncDescriptor(NullSessionTranscriptService));165testingServiceCollection.define(IChatDebugFileLoggerService, new SyncDescriptor(NullChatDebugFileLoggerService));166testingServiceCollection.define(IChatWebSocketManager, new SyncDescriptor(NullChatWebSocketManager));167testingServiceCollection.define(ISimilarFilesContextService, new SyncDescriptor(NullSimilarFilesContextService));168testingServiceCollection.define(IAutomodeService, new SyncDescriptor(NullAutomodeService));169testingServiceCollection.define(ISessionStore, new SessionStore(':memory:'));170testingServiceCollection.define(IClaudePluginService, new NullClaudePluginService());171return testingServiceCollection;172}173174class NullClaudePluginService implements IClaudePluginService {175declare readonly _serviceBrand: undefined;176177async getPluginLocations(): Promise<never[]> {178return [];179}180}181182class NullChatHookService implements IChatHookService {183declare readonly _serviceBrand: undefined;184185logConfiguredHooks(): void { }186187async executeHook(): Promise<never[]> {188return [];189}190191async executePreToolUseHook(): Promise<undefined> {192return undefined;193}194195async executePostToolUseHook(): Promise<undefined> {196return undefined;197}198}199200class NullAutomodeService implements IAutomodeService {201declare readonly _serviceBrand: undefined;202203async resolveAutoModeEndpoint(): Promise<never> {204throw new Error('Not implemented');205}206207invalidateRouterCache(): void { }208}209210211