Skip to content

Commit cc9f345

Browse files
dileepyavanCopilot
andauthored
Rename agent sandbox settings (#307237)
* Rename agent sandbox settings * refactoring for review comments * Update src/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminalChatAgentToolsConfiguration.ts Update for deprecation Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
1 parent 1d3e82f commit cc9f345

10 files changed

Lines changed: 116 additions & 126 deletions

File tree

extensions/vscode-api-tests/src/singlefolder-tests/chat.runInTerminal.test.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ import { DeferredPromise, assertNoRpc, closeAllEditors, disposeAll } from '../ut
1111
const isWindows = process.platform === 'win32';
1212
const isMacOS = process.platform === 'darwin';
1313
const sandboxFileSystemSetting = isMacOS
14-
? 'chat.agent.sandboxFileSystem.mac'
15-
: 'chat.agent.sandboxFileSystem.linux';
14+
? 'chat.agent.sandbox.fileSystem.mac'
15+
: 'chat.agent.sandbox.fileSystem.linux';
1616

1717
/**
1818
* Extracts all text content from a LanguageModelToolResult.
@@ -274,12 +274,12 @@ function extractTextContent(result: vscode.LanguageModelToolResult): string {
274274

275275
setup(async () => {
276276
const configuration = vscode.workspace.getConfiguration();
277-
await configuration.update('chat.agent.sandbox', true, vscode.ConfigurationTarget.Global);
277+
await configuration.update('chat.agent.sandbox.enabled', 'on', vscode.ConfigurationTarget.Global);
278278
});
279279

280280
teardown(async () => {
281281
const configuration = vscode.workspace.getConfiguration();
282-
await configuration.update('chat.agent.sandbox', undefined, vscode.ConfigurationTarget.Global);
282+
await configuration.update('chat.agent.sandbox.enabled', undefined, vscode.ConfigurationTarget.Global);
283283
});
284284

285285
// Flaky: #305722
@@ -296,7 +296,7 @@ function extractTextContent(result: vscode.LanguageModelToolResult): string {
296296
this.timeout(60000);
297297

298298
const configuration = vscode.workspace.getConfiguration();
299-
await configuration.update('chat.agent.sandboxNetwork.allowedDomains', ['example.com'], vscode.ConfigurationTarget.Global);
299+
await configuration.update('chat.agent.sandbox.allowedNetworkDomains', ['example.com'], vscode.ConfigurationTarget.Global);
300300
try {
301301
const output = await invokeRunInTerminal('curl -s --max-time 5 https://example.com');
302302
const trimmed = output.trim();
@@ -306,7 +306,7 @@ function extractTextContent(result: vscode.LanguageModelToolResult): string {
306306
];
307307
assert.ok(acceptable.some(value => trimmed.includes(value) || trimmed === value), `Unexpected output: ${JSON.stringify(trimmed)}`);
308308
} finally {
309-
await configuration.update('chat.agent.sandboxNetwork.allowedDomains', undefined, vscode.ConfigurationTarget.Global);
309+
await configuration.update('chat.agent.sandbox.allowedNetworkDomains', undefined, vscode.ConfigurationTarget.Global);
310310
}
311311
});
312312

@@ -347,7 +347,7 @@ function extractTextContent(result: vscode.LanguageModelToolResult): string {
347347
? `/bin/bash: /tmp/${marker}.txt: Operation not permitted`
348348
: `/usr/bin/bash: line 1: /tmp/${marker}.txt: Read-only file system`;
349349
const sandboxBody = [
350-
`- If it would be reasonable to extend the sandbox rules, work with the user to update allowWrite for file system access problems in ${sandboxFileSystemSetting}, or to add required domains to chat.agent.sandboxNetwork.allowedDomains.`,
350+
`- If it would be reasonable to extend the sandbox rules, work with the user to update allowWrite for file system access problems in ${sandboxFileSystemSetting}, or to add required domains to chat.agent.sandbox.allowedNetworkDomains.`,
351351
'- Otherwise, immediately retry the command with requestUnsandboxedExecution=true. Do NOT ask the user \u2014 setting this flag automatically shows a confirmation prompt to the user.',
352352
'',
353353
'Here is the output of the command:',

src/vs/workbench/contrib/telemetry/browser/telemetry.contribution.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -445,6 +445,7 @@ class ConfigurationTelemetryContribution extends Disposable implements IWorkbenc
445445
}>('terminal.integrated.suggest.enabled', { settingValue: this.getValueToReport(key, target), source });
446446
return;
447447
case TerminalContribSettingId.AgentSandboxEnabled:
448+
case TerminalContribSettingId.DeprecatedAgentSandboxEnabled:
448449
this.telemetryService.publicLog2<UpdatedSettingEvent, {
449450
owner: 'isidorn';
450451
comment: 'This is used to know if agent sandbox is enabled or not';

src/vs/workbench/contrib/terminal/common/terminalConfiguration.ts

Lines changed: 25 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -712,83 +712,66 @@ export async function registerTerminalConfiguration(getFontSnippets: () => Promi
712712

713713
Registry.as<IConfigurationMigrationRegistry>(WorkbenchExtensions.ConfigurationMigration)
714714
.registerConfigurationMigrations([{
715-
key: TerminalSettingId.EnableBell,
716-
migrateFn: (enableBell, accessor) => {
717-
const configurationKeyValuePairs: ConfigurationKeyValuePairs = [];
718-
let announcement = accessor('accessibility.signals.terminalBell')?.announcement ?? accessor('accessibility.alert.terminalBell');
719-
if (announcement !== undefined && !isString(announcement)) {
720-
announcement = announcement ? 'auto' : 'off';
721-
}
722-
configurationKeyValuePairs.push(['accessibility.signals.terminalBell', { value: { sound: enableBell ? 'on' : 'off', announcement } }]);
723-
configurationKeyValuePairs.push([TerminalSettingId.EnableBell, { value: undefined }]);
724-
configurationKeyValuePairs.push([TerminalSettingId.EnableVisualBell, { value: enableBell }]);
725-
return configurationKeyValuePairs;
726-
}
727-
}]);
728-
729-
Registry.as<IConfigurationMigrationRegistry>(WorkbenchExtensions.ConfigurationMigration)
730-
.registerConfigurationMigrations([{
731-
key: TerminalContribSettingId.DeprecatedTerminalSandboxEnabled,
715+
key: TerminalContribSettingId.DeprecatedAgentSandboxEnabled,
732716
migrateFn: (value: boolean, valueAccessor) => {
733717
const configurationKeyValuePairs: ConfigurationKeyValuePairs = [];
734718
if (value !== undefined && valueAccessor(TerminalContribSettingId.AgentSandboxEnabled) === undefined) {
735-
configurationKeyValuePairs.push([TerminalContribSettingId.AgentSandboxEnabled, { value }]);
719+
configurationKeyValuePairs.push([TerminalContribSettingId.AgentSandboxEnabled, { value: value ? 'on' : 'off' }]);
736720
}
737-
configurationKeyValuePairs.push([TerminalContribSettingId.DeprecatedTerminalSandboxEnabled, { value: undefined }]);
721+
configurationKeyValuePairs.push([TerminalContribSettingId.DeprecatedAgentSandboxEnabled, { value: undefined }]);
738722
return configurationKeyValuePairs;
739723
}
740724
}, {
741-
key: TerminalContribSettingId.DeprecatedTerminalSandboxNetwork,
742-
migrateFn: (value: { allowedDomains?: string[]; deniedDomains?: string[] }, valueAccessor) => {
743-
const configurationKeyValuePairs: ConfigurationKeyValuePairs = [];
744-
if (value?.allowedDomains !== undefined && valueAccessor(TerminalContribSettingId.AgentSandboxNetworkAllowedDomains) === undefined) {
745-
configurationKeyValuePairs.push([TerminalContribSettingId.AgentSandboxNetworkAllowedDomains, { value: value.allowedDomains }]);
746-
}
747-
if (value?.deniedDomains !== undefined && valueAccessor(TerminalContribSettingId.AgentSandboxNetworkDeniedDomains) === undefined) {
748-
configurationKeyValuePairs.push([TerminalContribSettingId.AgentSandboxNetworkDeniedDomains, { value: value.deniedDomains }]);
749-
}
750-
configurationKeyValuePairs.push([TerminalContribSettingId.DeprecatedTerminalSandboxNetwork, { value: undefined }]);
751-
return configurationKeyValuePairs;
752-
}
753-
}, {
754-
key: TerminalContribSettingId.DeprecatedTerminalSandboxNetworkAllowedDomains,
725+
key: TerminalContribSettingId.DeprecatedAgentSandboxNetworkAllowedDomains,
755726
migrateFn: (value: string[], valueAccessor) => {
756727
const configurationKeyValuePairs: ConfigurationKeyValuePairs = [];
757728
if (value !== undefined && valueAccessor(TerminalContribSettingId.AgentSandboxNetworkAllowedDomains) === undefined) {
758729
configurationKeyValuePairs.push([TerminalContribSettingId.AgentSandboxNetworkAllowedDomains, { value }]);
759730
}
760-
configurationKeyValuePairs.push([TerminalContribSettingId.DeprecatedTerminalSandboxNetworkAllowedDomains, { value: undefined }]);
731+
configurationKeyValuePairs.push([TerminalContribSettingId.DeprecatedAgentSandboxNetworkAllowedDomains, { value: undefined }]);
761732
return configurationKeyValuePairs;
762733
}
763734
}, {
764-
key: TerminalContribSettingId.DeprecatedTerminalSandboxNetworkDeniedDomains,
735+
key: TerminalContribSettingId.DeprecatedAgentSandboxNetworkDeniedDomains,
765736
migrateFn: (value: string[], valueAccessor) => {
766737
const configurationKeyValuePairs: ConfigurationKeyValuePairs = [];
767738
if (value !== undefined && valueAccessor(TerminalContribSettingId.AgentSandboxNetworkDeniedDomains) === undefined) {
768739
configurationKeyValuePairs.push([TerminalContribSettingId.AgentSandboxNetworkDeniedDomains, { value }]);
769740
}
770-
configurationKeyValuePairs.push([TerminalContribSettingId.DeprecatedTerminalSandboxNetworkDeniedDomains, { value: undefined }]);
741+
configurationKeyValuePairs.push([TerminalContribSettingId.DeprecatedAgentSandboxNetworkDeniedDomains, { value: undefined }]);
771742
return configurationKeyValuePairs;
772743
}
773-
},
774-
{
775-
key: TerminalContribSettingId.DeprecatedTerminalSandboxLinuxFileSystem,
744+
}, {
745+
key: TerminalContribSettingId.DeprecatedAgentSandboxLinuxFileSystem,
776746
migrateFn: (value: { denyRead?: string[]; allowWrite?: string[]; denyWrite?: string[] }, valueAccessor) => {
777747
const configurationKeyValuePairs: ConfigurationKeyValuePairs = [];
778748
if (value !== undefined && valueAccessor(TerminalContribSettingId.AgentSandboxLinuxFileSystem) === undefined) {
779749
configurationKeyValuePairs.push([TerminalContribSettingId.AgentSandboxLinuxFileSystem, { value }]);
780750
}
781-
configurationKeyValuePairs.push([TerminalContribSettingId.DeprecatedTerminalSandboxLinuxFileSystem, { value: undefined }]);
751+
configurationKeyValuePairs.push([TerminalContribSettingId.DeprecatedAgentSandboxLinuxFileSystem, { value: undefined }]);
782752
return configurationKeyValuePairs;
783753
}
784754
}, {
785-
key: TerminalContribSettingId.DeprecatedTerminalSandboxMacFileSystem,
755+
key: TerminalContribSettingId.DeprecatedAgentSandboxMacFileSystem,
786756
migrateFn: (value: { denyRead?: string[]; allowWrite?: string[]; denyWrite?: string[] }, valueAccessor) => {
787757
const configurationKeyValuePairs: ConfigurationKeyValuePairs = [];
788758
if (value !== undefined && valueAccessor(TerminalContribSettingId.AgentSandboxMacFileSystem) === undefined) {
789759
configurationKeyValuePairs.push([TerminalContribSettingId.AgentSandboxMacFileSystem, { value }]);
790760
}
791-
configurationKeyValuePairs.push([TerminalContribSettingId.DeprecatedTerminalSandboxMacFileSystem, { value: undefined }]);
761+
configurationKeyValuePairs.push([TerminalContribSettingId.DeprecatedAgentSandboxMacFileSystem, { value: undefined }]);
762+
return configurationKeyValuePairs;
763+
}
764+
}, {
765+
key: TerminalSettingId.EnableBell,
766+
migrateFn: (enableBell, accessor) => {
767+
const configurationKeyValuePairs: ConfigurationKeyValuePairs = [];
768+
let announcement = accessor('accessibility.signals.terminalBell')?.announcement ?? accessor('accessibility.alert.terminalBell');
769+
if (announcement !== undefined && !isString(announcement)) {
770+
announcement = announcement ? 'auto' : 'off';
771+
}
772+
configurationKeyValuePairs.push(['accessibility.signals.terminalBell', { value: { sound: enableBell ? 'on' : 'off', announcement } }]);
773+
configurationKeyValuePairs.push([TerminalSettingId.EnableBell, { value: undefined }]);
774+
configurationKeyValuePairs.push([TerminalSettingId.EnableVisualBell, { value: enableBell }]);
792775
return configurationKeyValuePairs;
793776
}
794777
}]);

src/vs/workbench/contrib/terminal/terminalContribExports.ts

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,11 @@ export const enum TerminalContribSettingId {
4747
ShellIntegrationTimeout = TerminalChatAgentToolsSettingId.ShellIntegrationTimeout,
4848
OutputLocation = TerminalChatAgentToolsSettingId.OutputLocation,
4949
AgentSandboxEnabled = TerminalChatAgentToolsSettingId.AgentSandboxEnabled,
50-
DeprecatedTerminalSandboxNetwork = TerminalChatAgentToolsSettingId.DeprecatedTerminalSandboxNetwork,
51-
DeprecatedTerminalSandboxEnabled = TerminalChatAgentToolsSettingId.DeprecatedTerminalSandboxEnabled,
52-
DeprecatedTerminalSandboxNetworkAllowedDomains = TerminalChatAgentToolsSettingId.DeprecatedTerminalSandboxNetworkAllowedDomains,
53-
DeprecatedTerminalSandboxNetworkDeniedDomains = TerminalChatAgentToolsSettingId.DeprecatedTerminalSandboxNetworkDeniedDomains,
54-
DeprecatedTerminalSandboxLinuxFileSystem = TerminalChatAgentToolsSettingId.DeprecatedTerminalSandboxLinuxFileSystem,
55-
DeprecatedTerminalSandboxMacFileSystem = TerminalChatAgentToolsSettingId.DeprecatedTerminalSandboxMacFileSystem,
50+
DeprecatedAgentSandboxEnabled = TerminalChatAgentToolsSettingId.DeprecatedAgentSandboxEnabled,
51+
DeprecatedAgentSandboxNetworkAllowedDomains = TerminalChatAgentToolsSettingId.DeprecatedAgentSandboxNetworkAllowedDomains,
52+
DeprecatedAgentSandboxNetworkDeniedDomains = TerminalChatAgentToolsSettingId.DeprecatedAgentSandboxNetworkDeniedDomains,
53+
DeprecatedAgentSandboxLinuxFileSystem = TerminalChatAgentToolsSettingId.DeprecatedAgentSandboxLinuxFileSystem,
54+
DeprecatedAgentSandboxMacFileSystem = TerminalChatAgentToolsSettingId.DeprecatedAgentSandboxMacFileSystem,
5655
AgentSandboxNetworkAllowedDomains = TerminalChatAgentToolsSettingId.AgentSandboxNetworkAllowedDomains,
5756
AgentSandboxNetworkDeniedDomains = TerminalChatAgentToolsSettingId.AgentSandboxNetworkDeniedDomains,
5857
AgentSandboxLinuxFileSystem = TerminalChatAgentToolsSettingId.AgentSandboxLinuxFileSystem,

src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/terminal.chatAgentTools.contribution.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -140,11 +140,15 @@ export class ChatAgentToolsContribution extends Disposable implements IWorkbench
140140
this._register(this._configurationService.onDidChangeConfiguration(e => {
141141
if (
142142
e.affectsConfiguration(TerminalChatAgentToolsSettingId.AgentSandboxEnabled) ||
143+
e.affectsConfiguration(TerminalChatAgentToolsSettingId.DeprecatedAgentSandboxEnabled) ||
143144
e.affectsConfiguration(TerminalChatAgentToolsSettingId.AgentSandboxNetworkAllowedDomains) ||
145+
e.affectsConfiguration(TerminalChatAgentToolsSettingId.DeprecatedAgentSandboxNetworkAllowedDomains) ||
144146
e.affectsConfiguration(TerminalChatAgentToolsSettingId.AgentSandboxNetworkDeniedDomains) ||
145-
e.affectsConfiguration(TerminalChatAgentToolsSettingId.DeprecatedTerminalSandboxEnabled) ||
146-
e.affectsConfiguration(TerminalChatAgentToolsSettingId.DeprecatedTerminalSandboxNetworkAllowedDomains) ||
147-
e.affectsConfiguration(TerminalChatAgentToolsSettingId.DeprecatedTerminalSandboxNetworkDeniedDomains)
147+
e.affectsConfiguration(TerminalChatAgentToolsSettingId.DeprecatedAgentSandboxNetworkDeniedDomains) ||
148+
e.affectsConfiguration(TerminalChatAgentToolsSettingId.AgentSandboxLinuxFileSystem) ||
149+
e.affectsConfiguration(TerminalChatAgentToolsSettingId.DeprecatedAgentSandboxLinuxFileSystem) ||
150+
e.affectsConfiguration(TerminalChatAgentToolsSettingId.AgentSandboxMacFileSystem) ||
151+
e.affectsConfiguration(TerminalChatAgentToolsSettingId.DeprecatedAgentSandboxMacFileSystem)
148152
) {
149153
this._registerRunInTerminalTool();
150154
}

src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -901,20 +901,20 @@ export class RunInTerminalTool extends Disposable implements IToolImpl {
901901
private _getBlockedDomainReason(blockedDomains: string[], deniedDomains: string[] = []): string {
902902
if (deniedDomains.length === blockedDomains.length && deniedDomains.length > 0) {
903903
if (blockedDomains.length === 1) {
904-
return localize('runInTerminal.unsandboxed.domain.reason.denied.single', "This command accesses {0}, which is blocked by chat.agent.sandboxNetwork.deniedDomains.", blockedDomains[0]);
904+
return localize('runInTerminal.unsandboxed.domain.reason.denied.single', "This command accesses {0}, which is blocked by chat.agent.sandbox.deniedNetworkDomains.", blockedDomains[0]);
905905
}
906-
return localize('runInTerminal.unsandboxed.domain.reason.denied.multi', "This command accesses {0} and {1} more domains that are blocked by chat.agent.sandboxNetwork.deniedDomains.", blockedDomains[0], blockedDomains.length - 1);
906+
return localize('runInTerminal.unsandboxed.domain.reason.denied.multi', "This command accesses {0} and {1} more domains that are blocked by chat.agent.sandbox.deniedNetworkDomains.", blockedDomains[0], blockedDomains.length - 1);
907907
}
908908
if (deniedDomains.length > 0) {
909909
if (blockedDomains.length === 1) {
910-
return localize('runInTerminal.unsandboxed.domain.reason.mixed.single', "This command accesses {0}, which is blocked by chat.agent.sandboxNetwork.deniedDomains or not added to chat.agent.sandboxNetwork.allowedDomains.", blockedDomains[0]);
910+
return localize('runInTerminal.unsandboxed.domain.reason.mixed.single', "This command accesses {0}, which is blocked by chat.agent.sandbox.deniedNetworkDomains or not added to chat.agent.sandbox.allowedNetworkDomains.", blockedDomains[0]);
911911
}
912-
return localize('runInTerminal.unsandboxed.domain.reason.mixed.multi', "This command accesses {0} and {1} more domains that are blocked by chat.agent.sandboxNetwork.deniedDomains or not added to chat.agent.sandboxNetwork.allowedDomains.", blockedDomains[0], blockedDomains.length - 1);
912+
return localize('runInTerminal.unsandboxed.domain.reason.mixed.multi', "This command accesses {0} and {1} more domains that are blocked by chat.agent.sandbox.deniedNetworkDomains or not added to chat.agent.sandbox.allowedNetworkDomains.", blockedDomains[0], blockedDomains.length - 1);
913913
}
914914
if (blockedDomains.length === 1) {
915-
return localize('runInTerminal.unsandboxed.domain.reason.single', "This command accesses {0}, which is not permitted by the current chat.agent.sandboxNetwork configuration.", blockedDomains[0]);
915+
return localize('runInTerminal.unsandboxed.domain.reason.single', "This command accesses {0}, which is not permitted by the current chat.agent.sandbox configuration.", blockedDomains[0]);
916916
}
917-
return localize('runInTerminal.unsandboxed.domain.reason.multi', "This command accesses {0} and {1} more domains that are not permitted by the current chat.agent.sandboxNetwork configuration.", blockedDomains[0], blockedDomains.length - 1);
917+
return localize('runInTerminal.unsandboxed.domain.reason.multi', "This command accesses {0} and {1} more domains that are not permitted by the current chat.agent.sandbox configuration.", blockedDomains[0], blockedDomains.length - 1);
918918
}
919919

920920
async invoke(invocation: IToolInvocation, _countTokens: CountTokensCallback, _progress: ToolProgress, token: CancellationToken): Promise<IToolResult> {

0 commit comments

Comments
 (0)