Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/sessions/browser/web.main.ts
13389 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
6
import { joinPath } from '../../base/common/resources.js';
7
import { onUnexpectedError } from '../../base/common/errors.js';
8
import { ServiceCollection } from '../../platform/instantiation/common/serviceCollection.js';
9
import { ILogService } from '../../platform/log/common/log.js';
10
import { IRemoteAuthorityResolverService } from '../../platform/remote/common/remoteAuthorityResolver.js';
11
import { IStorageService } from '../../platform/storage/common/storage.js';
12
import { IUriIdentityService } from '../../platform/uriIdentity/common/uriIdentity.js';
13
import { IAnyWorkspaceIdentifier, IWorkspaceContextService } from '../../platform/workspace/common/workspace.js';
14
import { IWorkspaceTrustEnablementService, IWorkspaceTrustManagementService } from '../../platform/workspace/common/workspaceTrust.js';
15
import { IBrowserWorkbenchEnvironmentService } from '../../workbench/services/environment/browser/environmentService.js';
16
import { IWorkbenchConfigurationService } from '../../workbench/services/configuration/common/configuration.js';
17
import { IUserDataProfileService } from '../../workbench/services/userDataProfile/common/userDataProfile.js';
18
import { BrowserUserDataProfilesService } from '../../platform/userDataProfile/browser/userDataProfile.js';
19
import { FileService } from '../../platform/files/common/fileService.js';
20
import { IPolicyService } from '../../platform/policy/common/policy.js';
21
import { IRemoteAgentService } from '../../workbench/services/remote/common/remoteAgentService.js';
22
import { IWorkspaceEditingService } from '../../workbench/services/workspaces/common/workspaceEditing.js';
23
import { WorkspaceTrustEnablementService, WorkspaceTrustManagementService } from '../../workbench/services/workspaces/common/workspaceTrust.js';
24
import { BrowserMain, IBrowserMainWorkbench } from '../../workbench/browser/web.main.js';
25
import { getWorkspaceIdentifier } from '../../workbench/services/workspaces/browser/workspaces.js';
26
import { SessionsWorkspaceContextService } from '../services/workspace/browser/workspaceContextService.js';
27
import { ConfigurationService } from '../services/configuration/browser/configurationService.js';
28
import { Workbench as SessionsWorkbench } from './workbench.js';
29
30
export class SessionsBrowserMain extends BrowserMain {
31
32
protected override createWorkbench(domElement: HTMLElement, serviceCollection: ServiceCollection, logService: ILogService): IBrowserMainWorkbench {
33
return new SessionsWorkbench(domElement, undefined, serviceCollection, logService);
34
}
35
36
protected override async createWorkspaceConfigAndStorageServices(
37
serviceCollection: ServiceCollection,
38
_workspace: IAnyWorkspaceIdentifier,
39
environmentService: IBrowserWorkbenchEnvironmentService,
40
userDataProfileService: IUserDataProfileService,
41
_userDataProfilesService: BrowserUserDataProfilesService,
42
fileService: FileService,
43
_remoteAgentService: IRemoteAgentService,
44
uriIdentityService: IUriIdentityService,
45
policyService: IPolicyService,
46
logService: ILogService,
47
remoteAuthorityResolverService: IRemoteAuthorityResolverService,
48
): Promise<{ configurationService: IWorkbenchConfigurationService; storageService: IStorageService }> {
49
// Use sessions workspace/configuration services instead of the standard
50
// WorkspaceService. This mirrors what SessionsMain does on desktop:
51
// the agents window manages workspace folders in-memory without creating
52
// workspace file watchers or other resources.
53
54
// Workspace — use a stable synthetic workspace identifier for agents
55
const sessionsWorkspaceUri = joinPath(environmentService.userRoamingDataHome, 'agent-sessions.code-workspace');
56
const workspaceIdentifier = getWorkspaceIdentifier(sessionsWorkspaceUri);
57
const workspaceContextService = new SessionsWorkspaceContextService(workspaceIdentifier, uriIdentityService);
58
59
serviceCollection.set(IWorkspaceContextService, workspaceContextService);
60
serviceCollection.set(IWorkspaceEditingService, workspaceContextService);
61
62
// Configuration — the sessions ConfigurationService works against the
63
// in-memory workspace model rather than a real .code-workspace file on disk.
64
const configurationService = new ConfigurationService(
65
userDataProfileService,
66
workspaceContextService,
67
uriIdentityService,
68
fileService,
69
policyService,
70
logService
71
);
72
73
try {
74
await configurationService.initialize();
75
} catch (error) {
76
onUnexpectedError(error);
77
}
78
79
serviceCollection.set(IWorkbenchConfigurationService, configurationService);
80
81
// Storage
82
const storageService = await this.createStorageService(workspaceIdentifier, logService, userDataProfileService);
83
serviceCollection.set(IStorageService, storageService);
84
85
// Workspace Trust Service
86
const workspaceTrustEnablementService = new WorkspaceTrustEnablementService(configurationService, environmentService);
87
serviceCollection.set(IWorkspaceTrustEnablementService, workspaceTrustEnablementService);
88
89
const workspaceTrustManagementService = new WorkspaceTrustManagementService(configurationService, remoteAuthorityResolverService, storageService, uriIdentityService, environmentService, workspaceContextService, workspaceTrustEnablementService, fileService);
90
serviceCollection.set(IWorkspaceTrustManagementService, workspaceTrustManagementService);
91
92
return { configurationService, storageService };
93
}
94
}
95
96