diff --git a/src/vs/workbench/contrib/chat/browser/chat.contribution.ts b/src/vs/workbench/contrib/chat/browser/chat.contribution.ts index 6b6889506b52f..6bd5ee0427c88 100644 --- a/src/vs/workbench/contrib/chat/browser/chat.contribution.ts +++ b/src/vs/workbench/contrib/chat/browser/chat.contribution.ts @@ -13,13 +13,13 @@ import { registerEditorFeature } from '../../../../editor/common/editorFeatures. import * as nls from '../../../../nls.js'; import { AccessibleViewRegistry } from '../../../../platform/accessibility/browser/accessibleViewRegistry.js'; import { ICommandService } from '../../../../platform/commands/common/commands.js'; -import { Extensions as ConfigurationExtensions, ConfigurationScope, IConfigurationRegistry } from '../../../../platform/configuration/common/configurationRegistry.js'; +import { Extensions as ConfigurationExtensions, ConfigurationScope, IConfigurationNode, IConfigurationRegistry } from '../../../../platform/configuration/common/configurationRegistry.js'; import { SyncDescriptor } from '../../../../platform/instantiation/common/descriptors.js'; import { InstantiationType, registerSingleton } from '../../../../platform/instantiation/common/extensions.js'; import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; import { Registry } from '../../../../platform/registry/common/platform.js'; import { EditorPaneDescriptor, IEditorPaneRegistry } from '../../../browser/editor.js'; -import { WorkbenchPhase, registerWorkbenchContribution2 } from '../../../common/contributions.js'; +import { IWorkbenchContribution, WorkbenchPhase, registerWorkbenchContribution2 } from '../../../common/contributions.js'; import { EditorExtensions, IEditorFactoryRegistry } from '../../../common/editor.js'; import { IEditorResolverService, RegisteredEditorPriority } from '../../../services/editor/common/editorResolverService.js'; import { ChatAgentLocation, ChatAgentNameService, ChatAgentService, IChatAgentNameService, IChatAgentService } from '../common/chatAgents.js'; @@ -84,6 +84,8 @@ import { ChatEditorOverlayController } from './chatEditorOverlay.js'; import '../common/promptSyntax/languageFeatures/promptLinkProvider.js'; import { PromptFilesConfig } from '../common/promptSyntax/config.js'; import { BuiltinToolsContribution } from '../common/tools/tools.js'; +import { IWorkbenchAssignmentService } from '../../../services/assignment/common/assignmentService.js'; +import { IProductService } from '../../../../platform/product/common/productService.js'; // Register configuration const configurationRegistry = Registry.as(ConfigurationExtensions.Configuration); @@ -217,6 +219,59 @@ class ChatResolverContribution extends Disposable { } } +class ChatAgentSettingContribution implements IWorkbenchContribution { + + static readonly ID = 'workbench.contrib.chatAgentSetting'; + + private registeredNode: IConfigurationNode | undefined; + + constructor( + @IWorkbenchAssignmentService experimentService: IWorkbenchAssignmentService, + @IProductService private readonly productService: IProductService, + ) { + if (this.productService.quality !== 'stable') { + this.registerSetting(); + } + + experimentService.getTreatment('chatAgentEnabled').then(value => { + if (value) { + this.registerSetting(); + } else if (value === false) { + this.deregisterSetting(); + } + }); + } + + private registerSetting() { + if (this.registeredNode) { + return; + } + + this.registeredNode = { + id: 'chatAgent', + title: nls.localize('interactiveSessionConfigurationTitle', "Chat"), + type: 'object', + properties: { + 'chat.agent.enabled': { + type: 'boolean', + description: nls.localize('chat.agent.enabled.description', "Enable agent mode for {0}. When this is enabled, a dropdown appears in the {0} view to toggle agent mode.", 'Copilot Edits'), + default: this.productService.quality !== 'stable', + tags: ['experimental', 'onExp'], + }, + } + }; + console.log('registerSetting'); + configurationRegistry.registerConfiguration(this.registeredNode); + } + + private deregisterSetting() { + if (this.registeredNode) { + configurationRegistry.deregisterConfigurations([this.registeredNode]); + this.registeredNode = undefined; + } + } +} + AccessibleViewRegistry.register(new ChatResponseAccessibleView()); AccessibleViewRegistry.register(new PanelChatAccessibilityHelp()); AccessibleViewRegistry.register(new QuickChatAccessibilityHelp()); @@ -334,6 +389,7 @@ registerWorkbenchContribution2(ChatGettingStartedContribution.ID, ChatGettingSta registerWorkbenchContribution2(ChatSetupContribution.ID, ChatSetupContribution, WorkbenchPhase.BlockRestore); registerWorkbenchContribution2(ChatQuotasStatusBarEntry.ID, ChatQuotasStatusBarEntry, WorkbenchPhase.Eventually); registerWorkbenchContribution2(BuiltinToolsContribution.ID, BuiltinToolsContribution, WorkbenchPhase.Eventually); +registerWorkbenchContribution2(ChatAgentSettingContribution.ID, ChatAgentSettingContribution, WorkbenchPhase.BlockRestore); registerChatActions(); registerChatCopyActions();