send workspace data to extension host behind a flag (#299179)

This commit is contained in:
Sandeep Somavarapu
2026-03-04 12:58:44 +01:00
committed by GitHub
parent 34659c0ef1
commit d724d41456
3 changed files with 28 additions and 21 deletions

View File

@@ -15,10 +15,12 @@ import { URI } from '../../../../base/common/uri.js';
import { autorun } from '../../../../base/common/observable.js';
import { IWorkspaceFolderCreationData } from '../../../../platform/workspaces/common/workspaces.js';
import { getGitHubRemoteFileDisplayName } from '../../fileTreeView/browser/githubFileSystemProvider.js';
import { Queue } from '../../../../base/common/async.js';
export class WorkspaceFolderManagementContribution extends Disposable implements IWorkbenchContribution {
static readonly ID = 'workbench.contrib.workspaceFolderManagement';
private queue = this._register(new Queue<void>());
constructor(
@ISessionsManagementService private readonly sessionManagementService: ISessionsManagementService,
@@ -30,7 +32,7 @@ export class WorkspaceFolderManagementContribution extends Disposable implements
super();
this._register(autorun(reader => {
const activeSession = this.sessionManagementService.activeSession.read(reader);
this.updateWorkspaceFoldersForSession(activeSession);
this.queue.queue(() => this.updateWorkspaceFoldersForSession(activeSession));
}));
}

View File

@@ -15,7 +15,7 @@ import { INativeWorkbenchEnvironmentService, NativeWorkbenchEnvironmentService }
import { ServiceCollection } from '../../platform/instantiation/common/serviceCollection.js';
import { ILoggerService, ILogService, LogLevel } from '../../platform/log/common/log.js';
import { NativeWorkbenchStorageService } from '../../workbench/services/storage/electron-browser/storageService.js';
import { IWorkspaceContextService, isSingleFolderWorkspaceIdentifier, isWorkspaceIdentifier, IAnyWorkspaceIdentifier, reviveIdentifier } from '../../platform/workspace/common/workspace.js';
import { IWorkspaceContextService, isSingleFolderWorkspaceIdentifier, isWorkspaceIdentifier, IAnyWorkspaceIdentifier, reviveIdentifier, IWorkspaceIdentifier } from '../../platform/workspace/common/workspace.js';
import { IWorkbenchConfigurationService } from '../../workbench/services/configuration/common/configuration.js';
import { IStorageService } from '../../platform/storage/common/storage.js';
import { Disposable } from '../../base/common/lifecycle.js';
@@ -67,6 +67,7 @@ import { NativeMenubarControl } from '../../workbench/electron-browser/parts/tit
import { IWorkspaceEditingService } from '../../workbench/services/workspaces/common/workspaceEditing.js';
import { ConfigurationService } from '../services/configuration/browser/configurationService.js';
import { SessionsWorkspaceContextService } from '../services/workspace/browser/workspaceContextService.js';
import { getWorkspaceIdentifier } from '../../workbench/services/workspaces/browser/workspaces.js';
export class SessionsMain extends Disposable {
@@ -291,21 +292,21 @@ export class SessionsMain extends Disposable {
//
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// Workspace
const workspaceContextService = new SessionsWorkspaceContextService(uriIdentityService.extUri.joinPath(uriIdentityService.extUri.dirname(userDataProfilesService.profilesHome), 'agent-sessions.code-workspace'), uriIdentityService);
serviceCollection.set(IWorkspaceContextService, workspaceContextService);
serviceCollection.set(IWorkspaceEditingService, workspaceContextService);
const workspaceIdentifier = getWorkspaceIdentifier(uriIdentityService.extUri.joinPath(uriIdentityService.extUri.dirname(userDataProfilesService.profilesHome), 'agent-sessions.code-workspace'));
const [configurationService, storageService] = await Promise.all([
this.createConfigurationService(userDataProfileService, fileService, logService, policyService).then(service => {
const [{ configurationService, workspaceContextService }, storageService] = await Promise.all([
this.createWorkspaceAndConfigurationService(workspaceIdentifier, userDataProfileService, uriIdentityService, fileService, logService, policyService).then(services => {
// Configuration
serviceCollection.set(IWorkbenchConfigurationService, service);
serviceCollection.set(IWorkbenchConfigurationService, services.configurationService);
// Workspace
serviceCollection.set(IWorkspaceContextService, services.workspaceContextService);
serviceCollection.set(IWorkspaceEditingService, services.workspaceContextService);
return service;
return services;
}),
this.createStorageService(workspaceContextService.getWorkspace(), environmentService, userDataProfileService, userDataProfilesService, mainProcessService).then(service => {
this.createStorageService(workspaceIdentifier, environmentService, userDataProfileService, userDataProfilesService, mainProcessService).then(service => {
// Storage
serviceCollection.set(IStorageService, service);
@@ -343,20 +344,23 @@ export class SessionsMain extends Disposable {
return { serviceCollection, logService, storageService, configurationService };
}
private async createConfigurationService(
private async createWorkspaceAndConfigurationService(
workspaceIdentifier: IWorkspaceIdentifier,
userDataProfileService: IUserDataProfileService,
uriIdentityService: IUriIdentityService,
fileService: FileService,
logService: ILogService,
policyService: IPolicyService
): Promise<ConfigurationService> {
): Promise<{ configurationService: ConfigurationService; workspaceContextService: SessionsWorkspaceContextService }> {
const configurationService = new ConfigurationService(userDataProfileService.currentProfile.settingsResource, fileService, policyService, logService);
try {
await configurationService.initialize();
return configurationService;
} catch (error) {
onUnexpectedError(error);
return configurationService;
}
const workspaceContextService = new SessionsWorkspaceContextService(workspaceIdentifier, uriIdentityService, configurationService);
return { configurationService, workspaceContextService };
}
private async createStorageService(workspace: IAnyWorkspaceIdentifier, environmentService: INativeWorkbenchEnvironmentService, userDataProfileService: IUserDataProfileService, userDataProfilesService: IUserDataProfilesService, mainProcessService: IMainProcessService): Promise<NativeWorkbenchStorageService> {

View File

@@ -11,8 +11,9 @@ import { IUriIdentityService } from '../../../../platform/uriIdentity/common/uri
import { Workspace, WorkspaceFolder, IWorkspace, IWorkspaceContextService, IWorkspaceFoldersChangeEvent, IWorkspaceFoldersWillChangeEvent, IWorkspaceIdentifier, ISingleFolderWorkspaceIdentifier, IWorkspaceFolder, WorkbenchState } from '../../../../platform/workspace/common/workspace.js';
import { IWorkspaceFolderCreationData } from '../../../../platform/workspaces/common/workspaces.js';
import { getWorkspaceIdentifier } from '../../../../workbench/services/workspaces/browser/workspaces.js';
import { IDidEnterWorkspaceEvent, IWorkspaceEditingService } from '../../../../workbench/services/workspaces/common/workspaceEditing.js';
import { IWorkspaceEditingService } from '../../../../workbench/services/workspaces/common/workspaceEditing.js';
import { Disposable } from '../../../../base/common/lifecycle.js';
import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js';
export class SessionsWorkspaceContextService extends Disposable implements IWorkspaceContextService, IWorkspaceEditingService {
@@ -20,7 +21,7 @@ export class SessionsWorkspaceContextService extends Disposable implements IWork
readonly onDidChangeWorkbenchState = Event.None;
readonly onDidChangeWorkspaceName = Event.None;
readonly onDidEnterWorkspace = Event.None as Event<IDidEnterWorkspaceEvent>;
readonly onDidEnterWorkspace = Event.None;
private readonly _onWillChangeWorkspaceFolders = new Emitter<IWorkspaceFoldersWillChangeEvent>();
readonly onWillChangeWorkspaceFolders = this._onWillChangeWorkspaceFolders.event;
@@ -32,11 +33,11 @@ export class SessionsWorkspaceContextService extends Disposable implements IWork
private readonly _updateFoldersQueue = this._register(new Queue<void>());
constructor(
sessionsWorkspaceUri: URI,
private readonly uriIdentityService: IUriIdentityService
workspaceIdentifier: IWorkspaceIdentifier,
private readonly uriIdentityService: IUriIdentityService,
private readonly configurationService: IConfigurationService,
) {
super();
const workspaceIdentifier = getWorkspaceIdentifier(sessionsWorkspaceUri);
this.workspace = new Workspace(workspaceIdentifier.id, [], false, workspaceIdentifier.configPath, uri => uriIdentityService.extUri.ignorePathCasing(uri));
}
@@ -53,7 +54,7 @@ export class SessionsWorkspaceContextService extends Disposable implements IWork
}
hasWorkspaceData(): boolean {
return false;
return this.configurationService.getValue('sessions.workspace.sendWorkspaceDataToExtHost') === true;
}
getWorkspaceFolder(resource: URI): IWorkspaceFolder | null {