Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/extensions/copilot/src/extension/externalAgents/vscode-node/lmProxyContrib.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 { IAuthenticationService } from '../../../platform/authentication/common/authentication';
8
import { Disposable, MutableDisposable } from '../../../util/vs/base/common/lifecycle';
9
import { IInstantiationService } from '../../../util/vs/platform/instantiation/common/instantiation';
10
import { IExtensionContribution } from '../../common/contributions';
11
import { LanguageModelProxyProvider } from '../node/modelProxyProvider';
12
import { Event } from '../../../util/vs/base/common/event';
13
import { IConfigurationService } from '../../../platform/configuration/common/configurationService';
14
15
export class LanguageModelProxyContrib extends Disposable implements IExtensionContribution {
16
readonly id = 'LanguageModelProxy';
17
18
constructor(
19
@IInstantiationService instantiationService: IInstantiationService,
20
@IAuthenticationService authenticationService: IAuthenticationService,
21
@IConfigurationService configurationService: IConfigurationService,
22
) {
23
super();
24
25
const providerDisposable = this._register(new MutableDisposable<vscode.Disposable>());
26
const updateRegistration = () => {
27
const token = authenticationService.copilotToken;
28
29
const enableProxy = token && (token.codexAgentEnabled || configurationService.getNonExtensionConfig('chat.experimental.codex.enabled'));
30
if (!providerDisposable.value && enableProxy) {
31
providerDisposable.value = vscode.lm.registerLanguageModelProxyProvider(instantiationService.createInstance(LanguageModelProxyProvider));
32
} else if (providerDisposable.value && !enableProxy) {
33
providerDisposable.clear();
34
}
35
};
36
37
this._register(Event.runAndSubscribe(authenticationService.onDidAuthenticationChange, updateRegistration));
38
}
39
}
40