Path: blob/main/src/vs/platform/mcp/common/mcpGalleryManifestServiceIpc.ts
5284 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 { IChannelServer } 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: IChannelServer<unknown>) {29super();30server.registerChannel('mcpGalleryManifest', {31listen: () => Event.None,32call: async <T>(context: unknown, command: string, args?: unknown): Promise<T> => {33switch (command) {34case 'setMcpGalleryManifest': {35const manifest = Array.isArray(args) ? args[0] as IMcpGalleryManifest | null : null;36return Promise.resolve(this.setMcpGalleryManifest(manifest)) as T;37}38}39throw new Error('Invalid call');40}41});42}4344async getMcpGalleryManifest(): Promise<IMcpGalleryManifest | null> {45await this.barrier.wait();46return this._mcpGalleryManifest ?? null;47}4849private setMcpGalleryManifest(manifest: IMcpGalleryManifest | null): void {50this._mcpGalleryManifest = manifest;51this._onDidChangeMcpGalleryManifest.fire(manifest);52this._onDidChangeMcpGalleryManifestStatus.fire(this.mcpGalleryManifestStatus);53this.barrier.open();54}5556}575859