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