Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/platform/mcp/common/mcpGalleryManifestServiceIpc.ts
3294 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 { Barrier } from '../../../base/common/async.js';
7
import { Emitter, Event } from '../../../base/common/event.js';
8
import { Disposable } from '../../../base/common/lifecycle.js';
9
import { IPCServer } from '../../../base/parts/ipc/common/ipc.js';
10
import { IMcpGalleryManifest, IMcpGalleryManifestService, McpGalleryManifestStatus } from './mcpGalleryManifest.js';
11
12
export class McpGalleryManifestIPCService extends Disposable implements IMcpGalleryManifestService {
13
14
declare readonly _serviceBrand: undefined;
15
16
private _onDidChangeMcpGalleryManifest = this._register(new Emitter<IMcpGalleryManifest | null>());
17
readonly onDidChangeMcpGalleryManifest = this._onDidChangeMcpGalleryManifest.event;
18
19
private _onDidChangeMcpGalleryManifestStatus = this._register(new Emitter<McpGalleryManifestStatus>());
20
readonly onDidChangeMcpGalleryManifestStatus = this._onDidChangeMcpGalleryManifestStatus.event;
21
22
private _mcpGalleryManifest: IMcpGalleryManifest | null | undefined;
23
private readonly barrier = new Barrier();
24
25
get mcpGalleryManifestStatus(): McpGalleryManifestStatus {
26
return this._mcpGalleryManifest ? McpGalleryManifestStatus.Available : McpGalleryManifestStatus.Unavailable;
27
}
28
29
constructor(server: IPCServer<any>) {
30
super();
31
server.registerChannel('mcpGalleryManifest', {
32
listen: () => Event.None,
33
call: async (context: any, command: string, args?: any): Promise<any> => {
34
switch (command) {
35
case 'setMcpGalleryManifest': return Promise.resolve(this.setMcpGalleryManifest(args[0]));
36
}
37
throw new Error('Invalid call');
38
}
39
});
40
}
41
42
async getMcpGalleryManifest(): Promise<IMcpGalleryManifest | null> {
43
await this.barrier.wait();
44
return this._mcpGalleryManifest ?? null;
45
}
46
47
private setMcpGalleryManifest(manifest: IMcpGalleryManifest | null): void {
48
this._mcpGalleryManifest = manifest;
49
this._onDidChangeMcpGalleryManifest.fire(manifest);
50
this._onDidChangeMcpGalleryManifestStatus.fire(this.mcpGalleryManifestStatus);
51
this.barrier.open();
52
}
53
54
}
55
56