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