From 37b74ec64d9d1149cdb2624b094ef178c9bf99d0 Mon Sep 17 00:00:00 2001 From: Josh Spicer <23246594+joshspicer@users.noreply.github.com> Date: Thu, 11 Dec 2025 15:02:42 -0800 Subject: [PATCH] tweaks to #282623 (#282889) * update chat.agent.enabled description * code suggestions * includeDisabled bug --- build/lib/policies/policyData.jsonc | 2 +- .../contrib/chat/browser/chat.contribution.ts | 4 ++-- .../chat/browser/languageModelToolsService.ts | 14 ++++++-------- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/build/lib/policies/policyData.jsonc b/build/lib/policies/policyData.jsonc index 252f57d854e..b8f4106fc97 100644 --- a/build/lib/policies/policyData.jsonc +++ b/build/lib/policies/policyData.jsonc @@ -163,7 +163,7 @@ "localization": { "description": { "key": "chat.agent.enabled.description", - "value": "Enable agent mode for chat. When this is enabled, agent mode can be activated via the dropdown in the view." + "value": "When enabled, agent mode can be activated from chat and tools in agentic contexts with side effects can be used." } }, "type": "boolean", diff --git a/src/vs/workbench/contrib/chat/browser/chat.contribution.ts b/src/vs/workbench/contrib/chat/browser/chat.contribution.ts index 8aa12890df4..a92b6f9b5e6 100644 --- a/src/vs/workbench/contrib/chat/browser/chat.contribution.ts +++ b/src/vs/workbench/contrib/chat/browser/chat.contribution.ts @@ -528,7 +528,7 @@ configurationRegistry.registerConfiguration({ }, [ChatConfiguration.AgentEnabled]: { type: 'boolean', - description: nls.localize('chat.agent.enabled.description', "Enable agent mode for chat. When this is enabled, agent mode can be activated via the dropdown in the view."), + description: nls.localize('chat.agent.enabled.description', "When enabled, agent mode can be activated from chat and tools in agentic contexts with side effects can be used."), default: true, policy: { name: 'ChatAgentMode', @@ -538,7 +538,7 @@ configurationRegistry.registerConfiguration({ localization: { description: { key: 'chat.agent.enabled.description', - value: nls.localize('chat.agent.enabled.description', "Enable agent mode for chat. When this is enabled, agent mode can be activated via the dropdown in the view."), + value: nls.localize('chat.agent.enabled.description', "When enabled, agent mode can be activated from chat and tools in agentic contexts with side effects can be used."), } } } diff --git a/src/vs/workbench/contrib/chat/browser/languageModelToolsService.ts b/src/vs/workbench/contrib/chat/browser/languageModelToolsService.ts index bdb16c80182..372d5b5bdfb 100644 --- a/src/vs/workbench/contrib/chat/browser/languageModelToolsService.ts +++ b/src/vs/workbench/contrib/chat/browser/languageModelToolsService.ts @@ -29,6 +29,7 @@ import { IDialogService } from '../../../../platform/dialogs/common/dialogs.js'; import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; import * as JSONContributionRegistry from '../../../../platform/jsonschemas/common/jsonContributionRegistry.js'; import { ILogService } from '../../../../platform/log/common/log.js'; +import { observableConfigValue } from '../../../../platform/observable/common/platformObservableUtils.js'; import { Registry } from '../../../../platform/registry/common/platform.js'; import { IStorageService, StorageScope, StorageTarget } from '../../../../platform/storage/common/storage.js'; import { ITelemetryService } from '../../../../platform/telemetry/common/telemetry.js'; @@ -93,7 +94,7 @@ export class LanguageModelToolsService extends Disposable implements ILanguageMo private readonly _callsByRequestId = new Map(); - private readonly _isAgentModeEnabled: IObservable; + private readonly _isAgentModeEnabled: IObservable; constructor( @IInstantiationService private readonly _instantiationService: IInstantiationService, @@ -111,11 +112,7 @@ export class LanguageModelToolsService extends Disposable implements ILanguageMo ) { super(); - this._isAgentModeEnabled = observableFromEventOpts( - { owner: this, equalsFn: () => false }, - Event.filter(this._configurationService.onDidChangeConfiguration, e => e.affectsConfiguration(ChatConfiguration.AgentEnabled)), - () => this._configurationService.getValue(ChatConfiguration.AgentEnabled) - ); + this._isAgentModeEnabled = observableConfigValue(ChatConfiguration.AgentEnabled, true, this._configurationService); this._register(this._contextKeyService.onDidChangeContext(e => { if (e.affectsSome(this._toolContextKeys)) { @@ -181,7 +178,7 @@ export class LanguageModelToolsService extends Disposable implements ILanguageMo * When agent mode is disabled only a subset of read-only tools are permitted in agentic-loop contexts. */ private isPermitted(toolOrToolSet: IToolData | ToolSet, reader?: IReader): boolean { - const agentModeEnabled = reader ? this._isAgentModeEnabled.read(reader) : this._isAgentModeEnabled.get(); + const agentModeEnabled = this._isAgentModeEnabled.read(reader); if (agentModeEnabled !== false) { return true; } @@ -272,7 +269,8 @@ export class LanguageModelToolsService extends Disposable implements ILanguageMo toolData => { const satisfiesWhenClause = includeDisabled || !toolData.when || this._contextKeyService.contextMatchesRules(toolData.when); const satisfiesExternalToolCheck = toolData.source.type !== 'extension' || !!extensionToolsEnabled; - return satisfiesWhenClause && satisfiesExternalToolCheck && this.isPermitted(toolData); + const satisfiesPermittedCheck = includeDisabled || this.isPermitted(toolData); + return satisfiesWhenClause && satisfiesExternalToolCheck && satisfiesPermittedCheck; }); }