Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/sessions/contrib/agentHost/browser/localAgentHost.contribution.ts
13401 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 { Disposable, DisposableMap } from '../../../../base/common/lifecycle.js';
7
import { AgentHostEnabledSettingId } from '../../../../platform/agentHost/common/agentService.js';
8
import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js';
9
import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js';
10
import { IWorkbenchContribution, registerWorkbenchContribution2, WorkbenchPhase } from '../../../../workbench/common/contributions.js';
11
import { AgentHostContribution } from '../../../../workbench/contrib/chat/browser/agentSessions/agentHost/agentHostChatContribution.js';
12
import { IAgentHostSessionWorkingDirectoryResolver } from '../../../../workbench/contrib/chat/browser/agentSessions/agentHost/agentHostSessionWorkingDirectoryResolver.js';
13
import { AgentHostTerminalContribution } from '../../../../workbench/contrib/chat/browser/agentSessions/agentHost/agentHostTerminalContribution.js';
14
import { ISessionsProvidersService } from '../../../services/sessions/browser/sessionsProvidersService.js';
15
import { LocalAgentHostSessionsProvider } from './localAgentHostSessionsProvider.js';
16
17
/**
18
* Registers the {@link LocalAgentHostSessionsProvider} as a sessions provider
19
* when `chat.agentHost.enabled` is true.
20
*
21
* {@link AgentHostContribution} handles all the heavy lifting — agent discovery,
22
* session handler registration, language model providers, customization harness —
23
* via {@link IChatSessionsService}. This contribution only bridges the session
24
* listing and lifecycle to the {@link ISessionsProvidersService} layer used by
25
* the Sessions app's UI.
26
*/
27
class LocalAgentHostContribution extends Disposable implements IWorkbenchContribution {
28
29
static readonly ID = 'sessions.contrib.localAgentHostContribution';
30
31
constructor(
32
@IConfigurationService configurationService: IConfigurationService,
33
@IInstantiationService instantiationService: IInstantiationService,
34
@ISessionsProvidersService sessionsProvidersService: ISessionsProvidersService,
35
@IAgentHostSessionWorkingDirectoryResolver workingDirectoryResolver: IAgentHostSessionWorkingDirectoryResolver,
36
) {
37
super();
38
39
if (!configurationService.getValue<boolean>(AgentHostEnabledSettingId)) {
40
return;
41
}
42
43
const provider = this._register(instantiationService.createInstance(LocalAgentHostSessionsProvider));
44
this._register(sessionsProvidersService.registerProvider(provider));
45
46
const resolverRegistrations = this._register(new DisposableMap<string>());
47
const registerResolvers = () => {
48
const sessionTypeIds = new Set(provider.sessionTypes.map(sessionType => sessionType.id));
49
for (const [sessionTypeId] of resolverRegistrations) {
50
if (!sessionTypeIds.has(sessionTypeId)) {
51
resolverRegistrations.deleteAndDispose(sessionTypeId);
52
}
53
}
54
55
for (const sessionType of provider.sessionTypes) {
56
if (resolverRegistrations.has(sessionType.id)) {
57
continue;
58
}
59
resolverRegistrations.set(sessionType.id, workingDirectoryResolver.registerResolver(sessionType.id, sessionResource => {
60
const repository = provider.getSessionByResource(sessionResource)?.workspace.get()?.repositories[0];
61
return repository?.workingDirectory ?? repository?.uri;
62
}));
63
}
64
};
65
registerResolvers();
66
this._register(provider.onDidChangeSessionTypes(registerResolvers));
67
}
68
}
69
70
registerWorkbenchContribution2(AgentHostContribution.ID, AgentHostContribution, WorkbenchPhase.AfterRestored);
71
registerWorkbenchContribution2(AgentHostTerminalContribution.ID, AgentHostTerminalContribution, WorkbenchPhase.AfterRestored);
72
registerWorkbenchContribution2(LocalAgentHostContribution.ID, LocalAgentHostContribution, WorkbenchPhase.AfterRestored);
73
74