mirror of
https://github.com/microsoft/vscode.git
synced 2026-09-13 13:52:33 +01:00
Background - remove isolation picker (#2858)
This commit is contained in:
+4
-75
@@ -8,7 +8,6 @@ import * as l10n from '@vscode/l10n';
|
||||
import * as vscode from 'vscode';
|
||||
import { ChatExtendedRequestHandler, Uri } from 'vscode';
|
||||
import { IRunCommandExecutionService } from '../../../platform/commands/common/runCommandExecutionService';
|
||||
import { IVSCodeExtensionContext } from '../../../platform/extContext/common/extensionContext';
|
||||
import { IGitService } from '../../../platform/git/common/gitService';
|
||||
import { toGitUri } from '../../../platform/git/common/utils';
|
||||
import { ILogService } from '../../../platform/log/common/logService';
|
||||
@@ -39,24 +38,6 @@ import { CopilotCloudSessionsProvider } from './copilotCloudSessionsProvider';
|
||||
|
||||
const AGENTS_OPTION_ID = 'agent';
|
||||
const MODELS_OPTION_ID = 'model';
|
||||
const ISOLATION_OPTION_ID = 'isolation';
|
||||
|
||||
const disabledIsolation: Readonly<vscode.ChatSessionProviderOptionItem> = {
|
||||
id: 'disabled',
|
||||
name: 'Workspace',
|
||||
description: l10n.t('Use the current workspace for this session')
|
||||
};
|
||||
const disabledIsolationLocked: Readonly<vscode.ChatSessionProviderOptionItem> = { ...disabledIsolation, locked: true };
|
||||
|
||||
function getLockedIsolationOption(name: string): vscode.ChatSessionProviderOptionItem {
|
||||
return {
|
||||
id: 'enabled',
|
||||
name,
|
||||
description: l10n.t('Using worktree for this session'),
|
||||
locked: true,
|
||||
icon: new vscode.ThemeIcon('worktree')
|
||||
};
|
||||
}
|
||||
|
||||
const UncommittedChangesStep = 'uncommitted-changes';
|
||||
type ConfirmationResult = { step: string; accepted: boolean; metadata?: CLIConfirmationMetadata };
|
||||
@@ -86,19 +67,12 @@ function isUntitledSessionId(sessionId: string): boolean {
|
||||
}
|
||||
|
||||
export class CopilotCLISessionIsolationManager {
|
||||
static COPILOT_CLI_DEFAULT_ISOLATION_MEMENTO_KEY = 'github.copilot.cli.sessionIsolation';
|
||||
private _sessionIsolation: Map<string, boolean> = new Map();
|
||||
|
||||
constructor(
|
||||
@IVSCodeExtensionContext private readonly extensionContext: IVSCodeExtensionContext,
|
||||
@IChatSessionWorktreeService private readonly worktreeManagerService: IChatSessionWorktreeService
|
||||
) { }
|
||||
constructor(@IChatSessionWorktreeService private readonly worktreeManagerService: IChatSessionWorktreeService) { }
|
||||
|
||||
private getDefaultIsolationPreference(): boolean {
|
||||
if (!this.worktreeManagerService.isWorktreeSupportedObs.get()) {
|
||||
return false;
|
||||
}
|
||||
return this.extensionContext.globalState.get<boolean>(CopilotCLISessionIsolationManager.COPILOT_CLI_DEFAULT_ISOLATION_MEMENTO_KEY, true);
|
||||
return this.worktreeManagerService.isWorktreeSupportedObs.get();
|
||||
}
|
||||
|
||||
getIsolationPreference(sessionId: string): boolean {
|
||||
@@ -106,12 +80,11 @@ export class CopilotCLISessionIsolationManager {
|
||||
const defaultIsolation = this.getDefaultIsolationPreference();
|
||||
this._sessionIsolation.set(sessionId, defaultIsolation);
|
||||
}
|
||||
return this._sessionIsolation.get(sessionId) ?? false;
|
||||
return this._sessionIsolation.get(sessionId) ?? true;
|
||||
}
|
||||
|
||||
async setIsolationPreference(sessionId: string, enabled: boolean): Promise<void> {
|
||||
this._sessionIsolation.set(sessionId, enabled);
|
||||
await this.extensionContext.globalState.update(CopilotCLISessionIsolationManager.COPILOT_CLI_DEFAULT_ISOLATION_MEMENTO_KEY, enabled);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -277,20 +250,6 @@ export class CopilotCLIChatSessionContentProvider extends Disposable implements
|
||||
options[MODELS_OPTION_ID] = model;
|
||||
}
|
||||
|
||||
if (!existingSession || !this.copilotCLIWorktreeManagerService.isWorktreeSupportedObs.get()) {
|
||||
options[ISOLATION_OPTION_ID] = this.copilotCLIWorktreeManagerService.isWorktreeSupportedObs.get() && isolationEnabled ? 'enabled' : 'disabled';
|
||||
} else if (existingSession && workingDirectory) {
|
||||
// For existing sessions with a worktree, show the worktree branch name as a locked option
|
||||
const worktreeProperties = this.copilotCLIWorktreeManagerService.getWorktreeProperties(copilotcliSessionId);
|
||||
if (worktreeProperties?.branchName) {
|
||||
options[ISOLATION_OPTION_ID] = getLockedIsolationOption(worktreeProperties.branchName);
|
||||
} else {
|
||||
options[ISOLATION_OPTION_ID] = disabledIsolationLocked;
|
||||
}
|
||||
} else if (existingSession) {
|
||||
options[ISOLATION_OPTION_ID] = disabledIsolationLocked;
|
||||
}
|
||||
|
||||
const history = existingSession?.object?.getChatHistory() || [];
|
||||
existingSession?.dispose();
|
||||
// Always keep track of this in memory.
|
||||
@@ -306,11 +265,6 @@ export class CopilotCLIChatSessionContentProvider extends Disposable implements
|
||||
}
|
||||
|
||||
async provideChatSessionProviderOptions(): Promise<vscode.ChatSessionProviderOptions> {
|
||||
const isolationItems = [
|
||||
{ id: 'enabled', name: 'Worktree', description: l10n.t('Use a git worktree for this session') },
|
||||
disabledIsolation
|
||||
];
|
||||
|
||||
const [models, agents] = await Promise.all([
|
||||
this.copilotCLIModels.getModels(),
|
||||
this.copilotCLIAgents.getAgents()
|
||||
@@ -334,15 +288,6 @@ export class CopilotCLIChatSessionContentProvider extends Disposable implements
|
||||
}
|
||||
]
|
||||
};
|
||||
if (this.copilotCLIWorktreeManagerService.isWorktreeSupportedObs.get()) {
|
||||
this.worktreeOptionShown = true;
|
||||
options.optionGroups.push({
|
||||
id: ISOLATION_OPTION_ID,
|
||||
name: l10n.t('Isolation'),
|
||||
description: l10n.t('Choose Worktree or Workspace for this session'),
|
||||
items: isolationItems
|
||||
});
|
||||
}
|
||||
if (hasAgents) {
|
||||
options.optionGroups.unshift({
|
||||
id: AGENTS_OPTION_ID,
|
||||
@@ -364,9 +309,6 @@ export class CopilotCLIChatSessionContentProvider extends Disposable implements
|
||||
} else if (update.optionId === AGENTS_OPTION_ID) {
|
||||
void this.copilotCLIAgents.setDefaultAgent(update.value);
|
||||
void this.copilotCLIAgents.trackSessionAgent(sessionId, update.value);
|
||||
} else if (update.optionId === ISOLATION_OPTION_ID) {
|
||||
// Handle isolation option changes
|
||||
await this.isolationManager.setIsolationPreference(sessionId, update.value === 'enabled');
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -469,19 +411,6 @@ export class CopilotCLIChatSessionParticipant extends Disposable {
|
||||
if (!session || token.isCancellationRequested) {
|
||||
return {};
|
||||
}
|
||||
if (isUntitled && session.object.options.isolationEnabled && session.object.options.workingDirectory && this.copilotCLIWorktreeManagerService.isWorktreeSupportedObs.get()) {
|
||||
const changes: { optionId: string; value: vscode.ChatSessionProviderOptionItem }[] = [];
|
||||
// For existing sessions with a worktree, show the worktree branch name as a locked option
|
||||
const worktreeProperties = this.copilotCLIWorktreeManagerService.getWorktreeProperties(session.object.sessionId);
|
||||
if (worktreeProperties?.branchName) {
|
||||
changes.push({ optionId: ISOLATION_OPTION_ID, value: getLockedIsolationOption(worktreeProperties.branchName) });
|
||||
this.contentProvider.notifySessionOptionsChange(resource, changes);
|
||||
}
|
||||
} else if (isUntitled && (!session.object.options.isolationEnabled || !this.copilotCLIWorktreeManagerService.isWorktreeSupportedObs.get())) {
|
||||
const changes: { optionId: string; value: vscode.ChatSessionProviderOptionItem }[] = [];
|
||||
changes.push({ optionId: ISOLATION_OPTION_ID, value: disabledIsolationLocked });
|
||||
this.contentProvider.notifySessionOptionsChange(resource, changes);
|
||||
}
|
||||
|
||||
this.copilotCLIAgents.trackSessionAgent(session.object.sessionId, agent?.name);
|
||||
if (isUntitled) {
|
||||
@@ -815,7 +744,7 @@ export class CopilotCLIChatSessionParticipant extends Disposable {
|
||||
|
||||
let workingDirectory: Uri | undefined;
|
||||
let worktreeProperties: Awaited<ReturnType<IChatSessionWorktreeService['createWorktree']>> | undefined;
|
||||
let isolationEnabled = false;
|
||||
let isolationEnabled = true;
|
||||
|
||||
if (chatSessionContext) {
|
||||
const existingSessionId = this.untitledSessionIdMapping.get(SessionIdForCLI.parse(chatSessionContext.chatSessionItem.resource));
|
||||
|
||||
Reference in New Issue
Block a user