Skip to content

Commit

Permalink
Contribute agent setting from vscode, with experiment to control visi…
Browse files Browse the repository at this point in the history
…bility
  • Loading branch information
roblourens committed Jan 31, 2025
1 parent bc75335 commit 5a67fc1
Showing 1 changed file with 58 additions and 2 deletions.
60 changes: 58 additions & 2 deletions src/vs/workbench/contrib/chat/browser/chat.contribution.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down Expand Up @@ -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<IConfigurationRegistry>(ConfigurationExtensions.Configuration);
Expand Down Expand Up @@ -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<boolean>('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());
Expand Down Expand Up @@ -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();
Expand Down

0 comments on commit 5a67fc1

Please sign in to comment.