From 14270fe0465a51edb7ed78bfffc08fa253e4e4e8 Mon Sep 17 00:00:00 2001 From: Rob Lourens Date: Mon, 3 Feb 2025 14:29:54 -0800 Subject: [PATCH] Safer fix for 239274 (#239511) * Revert "fix config-context-key handling when config isn't known yet (#239294)" This reverts commit d231e6ca13225ff4cbd715566263dc5f2e5792d6. * Ensure agentModeDisallowed key always changes when setting is registered --- .../platform/contextkey/browser/contextKeyService.ts | 11 +---------- .../contrib/chat/browser/chat.contribution.ts | 2 +- .../contrib/chat/browser/languageModelToolsService.ts | 5 +---- src/vs/workbench/contrib/chat/common/chatAgents.ts | 2 -- .../workbench/contrib/chat/common/chatContextKeys.ts | 2 +- 5 files changed, 4 insertions(+), 18 deletions(-) diff --git a/src/vs/platform/contextkey/browser/contextKeyService.ts b/src/vs/platform/contextkey/browser/contextKeyService.ts index 9050372ac654f..bb3c267c0bcf1 100644 --- a/src/vs/platform/contextkey/browser/contextKeyService.ts +++ b/src/vs/platform/contextkey/browser/contextKeyService.ts @@ -103,7 +103,6 @@ class ConfigAwareContextValuesContainer extends Context { private static readonly _keyPrefix = 'config.'; private readonly _values = TernarySearchTree.forConfigKeys(); - private readonly _missed = TernarySearchTree.forConfigKeys(); private readonly _listener: IDisposable; constructor( @@ -118,10 +117,7 @@ class ConfigAwareContextValuesContainer extends Context { // new setting, reset everything const allKeys = Array.from(this._values, ([k]) => k); this._values.clear(); - emitter.fire(new CompositeContextKeyChangeEvent([ - new ArrayContextKeyChangeEvent(allKeys), - new ArrayContextKeyChangeEvent(Array.from(this._missed, ([k]) => k)) - ])); + emitter.fire(new ArrayContextKeyChangeEvent(allKeys)); } else { const changedKeys: string[] = []; for (const configKey of event.affectedKeys) { @@ -176,11 +172,6 @@ class ConfigAwareContextValuesContainer extends Context { } this._values.set(key, value); - if (value === undefined) { - this._missed.set(key, true); - } else { - this._missed.delete(key); - } return value; } diff --git a/src/vs/workbench/contrib/chat/browser/chat.contribution.ts b/src/vs/workbench/contrib/chat/browser/chat.contribution.ts index a70ee0fa2c298..9c08bd4fca76e 100644 --- a/src/vs/workbench/contrib/chat/browser/chat.contribution.ts +++ b/src/vs/workbench/contrib/chat/browser/chat.contribution.ts @@ -242,8 +242,8 @@ class ChatAgentSettingContribution implements IWorkbenchContribution { this.registerSetting(); } else if (value === false) { this.deregisterSetting(); - expDisabledKey.set(true); } + expDisabledKey.set(!value); }); } diff --git a/src/vs/workbench/contrib/chat/browser/languageModelToolsService.ts b/src/vs/workbench/contrib/chat/browser/languageModelToolsService.ts index 9e4fc75059ba7..9e3d66aeca9de 100644 --- a/src/vs/workbench/contrib/chat/browser/languageModelToolsService.ts +++ b/src/vs/workbench/contrib/chat/browser/languageModelToolsService.ts @@ -67,10 +67,7 @@ export class LanguageModelToolsService extends Disposable implements ILanguageMo this._tools.set(toolData.id, { data: toolData }); this._onDidChangeToolsScheduler.schedule(); - if (toolData.when) { - this._contextKeyService.contextMatchesRules(toolData.when); - toolData.when.keys().forEach(key => this._toolContextKeys.add(key)); - } + toolData.when?.keys().forEach(key => this._toolContextKeys.add(key)); return toDisposable(() => { this._tools.delete(toolData.id); diff --git a/src/vs/workbench/contrib/chat/common/chatAgents.ts b/src/vs/workbench/contrib/chat/common/chatAgents.ts index 706b3c1fc0720..2a0c9041319f5 100644 --- a/src/vs/workbench/contrib/chat/common/chatAgents.ts +++ b/src/vs/workbench/contrib/chat/common/chatAgents.ts @@ -307,8 +307,6 @@ export class ChatAgentService extends Disposable implements IChatAgentService { this._agents.set(id, entry); this._updateAgentsContextKeys(); this._updateContextKeys(); - this._agentIsEnabled(entry); - this._onDidChangeAgents.fire(undefined); return toDisposable(() => { diff --git a/src/vs/workbench/contrib/chat/common/chatContextKeys.ts b/src/vs/workbench/contrib/chat/common/chatContextKeys.ts index 4a2798b9f0ebd..591bbdcad92c8 100644 --- a/src/vs/workbench/contrib/chat/common/chatContextKeys.ts +++ b/src/vs/workbench/contrib/chat/common/chatContextKeys.ts @@ -83,6 +83,6 @@ export namespace ChatContextKeys { export const Editing = { hasToolsAgent: new RawContextKey('chatHasToolsAgent', false, { type: 'boolean', description: localize('chatEditingHasToolsAgent', "True when a tools agent is registered.") }), agentMode: new RawContextKey('chatAgentMode', false, { type: 'boolean', description: localize('chatEditingAgentMode', "True when edits is in agent mode.") }), - agentModeDisallowed: new RawContextKey('chatAgentModeDisallowed', false, { type: 'boolean', description: localize('chatAgentModeDisallowed', "True when agent mode is not allowed.") }), // experiment-driven disablement + agentModeDisallowed: new RawContextKey('chatAgentModeDisallowed', undefined, { type: 'boolean', description: localize('chatAgentModeDisallowed', "True when agent mode is not allowed.") }), // experiment-driven disablement }; }