Skip to content

Commit 3e02f7c

Browse files
authored
Merge pull request microsoft#261321 from microsoft/copilot/fix-261319
Add auto-approval messages for global chat.tools.autoApprove setting
2 parents 9f618ef + e7eead4 commit 3e02f7c

2 files changed

Lines changed: 37 additions & 24 deletions

File tree

src/vs/workbench/contrib/chat/browser/chatContentParts/toolInvocationParts/chatTerminalToolProgressPart.ts

Lines changed: 28 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -72,28 +72,34 @@ export class ChatTerminalToolProgressPart extends BaseChatToolInvocationSubPart
7272
const [type, scopeRaw] = content.split('_');
7373
switch (type) {
7474
case 'settings': {
75-
const scope = parseInt(scopeRaw);
76-
const target = !isNaN(scope) ? scope as ConfigurationTarget : undefined;
77-
const options: IOpenSettingsOptions = {
78-
jsonEditor: true,
79-
revealSetting: {
80-
key: TerminalContribSettingId.AutoApprove
81-
}
82-
};
83-
switch (target) {
84-
case ConfigurationTarget.APPLICATION: preferencesService.openApplicationSettings(options); break;
85-
case ConfigurationTarget.USER:
86-
case ConfigurationTarget.USER_LOCAL: preferencesService.openUserSettings(options); break;
87-
case ConfigurationTarget.USER_REMOTE: preferencesService.openRemoteSettings(options); break;
88-
case ConfigurationTarget.WORKSPACE:
89-
case ConfigurationTarget.WORKSPACE_FOLDER: preferencesService.openWorkspaceSettings(options); break;
90-
default: {
91-
// Fallback if something goes wrong
92-
preferencesService.openSettings({
93-
target: ConfigurationTarget.USER,
94-
query: `@id:${TerminalContribSettingId.AutoApprove}`,
95-
});
96-
break;
75+
if (scopeRaw === 'global') {
76+
preferencesService.openSettings({
77+
query: `@id:chat.tools.autoApprove`
78+
});
79+
} else {
80+
const scope = parseInt(scopeRaw);
81+
const target = !isNaN(scope) ? scope as ConfigurationTarget : undefined;
82+
const options: IOpenSettingsOptions = {
83+
jsonEditor: true,
84+
revealSetting: {
85+
key: TerminalContribSettingId.AutoApprove
86+
}
87+
};
88+
switch (target) {
89+
case ConfigurationTarget.APPLICATION: preferencesService.openApplicationSettings(options); break;
90+
case ConfigurationTarget.USER:
91+
case ConfigurationTarget.USER_LOCAL: preferencesService.openUserSettings(options); break;
92+
case ConfigurationTarget.USER_REMOTE: preferencesService.openRemoteSettings(options); break;
93+
case ConfigurationTarget.WORKSPACE:
94+
case ConfigurationTarget.WORKSPACE_FOLDER: preferencesService.openWorkspaceSettings(options); break;
95+
default: {
96+
// Fallback if something goes wrong
97+
preferencesService.openSettings({
98+
target: ConfigurationTarget.USER,
99+
query: `@id:${TerminalContribSettingId.AutoApprove}`,
100+
});
101+
break;
102+
}
97103
}
98104
}
99105
break;

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

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ import type { TerminalNewAutoApproveButtonData } from '../../../../chat/browser/
4343
import { basename } from '../../../../../../base/common/path.js';
4444
import type { SingleOrMany } from '../../../../../../base/common/types.js';
4545
import { asArray } from '../../../../../../base/common/arrays.js';
46+
import { IConfigurationService } from '../../../../../../platform/configuration/common/configuration.js';
4647

4748
const TERMINAL_SESSION_STORAGE_KEY = 'chat.terminalSessions';
4849

@@ -156,6 +157,7 @@ export class RunInTerminalTool extends Disposable implements IToolImpl {
156157

157158
constructor(
158159
@IInstantiationService private readonly _instantiationService: IInstantiationService,
160+
@IConfigurationService private readonly _configurationService: IConfigurationService,
159161
@ILanguageModelToolsService private readonly _languageModelToolsService: ILanguageModelToolsService,
160162
@IStorageService private readonly _storageService: IStorageService,
161163
@ITelemetryService private readonly _telemetryService: ITelemetryService,
@@ -265,7 +267,12 @@ export class RunInTerminalTool extends Disposable implements IToolImpl {
265267
return `[\`${e.rule!.sourceText}\`](settings_${e.rule!.sourceTarget} "${localize('ruleTooltip', 'View rule in settings')}")`;
266268
}).join(', ');
267269
}
268-
if (isAutoApproved) {
270+
271+
const config = this._configurationService.inspect<boolean | Record<string, boolean>>('chat.tools.autoApprove');
272+
const isGlobalAutoApproved = config?.value ?? config.defaultValue;
273+
if (isGlobalAutoApproved) {
274+
autoApproveInfo = new MarkdownString(`_${localize('autoApprove.global', 'Auto approved by setting {0}', `[\`chat.tools.autoApprove\`](settings_global "${localize('ruleTooltip.global', 'View settings')}")`)}_`);
275+
} else if (isAutoApproved) {
269276
switch (autoApproveReason) {
270277
case 'commandLine': {
271278
if (commandLineResult.rule) {
@@ -585,7 +592,7 @@ export class RunInTerminalTool extends Disposable implements IToolImpl {
585592
}
586593

587594
return {
588-
toolResultMessage: new MarkdownString(toolResultMessage),
595+
toolResultMessage: toolResultMessage ? new MarkdownString(toolResultMessage) : undefined,
589596
content: [{
590597
kind: 'text',
591598
value: resultText.join(''),

0 commit comments

Comments
 (0)