Path: blob/main/src/vs/workbench/contrib/chat/electron-browser/agentSessions/agentSessionsActions.ts
5284 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*--------------------------------------------------------------------------------------------*/4import { VSBuffer } from '../../../../../base/common/buffer.js';5import { ServicesAccessor } from '../../../../../editor/browser/editorExtensions.js';6import { localize2 } from '../../../../../nls.js';7import { Action2 } from '../../../../../platform/actions/common/actions.js';8import { ContextKeyExpr } from '../../../../../platform/contextkey/common/contextkey.js';9import { INativeEnvironmentService } from '../../../../../platform/environment/common/environment.js';10import { IFileService } from '../../../../../platform/files/common/files.js';11import { INativeHostService } from '../../../../../platform/native/common/native.js';12import { ChatEntitlementContextKeys } from '../../../../services/chat/common/chatEntitlementService.js';13import { IWorkbenchModeService } from '../../../../services/layout/common/workbenchModeService.js';14import { IsAgentSessionsWorkspaceContext, WorkbenchModeContext } from '../../../../common/contextkeys.js';15import { CHAT_CATEGORY } from '../../browser/actions/chatActions.js';16import { ProductQualityContext } from '../../../../../platform/contextkey/common/contextkeys.js';1718export class OpenAgentSessionsWindowAction extends Action2 {19constructor() {20super({21id: 'workbench.action.openAgentSessionsWindow',22title: localize2('openAgentSessionsWindow', "Open Agent Sessions Window"),23category: CHAT_CATEGORY,24precondition: ContextKeyExpr.and(ProductQualityContext.notEqualsTo('stable'), ChatEntitlementContextKeys.Setup.hidden.negate()),25f1: true,26});27}2829async run(accessor: ServicesAccessor) {30const environmentService = accessor.get(INativeEnvironmentService);31const nativeHostService = accessor.get(INativeHostService);32const fileService = accessor.get(IFileService);3334// Create workspace file if it doesn't exist35const workspaceUri = environmentService.agentSessionsWorkspace;36if (!workspaceUri) {37throw new Error('Agent Sessions workspace is not configured');38}3940const workspaceExists = await fileService.exists(workspaceUri);41if (!workspaceExists) {42const emptyWorkspaceContent = JSON.stringify({ folders: [] }, null, '\t');43await fileService.writeFile(workspaceUri, VSBuffer.fromString(emptyWorkspaceContent));44}4546await nativeHostService.openWindow([{ workspaceUri }], { forceNewWindow: true });47}48}4950export class SwitchToAgentSessionsModeAction extends Action2 {51constructor() {52super({53id: 'workbench.action.switchToAgentSessionsMode',54title: localize2('switchToAgentSessionsMode', "Switch to Agent Sessions Mode"),55category: CHAT_CATEGORY,56precondition: ContextKeyExpr.and(57ProductQualityContext.notEqualsTo('stable'),58ChatEntitlementContextKeys.Setup.hidden.negate(),59IsAgentSessionsWorkspaceContext.toNegated(),60WorkbenchModeContext.notEqualsTo('agent-sessions')61),62f1: true,63});64}6566async run(accessor: ServicesAccessor) {67const workbenchModeService = accessor.get(IWorkbenchModeService);68await workbenchModeService.setWorkbenchMode('agent-sessions');69}70}7172export class SwitchToNormalModeAction extends Action2 {73constructor() {74super({75id: 'workbench.action.switchToNormalMode',76title: localize2('switchToNormalMode', "Switch to Default Mode"),77category: CHAT_CATEGORY,78precondition: ContextKeyExpr.and(79ProductQualityContext.notEqualsTo('stable'),80ChatEntitlementContextKeys.Setup.hidden.negate(),81IsAgentSessionsWorkspaceContext.toNegated(),82WorkbenchModeContext.notEqualsTo('')83),84f1: true,85});86}8788async run(accessor: ServicesAccessor) {89const workbenchModeService = accessor.get(IWorkbenchModeService);90await workbenchModeService.setWorkbenchMode(undefined);91}92}939495