Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/workbench/api/browser/mainThreadChatOutputRenderer.ts
3296 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 { VSBuffer } from '../../../base/common/buffer.js';
7
import { Disposable, IDisposable } from '../../../base/common/lifecycle.js';
8
import { URI, UriComponents } from '../../../base/common/uri.js';
9
import { ExtensionIdentifier } from '../../../platform/extensions/common/extensions.js';
10
import { IChatOutputRendererService } from '../../contrib/chat/browser/chatOutputItemRenderer.js';
11
import { IExtHostContext } from '../../services/extensions/common/extHostCustomers.js';
12
import { ExtHostChatOutputRendererShape, ExtHostContext, MainThreadChatOutputRendererShape } from '../common/extHost.protocol.js';
13
import { MainThreadWebviews } from './mainThreadWebviews.js';
14
15
export class MainThreadChatOutputRenderer extends Disposable implements MainThreadChatOutputRendererShape {
16
17
private readonly _proxy: ExtHostChatOutputRendererShape;
18
19
private _webviewHandlePool = 0;
20
21
private readonly registeredRenderers = new Map</* viewType */ string, IDisposable>();
22
23
constructor(
24
extHostContext: IExtHostContext,
25
private readonly _mainThreadWebview: MainThreadWebviews,
26
@IChatOutputRendererService private readonly _rendererService: IChatOutputRendererService,
27
) {
28
super();
29
this._proxy = extHostContext.getProxy(ExtHostContext.ExtHostChatOutputRenderer);
30
}
31
32
override dispose(): void {
33
super.dispose();
34
35
this.registeredRenderers.forEach(disposable => disposable.dispose());
36
this.registeredRenderers.clear();
37
}
38
39
$registerChatOutputRenderer(viewType: string, extensionId: ExtensionIdentifier, extensionLocation: UriComponents): void {
40
this._rendererService.registerRenderer(viewType, {
41
renderOutputPart: async (mime, data, webview, token) => {
42
const webviewHandle = `chat-output-${++this._webviewHandlePool}`;
43
44
this._mainThreadWebview.addWebview(webviewHandle, webview, {
45
serializeBuffersForPostMessage: true,
46
});
47
48
this._proxy.$renderChatOutput(viewType, mime, VSBuffer.wrap(data), webviewHandle, token);
49
},
50
}, {
51
extension: { id: extensionId, location: URI.revive(extensionLocation) }
52
});
53
}
54
55
$unregisterChatOutputRenderer(viewType: string): void {
56
this.registeredRenderers.get(viewType)?.dispose();
57
}
58
}
59
60