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