Path: blob/main/extensions/copilot/src/extension/agents/vscode-node/promptFileContrib.ts
13399 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import * as vscode from 'vscode';6import { ConfigKey, IConfigurationService } from '../../../platform/configuration/common/configurationService';7import { IExperimentationService } from '../../../platform/telemetry/common/nullExperimentationService';8import { combinedDisposable, Disposable, MutableDisposable } from '../../../util/vs/base/common/lifecycle';9import { SyncDescriptor } from '../../../util/vs/platform/instantiation/common/descriptors';10import { IInstantiationService } from '../../../util/vs/platform/instantiation/common/instantiation';11import { IExtensionContribution } from '../../common/contributions';12import { AskAgentProvider } from './askAgentProvider';13import { EditModeAgentProvider } from './editModeAgentProvider';14import { ExploreAgentProvider } from './exploreAgentProvider';15import { GitHubOrgCustomAgentProvider } from './githubOrgCustomAgentProvider';16import { GitHubOrgInstructionsProvider } from './githubOrgInstructionsProvider';17import { PlanAgentProvider } from './planAgentProvider';1819export class PromptFileContribution extends Disposable implements IExtensionContribution {20readonly id = 'PromptFiles';2122constructor(23@IInstantiationService instantiationService: IInstantiationService,24@IConfigurationService configurationService: IConfigurationService,25@IExperimentationService experimentationService: IExperimentationService,26) {27super();2829// Register custom agent provider30if ('registerCustomAgentProvider' in vscode.chat) {31const editModeProviderRegistration = this._register(new MutableDisposable<vscode.Disposable>());32const editModeHiddenSetting = 'chat.editMode.hidden';33const updateEditModeProvider = () => {34const isEditModeHidden = configurationService.getNonExtensionConfig<boolean>(editModeHiddenSetting);35if (!isEditModeHidden) {36if (!editModeProviderRegistration.value) {37editModeProviderRegistration.value = vscode.chat.registerCustomAgentProvider(instantiationService.createInstance(EditModeAgentProvider));38}39} else {40editModeProviderRegistration.clear();41}42};4344updateEditModeProvider();45this._register(configurationService.onDidChangeConfiguration(e => {46if (e.affectsConfiguration(editModeHiddenSetting)) {47updateEditModeProvider();48}49}));5051// Only register the provider if the setting is enabled52if (configurationService.getConfig(ConfigKey.EnableOrganizationCustomAgents)) {53const githubOrgAgentProvider: vscode.ChatCustomAgentProvider = instantiationService.createInstance(new SyncDescriptor(GitHubOrgCustomAgentProvider));54this._register(vscode.chat.registerCustomAgentProvider(githubOrgAgentProvider));55}5657// Register Plan agent provider for dynamic settings-based customization58const planProvider = instantiationService.createInstance(PlanAgentProvider);59this._register(vscode.chat.registerCustomAgentProvider(planProvider));6061// Register Ask agent provider for read-only Q&A mode62const askProvider = instantiationService.createInstance(AskAgentProvider);63this._register(vscode.chat.registerCustomAgentProvider(askProvider));6465// Register Explore agent provider for code research subagent66const exploreProviderRegistration = this._register(new MutableDisposable<vscode.Disposable>());67const updateExploreProvider = () => {68const isEnabled = configurationService.getExperimentBasedConfig(ConfigKey.ExploreAgentEnabled, experimentationService);69if (isEnabled) {70if (!exploreProviderRegistration.value) {71const provider = instantiationService.createInstance(ExploreAgentProvider);72const registration = vscode.chat.registerCustomAgentProvider(provider);73exploreProviderRegistration.value = combinedDisposable(registration, provider);74}75} else {76exploreProviderRegistration.clear();77}78};79updateExploreProvider();80this._register(configurationService.onDidChangeConfiguration(e => {81if (e.affectsConfiguration(ConfigKey.ExploreAgentEnabled.fullyQualifiedId)) {82updateExploreProvider();83}84}));85}8687// Register instructions provider88if ('registerInstructionsProvider' in vscode.chat) {89// Only register the provider if the setting is enabled90if (configurationService.getConfig(ConfigKey.EnableOrganizationInstructions)) {91const githubOrgInstructionsProvider: vscode.ChatInstructionsProvider = instantiationService.createInstance(new SyncDescriptor(GitHubOrgInstructionsProvider));92this._register(vscode.chat.registerInstructionsProvider(githubOrgInstructionsProvider));93}94}95}96}979899