Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/extensions/copilot/src/extension/agents/vscode-node/promptFileContrib.ts
13399 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import * as vscode from 'vscode';
7
import { ConfigKey, IConfigurationService } from '../../../platform/configuration/common/configurationService';
8
import { IExperimentationService } from '../../../platform/telemetry/common/nullExperimentationService';
9
import { combinedDisposable, Disposable, MutableDisposable } from '../../../util/vs/base/common/lifecycle';
10
import { SyncDescriptor } from '../../../util/vs/platform/instantiation/common/descriptors';
11
import { IInstantiationService } from '../../../util/vs/platform/instantiation/common/instantiation';
12
import { IExtensionContribution } from '../../common/contributions';
13
import { AskAgentProvider } from './askAgentProvider';
14
import { EditModeAgentProvider } from './editModeAgentProvider';
15
import { ExploreAgentProvider } from './exploreAgentProvider';
16
import { GitHubOrgCustomAgentProvider } from './githubOrgCustomAgentProvider';
17
import { GitHubOrgInstructionsProvider } from './githubOrgInstructionsProvider';
18
import { PlanAgentProvider } from './planAgentProvider';
19
20
export class PromptFileContribution extends Disposable implements IExtensionContribution {
21
readonly id = 'PromptFiles';
22
23
constructor(
24
@IInstantiationService instantiationService: IInstantiationService,
25
@IConfigurationService configurationService: IConfigurationService,
26
@IExperimentationService experimentationService: IExperimentationService,
27
) {
28
super();
29
30
// Register custom agent provider
31
if ('registerCustomAgentProvider' in vscode.chat) {
32
const editModeProviderRegistration = this._register(new MutableDisposable<vscode.Disposable>());
33
const editModeHiddenSetting = 'chat.editMode.hidden';
34
const updateEditModeProvider = () => {
35
const isEditModeHidden = configurationService.getNonExtensionConfig<boolean>(editModeHiddenSetting);
36
if (!isEditModeHidden) {
37
if (!editModeProviderRegistration.value) {
38
editModeProviderRegistration.value = vscode.chat.registerCustomAgentProvider(instantiationService.createInstance(EditModeAgentProvider));
39
}
40
} else {
41
editModeProviderRegistration.clear();
42
}
43
};
44
45
updateEditModeProvider();
46
this._register(configurationService.onDidChangeConfiguration(e => {
47
if (e.affectsConfiguration(editModeHiddenSetting)) {
48
updateEditModeProvider();
49
}
50
}));
51
52
// Only register the provider if the setting is enabled
53
if (configurationService.getConfig(ConfigKey.EnableOrganizationCustomAgents)) {
54
const githubOrgAgentProvider: vscode.ChatCustomAgentProvider = instantiationService.createInstance(new SyncDescriptor(GitHubOrgCustomAgentProvider));
55
this._register(vscode.chat.registerCustomAgentProvider(githubOrgAgentProvider));
56
}
57
58
// Register Plan agent provider for dynamic settings-based customization
59
const planProvider = instantiationService.createInstance(PlanAgentProvider);
60
this._register(vscode.chat.registerCustomAgentProvider(planProvider));
61
62
// Register Ask agent provider for read-only Q&A mode
63
const askProvider = instantiationService.createInstance(AskAgentProvider);
64
this._register(vscode.chat.registerCustomAgentProvider(askProvider));
65
66
// Register Explore agent provider for code research subagent
67
const exploreProviderRegistration = this._register(new MutableDisposable<vscode.Disposable>());
68
const updateExploreProvider = () => {
69
const isEnabled = configurationService.getExperimentBasedConfig(ConfigKey.ExploreAgentEnabled, experimentationService);
70
if (isEnabled) {
71
if (!exploreProviderRegistration.value) {
72
const provider = instantiationService.createInstance(ExploreAgentProvider);
73
const registration = vscode.chat.registerCustomAgentProvider(provider);
74
exploreProviderRegistration.value = combinedDisposable(registration, provider);
75
}
76
} else {
77
exploreProviderRegistration.clear();
78
}
79
};
80
updateExploreProvider();
81
this._register(configurationService.onDidChangeConfiguration(e => {
82
if (e.affectsConfiguration(ConfigKey.ExploreAgentEnabled.fullyQualifiedId)) {
83
updateExploreProvider();
84
}
85
}));
86
}
87
88
// Register instructions provider
89
if ('registerInstructionsProvider' in vscode.chat) {
90
// Only register the provider if the setting is enabled
91
if (configurationService.getConfig(ConfigKey.EnableOrganizationInstructions)) {
92
const githubOrgInstructionsProvider: vscode.ChatInstructionsProvider = instantiationService.createInstance(new SyncDescriptor(GitHubOrgInstructionsProvider));
93
this._register(vscode.chat.registerInstructionsProvider(githubOrgInstructionsProvider));
94
}
95
}
96
}
97
}
98
99