mirror of
https://github.com/microsoft/vscode.git
synced 2026-05-08 17:19:48 +01:00
mcp: order extension host delegates to avoid unnecessary CORS errors (#245165)
Cherry-picks #245163
This commit is contained in:
@@ -40,6 +40,8 @@ export class MainThreadMcp extends Disposable implements MainThreadMcpShape {
|
||||
const proxy = _extHostContext.getProxy(ExtHostContext.ExtHostMcp);
|
||||
this._mcpEnabled = observableConfigValue(mcpEnabledSection, true, configurationService);
|
||||
this._register(this._mcpRegistry.registerDelegate({
|
||||
// Prefer Node.js extension hosts when they're available. No CORS issues etc.
|
||||
priority: _extHostContext.extensionHostKind === ExtensionHostKind.LocalWebWorker ? 0 : 1,
|
||||
waitForInitialProviderPromises() {
|
||||
return proxy.$waitForInitialCollectionProviders();
|
||||
},
|
||||
|
||||
@@ -112,6 +112,8 @@ export class McpRegistry extends Disposable implements IMcpRegistry {
|
||||
|
||||
public registerDelegate(delegate: IMcpHostDelegate): IDisposable {
|
||||
this._delegates.push(delegate);
|
||||
this._delegates.sort((a, b) => b.priority - a.priority);
|
||||
|
||||
return {
|
||||
dispose: () => {
|
||||
const index = this._delegates.indexOf(delegate);
|
||||
|
||||
@@ -27,6 +27,8 @@ export interface IMcpMessageTransport extends IDisposable {
|
||||
}
|
||||
|
||||
export interface IMcpHostDelegate {
|
||||
/** Priority for this delegate, delegates are tested in descending priority order */
|
||||
readonly priority: number;
|
||||
waitForInitialProviderPromises(): Promise<void>;
|
||||
canStart(collectionDefinition: McpCollectionDefinition, serverDefinition: McpServerDefinition): boolean;
|
||||
start(collectionDefinition: McpCollectionDefinition, serverDefinition: McpServerDefinition, resolvedLaunch: McpServerLaunch): IMcpMessageTransport;
|
||||
|
||||
@@ -72,6 +72,8 @@ class TestConfigurationResolverService implements Partial<IConfigurationResolver
|
||||
}
|
||||
|
||||
class TestMcpHostDelegate implements IMcpHostDelegate {
|
||||
priority = 0;
|
||||
|
||||
canStart(): boolean {
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -26,6 +26,8 @@ class TestMcpHostDelegate extends Disposable implements IMcpHostDelegate {
|
||||
private readonly _transport: TestMcpMessageTransport;
|
||||
private _canStartValue = true;
|
||||
|
||||
priority = 0;
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
this._transport = this._register(new TestMcpMessageTransport());
|
||||
|
||||
@@ -24,6 +24,8 @@ import { CancellationTokenSource } from '../../../../../base/common/cancellation
|
||||
class TestMcpHostDelegate extends Disposable implements IMcpHostDelegate {
|
||||
private readonly _transport: TestMcpMessageTransport;
|
||||
|
||||
priority = 0;
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
this._transport = this._register(new TestMcpMessageTransport());
|
||||
|
||||
Reference in New Issue
Block a user