Path: blob/main/src/vs/sessions/contrib/agentHost/browser/agentHostSettings.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 } from '../../../../base/common/lifecycle.js';6import { localize, localize2 } from '../../../../nls.js';7import { Action2, registerAction2 } from '../../../../platform/actions/common/actions.js';8import { ContextKeyExpr } from '../../../../platform/contextkey/common/contextkey.js';9import { IFileService } from '../../../../platform/files/common/files.js';10import { IInstantiationService, ServicesAccessor } from '../../../../platform/instantiation/common/instantiation.js';11import { ILabelService } from '../../../../platform/label/common/label.js';12import { IEditorService } from '../../../../workbench/services/editor/common/editorService.js';13import { IWorkbenchContribution, registerWorkbenchContribution2, WorkbenchPhase } from '../../../../workbench/common/contributions.js';14import { ChatSessionProviderIdContext } from '../../../common/contextkeys.js';15import { ISession } from '../../../services/sessions/common/session.js';16import { SessionItemContextMenuId } from '../../sessions/browser/views/sessionsList.js';17import { agentHostSettingsUri, AGENT_HOST_SETTINGS_SCHEME, AgentHostSettingsFileSystemProvider, AgentHostSettingsSchemaRegistrar } from './agentHostSettingsFileSystemProvider.js';18import { ANY_AGENT_HOST_PROVIDER_RE } from '../../../common/agentHostSessionsProvider.js';1920/**21* Registers the {@link AgentHostSettingsFileSystemProvider} with the22* {@link IFileService} and contributes the "Open Host Settings" action.23*/24class AgentHostSettingsContribution extends Disposable implements IWorkbenchContribution {2526static readonly ID = 'sessions.contrib.agentHostSettingsContribution';2728constructor(29@IFileService fileService: IFileService,30@IInstantiationService instantiationService: IInstantiationService,31@ILabelService labelService: ILabelService,32) {33super();3435const schemaRegistrar = this._register(instantiationService.createInstance(AgentHostSettingsSchemaRegistrar));36const provider = this._register(instantiationService.createInstance(AgentHostSettingsFileSystemProvider, schemaRegistrar));37this._register(fileService.registerProvider(AGENT_HOST_SETTINGS_SCHEME, provider));3839this._register(labelService.registerFormatter({40scheme: AGENT_HOST_SETTINGS_SCHEME,41formatting: {42label: localize('agentHostSettings.label', "Host Settings"),43separator: '/',44},45}));46}47}4849registerWorkbenchContribution2(AgentHostSettingsContribution.ID, AgentHostSettingsContribution, WorkbenchPhase.AfterRestored);5051registerAction2(class OpenHostSettingsAction extends Action2 {52constructor() {53super({54id: 'sessionsViewPane.openHostSettings',55title: localize2('openHostSettings', "Open Host Settings"),56menu: [{57id: SessionItemContextMenuId,58group: '2_settings',59order: 2,60when: ContextKeyExpr.regex(ChatSessionProviderIdContext.key, ANY_AGENT_HOST_PROVIDER_RE),61}]62});63}64async run(accessor: ServicesAccessor, context?: ISession | ISession[]): Promise<void> {65const session = Array.isArray(context) ? context[0] : context;66if (!session) {67return;68}69const editorService = accessor.get(IEditorService);70const resource = agentHostSettingsUri(session.providerId);71await editorService.openEditor({ resource, options: { pinned: true } });72}73});747576