Path: blob/main/extensions/copilot/src/extension/externalAgents/vscode-node/lmProxyContrib.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 { IAuthenticationService } from '../../../platform/authentication/common/authentication';7import { Disposable, MutableDisposable } from '../../../util/vs/base/common/lifecycle';8import { IInstantiationService } from '../../../util/vs/platform/instantiation/common/instantiation';9import { IExtensionContribution } from '../../common/contributions';10import { LanguageModelProxyProvider } from '../node/modelProxyProvider';11import { Event } from '../../../util/vs/base/common/event';12import { IConfigurationService } from '../../../platform/configuration/common/configurationService';1314export class LanguageModelProxyContrib extends Disposable implements IExtensionContribution {15readonly id = 'LanguageModelProxy';1617constructor(18@IInstantiationService instantiationService: IInstantiationService,19@IAuthenticationService authenticationService: IAuthenticationService,20@IConfigurationService configurationService: IConfigurationService,21) {22super();2324const providerDisposable = this._register(new MutableDisposable<vscode.Disposable>());25const updateRegistration = () => {26const token = authenticationService.copilotToken;2728const enableProxy = token && (token.codexAgentEnabled || configurationService.getNonExtensionConfig('chat.experimental.codex.enabled'));29if (!providerDisposable.value && enableProxy) {30providerDisposable.value = vscode.lm.registerLanguageModelProxyProvider(instantiationService.createInstance(LanguageModelProxyProvider));31} else if (providerDisposable.value && !enableProxy) {32providerDisposable.clear();33}34};3536this._register(Event.runAndSubscribe(authenticationService.onDidAuthenticationChange, updateRegistration));37}38}3940