Path: blob/main/src/vs/sessions/contrib/agentHost/browser/agentSessionSettings.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 { agentSessionSettingsUri, AGENT_SESSION_SETTINGS_SCHEME, AgentSessionSettingsFileSystemProvider, AgentSessionSettingsSchemaRegistrar } from './agentSessionSettingsFileSystemProvider.js';18import { ANY_AGENT_HOST_PROVIDER_RE } from '../../../common/agentHostSessionsProvider.js';1920/**21* Registers the {@link AgentSessionSettingsFileSystemProvider} with the22* {@link IFileService} and contributes the "Open Session Settings" action.23*/24class AgentSessionSettingsContribution extends Disposable implements IWorkbenchContribution {2526static readonly ID = 'sessions.contrib.agentSessionSettingsContribution';2728constructor(29@IFileService fileService: IFileService,30@IInstantiationService instantiationService: IInstantiationService,31@ILabelService labelService: ILabelService,32) {33super();3435const schemaRegistrar = this._register(instantiationService.createInstance(AgentSessionSettingsSchemaRegistrar));36const provider = this._register(instantiationService.createInstance(AgentSessionSettingsFileSystemProvider, schemaRegistrar));37this._register(fileService.registerProvider(AGENT_SESSION_SETTINGS_SCHEME, provider));3839this._register(labelService.registerFormatter({40scheme: AGENT_SESSION_SETTINGS_SCHEME,41formatting: {42label: localize('agentSessionSettings.label', "Session Settings"),43separator: '/',44},45}));46}47}4849registerWorkbenchContribution2(AgentSessionSettingsContribution.ID, AgentSessionSettingsContribution, WorkbenchPhase.AfterRestored);5051registerAction2(class OpenSessionSettingsAction extends Action2 {52constructor() {53super({54id: 'sessionsViewPane.openSessionSettings',55title: localize2('openSessionSettings', "Open Session Settings"),56menu: [{57id: SessionItemContextMenuId,58group: '2_settings',59order: 1,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 = agentSessionSettingsUri(session);71await editorService.openEditor({ resource, options: { pinned: true } });72}73});747576