Path: blob/main/src/vs/platform/mcp/common/mcpGalleryManifestServiceIpc.ts
3294 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 { Barrier } from '../../../base/common/async.js';6import { Emitter, Event } from '../../../base/common/event.js';7import { Disposable } from '../../../base/common/lifecycle.js';8import { IPCServer } from '../../../base/parts/ipc/common/ipc.js';9import { IMcpGalleryManifest, IMcpGalleryManifestService, McpGalleryManifestStatus } from './mcpGalleryManifest.js';1011export class McpGalleryManifestIPCService extends Disposable implements IMcpGalleryManifestService {1213declare readonly _serviceBrand: undefined;1415private _onDidChangeMcpGalleryManifest = this._register(new Emitter<IMcpGalleryManifest | null>());16readonly onDidChangeMcpGalleryManifest = this._onDidChangeMcpGalleryManifest.event;1718private _onDidChangeMcpGalleryManifestStatus = this._register(new Emitter<McpGalleryManifestStatus>());19readonly onDidChangeMcpGalleryManifestStatus = this._onDidChangeMcpGalleryManifestStatus.event;2021private _mcpGalleryManifest: IMcpGalleryManifest | null | undefined;22private readonly barrier = new Barrier();2324get mcpGalleryManifestStatus(): McpGalleryManifestStatus {25return this._mcpGalleryManifest ? McpGalleryManifestStatus.Available : McpGalleryManifestStatus.Unavailable;26}2728constructor(server: IPCServer<any>) {29super();30server.registerChannel('mcpGalleryManifest', {31listen: () => Event.None,32call: async (context: any, command: string, args?: any): Promise<any> => {33switch (command) {34case 'setMcpGalleryManifest': return Promise.resolve(this.setMcpGalleryManifest(args[0]));35}36throw new Error('Invalid call');37}38});39}4041async getMcpGalleryManifest(): Promise<IMcpGalleryManifest | null> {42await this.barrier.wait();43return this._mcpGalleryManifest ?? null;44}4546private setMcpGalleryManifest(manifest: IMcpGalleryManifest | null): void {47this._mcpGalleryManifest = manifest;48this._onDidChangeMcpGalleryManifest.fire(manifest);49this._onDidChangeMcpGalleryManifestStatus.fire(this.mcpGalleryManifestStatus);50this.barrier.open();51}5253}545556