Path: blob/main/src/vs/workbench/contrib/chat/browser/contextContrib/chatContext.contribution.ts
4780 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 { Disposable } from '../../../../../base/common/lifecycle.js';6import { ThemeIcon } from '../../../../../base/common/themables.js';7import { localize } from '../../../../../nls.js';89import { IWorkbenchContribution, registerWorkbenchContribution2, WorkbenchPhase } from '../../../../common/contributions.js';10import { IChatContextService } from './chatContextService.js';11import { isProposedApiEnabled } from '../../../../services/extensions/common/extensions.js';12import { ExtensionsRegistry } from '../../../../services/extensions/common/extensionsRegistry.js';1314interface IChatContextExtensionPoint {15id: string;16icon: string;17displayName: string;18}1920const extensionPoint = ExtensionsRegistry.registerExtensionPoint<IChatContextExtensionPoint[]>({21extensionPoint: 'chatContext',22jsonSchema: {23description: localize('chatContextExtPoint', 'Contributes chat context integrations to the chat widget.'),24type: 'array',25items: {26type: 'object',27properties: {28id: {29description: localize('chatContextExtPoint.id', 'A unique identifier for this item.'),30type: 'string',31},32icon: {33description: localize('chatContextExtPoint.icon', 'The icon associated with this chat context item.'),34type: 'string'35},36displayName: {37description: localize('chatContextExtPoint.title', 'A user-friendly name for this item which is used for display in menus.'),38type: 'string'39}40},41required: ['id', 'icon', 'displayName'],42}43}44});4546export class ChatContextContribution extends Disposable implements IWorkbenchContribution {47public static readonly ID = 'workbench.contrib.chatContextContribution';4849constructor(50@IChatContextService private readonly _chatContextService: IChatContextService51) {52super();53extensionPoint.setHandler(extensions => {54for (const ext of extensions) {55if (!isProposedApiEnabled(ext.description, 'chatContextProvider')) {56continue;57}58if (!Array.isArray(ext.value)) {59continue;60}61for (const contribution of ext.value) {62const icon = contribution.icon ? ThemeIcon.fromString(contribution.icon) : undefined;63if (!icon) {64continue;65}6667this._chatContextService.setChatContextProvider(`${ext.description.id}-${contribution.id}`, { title: contribution.displayName, icon });68}69}70});71}72}7374registerWorkbenchContribution2(ChatContextContribution.ID, ChatContextContribution, WorkbenchPhase.AfterRestored);757677