@codingame/monaco-vscode-extensions-service-override 21.6.0 → 22.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +29 -30
- package/vscode/src/vs/platform/extensionManagement/common/extensionManagementCLI.js +28 -28
- package/vscode/src/vs/workbench/api/browser/mainThreadAuthentication.d.ts +3 -3
- package/vscode/src/vs/workbench/api/browser/mainThreadAuthentication.js +41 -32
- package/vscode/src/vs/workbench/api/browser/mainThreadCLICommands.js +1 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadChatAgents2.js +6 -5
- package/vscode/src/vs/workbench/api/browser/mainThreadChatSessions.d.ts +5 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadChatSessions.js +44 -4
- package/vscode/src/vs/workbench/api/browser/mainThreadComments.js +2 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadCustomEditors.js +3 -3
- package/vscode/src/vs/workbench/api/browser/mainThreadDocumentsAndEditors.js +1 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadEditSessionIdentityParticipant.js +1 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadEditorTabs.d.ts +1 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadEditorTabs.js +2 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadEditors.d.ts +1 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadEditors.js +1 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadExtensionService.js +11 -11
- package/vscode/src/vs/workbench/api/browser/mainThreadFileSystemEventService.js +20 -20
- package/vscode/src/vs/workbench/api/browser/mainThreadLanguageFeatures.js +39 -27
- package/vscode/src/vs/workbench/api/browser/mainThreadLanguageModelTools.js +4 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadLanguageModels.js +47 -41
- package/vscode/src/vs/workbench/api/browser/mainThreadMcp.d.ts +6 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadMcp.js +75 -27
- package/vscode/src/vs/workbench/api/browser/mainThreadMessageService.js +4 -4
- package/vscode/src/vs/workbench/api/browser/mainThreadNotebookDocumentsAndEditors.js +1 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadNotebookEditors.js +1 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadNotebookSaveParticipant.js +1 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadOutputService.js +3 -3
- package/vscode/src/vs/workbench/api/browser/mainThreadProgress.js +1 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadSCM.js +9 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadSaveParticipant.js +1 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadSearch.js +1 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadTask.js +1 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadTerminalService.js +21 -7
- package/vscode/src/vs/workbench/api/browser/mainThreadTunnelService.d.ts +1 -0
- package/vscode/src/vs/workbench/api/browser/mainThreadTunnelService.js +5 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadUriOpeners.js +2 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadWebviewPanels.js +1 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadWebviews.js +1 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadWorkspace.js +5 -5
- package/vscode/src/vs/workbench/contrib/customEditor/common/customTextEditorModel.js +1 -1
- package/vscode/src/vs/workbench/contrib/externalUriOpener/common/contributedOpeners.js +1 -1
- package/vscode/src/vs/workbench/services/extensionManagement/browser/extensionBisect.js +23 -23
- package/vscode/src/vs/workbench/services/extensionManagement/browser/webExtensionsScannerService.js +2 -2
- package/vscode/src/vs/workbench/services/extensions/common/abstractExtensionService.js +12 -12
- package/vscode/src/vs/workbench/services/extensions/common/extensionHostManager.js +1 -1
- package/vscode/src/vs/workbench/services/extensions/common/extensionsProposedApi.js +1 -1
- package/vscode/src/vs/workbench/services/extensions/common/extensionsUtil.js +4 -4
|
@@ -9,7 +9,7 @@ import { DisposableStore, DisposableMap, Disposable, toDisposable } from '@codin
|
|
|
9
9
|
import { URI } from '@codingame/monaco-vscode-api/vscode/vs/base/common/uri';
|
|
10
10
|
import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
|
|
11
11
|
import { ILogService } from '@codingame/monaco-vscode-api/vscode/vs/platform/log/common/log.service';
|
|
12
|
-
import { resizeImage } from '@codingame/monaco-vscode-
|
|
12
|
+
import { resizeImage } from '@codingame/monaco-vscode-5084de40-f866-5cb5-9d9b-33a10f6f235d-common/vscode/vs/workbench/contrib/chat/browser/imageUtils';
|
|
13
13
|
import { ILanguageModelIgnoredFilesService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/ignoredFiles.service';
|
|
14
14
|
import { ILanguageModelsService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/languageModels.service';
|
|
15
15
|
import { IAuthenticationAccessService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/authentication/browser/authenticationAccessService.service';
|
|
@@ -43,45 +43,51 @@ let MainThreadLanguageModels = class MainThreadLanguageModels {
|
|
|
43
43
|
this._store.dispose();
|
|
44
44
|
}
|
|
45
45
|
$registerLanguageModelProvider(vendor) {
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
46
|
+
const disposables = ( new DisposableStore());
|
|
47
|
+
try {
|
|
48
|
+
disposables.add(this._chatProviderService.registerLanguageModelProvider(vendor, {
|
|
49
|
+
onDidChange: Event.filter(this._lmProviderChange.event, e => e.vendor === vendor, disposables),
|
|
50
|
+
provideLanguageModelChatInfo: async (options, token) => {
|
|
51
|
+
const modelsAndIdentifiers = await this._proxy.$provideLanguageModelChatInfo(vendor, options, token);
|
|
52
|
+
modelsAndIdentifiers.forEach(m => {
|
|
53
|
+
if (m.metadata.auth) {
|
|
54
|
+
disposables.add(this._registerAuthenticationProvider(m.metadata.extension, m.metadata.auth));
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
return modelsAndIdentifiers;
|
|
58
|
+
},
|
|
59
|
+
sendChatRequest: async (modelId, messages, from, options, token) => {
|
|
60
|
+
const requestId = (Math.random() * 1e6) | 0;
|
|
61
|
+
const defer = ( new DeferredPromise());
|
|
62
|
+
const stream = ( new AsyncIterableSource());
|
|
63
|
+
try {
|
|
64
|
+
this._pendingProgress.set(requestId, { defer, stream });
|
|
65
|
+
await Promise.all(( messages.flatMap(msg => msg.content)
|
|
66
|
+
.filter(part => part.type === 'image_url')
|
|
67
|
+
.map(async (part) => {
|
|
68
|
+
part.value.data = VSBuffer.wrap(await resizeImage(part.value.data.buffer));
|
|
69
|
+
})));
|
|
70
|
+
await this._proxy.$startChatRequest(modelId, requestId, from, ( new SerializableObjectWithBuffers(messages)), options, token);
|
|
54
71
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
}
|
|
75
|
-
return {
|
|
76
|
-
result: defer.p,
|
|
77
|
-
stream: stream.asyncIterable
|
|
78
|
-
};
|
|
79
|
-
},
|
|
80
|
-
provideTokenCount: (modelId, str, token) => {
|
|
81
|
-
return this._proxy.$provideTokenLength(modelId, str, token);
|
|
82
|
-
},
|
|
83
|
-
}));
|
|
84
|
-
this._providerRegistrations.set(vendor, dipsosables);
|
|
72
|
+
catch (err) {
|
|
73
|
+
this._pendingProgress.delete(requestId);
|
|
74
|
+
throw err;
|
|
75
|
+
}
|
|
76
|
+
return {
|
|
77
|
+
result: defer.p,
|
|
78
|
+
stream: stream.asyncIterable
|
|
79
|
+
};
|
|
80
|
+
},
|
|
81
|
+
provideTokenCount: (modelId, str, token) => {
|
|
82
|
+
return this._proxy.$provideTokenLength(modelId, str, token);
|
|
83
|
+
},
|
|
84
|
+
}));
|
|
85
|
+
this._providerRegistrations.set(vendor, disposables);
|
|
86
|
+
}
|
|
87
|
+
catch (err) {
|
|
88
|
+
disposables.dispose();
|
|
89
|
+
throw err;
|
|
90
|
+
}
|
|
85
91
|
}
|
|
86
92
|
$onLMProviderChange(vendor) {
|
|
87
93
|
this._lmProviderChange.fire({ vendor });
|
|
@@ -154,7 +160,7 @@ let MainThreadLanguageModels = class MainThreadLanguageModels {
|
|
|
154
160
|
if (this._authenticationService.getProviderIds().includes(authProviderId)) {
|
|
155
161
|
return Disposable.None;
|
|
156
162
|
}
|
|
157
|
-
const accountLabel = auth.accountLabel ?? ( localize(
|
|
163
|
+
const accountLabel = auth.accountLabel ?? ( localize(2489, 'Language Models'));
|
|
158
164
|
const disposables = ( new DisposableStore());
|
|
159
165
|
this._authenticationService.registerAuthenticationProvider(authProviderId, ( new LanguageModelAccessAuthProvider(authProviderId, auth.providerLabel, accountLabel)));
|
|
160
166
|
disposables.add(toDisposable(() => {
|
|
@@ -230,7 +236,7 @@ class LanguageModelAccessAuthProvider {
|
|
|
230
236
|
}
|
|
231
237
|
confirmation(extensionName, _recreatingSession) {
|
|
232
238
|
return localize(
|
|
233
|
-
|
|
239
|
+
2490,
|
|
234
240
|
"The extension '{0}' wants to access the language models provided by {1}.",
|
|
235
241
|
extensionName,
|
|
236
242
|
this.label
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Disposable } from "@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle";
|
|
2
2
|
import { IAuthorizationProtectedResourceMetadata, IAuthorizationServerMetadata } from "@codingame/monaco-vscode-api/vscode/vs/base/common/oauth";
|
|
3
3
|
import { UriComponents } from "@codingame/monaco-vscode-api/vscode/vs/base/common/uri";
|
|
4
|
+
import { IContextKeyService } from "@codingame/monaco-vscode-api/vscode/vs/platform/contextkey/common/contextkey.service";
|
|
4
5
|
import { IDialogService } from "@codingame/monaco-vscode-api/vscode/vs/platform/dialogs/common/dialogs.service";
|
|
5
6
|
import { LogLevel } from "@codingame/monaco-vscode-api/vscode/vs/platform/log/common/log";
|
|
6
7
|
import { IMcpRegistry } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/mcp/common/mcpRegistryTypes.service";
|
|
@@ -9,6 +10,7 @@ import { IAuthenticationMcpAccessService } from "@codingame/monaco-vscode-api/vs
|
|
|
9
10
|
import { IAuthenticationMcpService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/services/authentication/browser/authenticationMcpService.service";
|
|
10
11
|
import { IAuthenticationMcpUsageService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/services/authentication/browser/authenticationMcpUsageService.service";
|
|
11
12
|
import { IAuthenticationService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/services/authentication/common/authentication.service";
|
|
13
|
+
import { IExtensionService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/services/extensions/common/extensions.service";
|
|
12
14
|
import { IExtHostContext } from "../../services/extensions/common/extHostCustomers.js";
|
|
13
15
|
import { MainThreadMcpShape } from "@codingame/monaco-vscode-api/vscode/vs/workbench/api/common/extHost.protocol";
|
|
14
16
|
export declare class MainThreadMcp extends Disposable implements MainThreadMcpShape {
|
|
@@ -19,18 +21,20 @@ export declare class MainThreadMcp extends Disposable implements MainThreadMcpSh
|
|
|
19
21
|
private readonly authenticationMcpServersService;
|
|
20
22
|
private readonly authenticationMCPServerAccessService;
|
|
21
23
|
private readonly authenticationMCPServerUsageService;
|
|
24
|
+
private readonly _extensionService;
|
|
25
|
+
private readonly _contextKeyService;
|
|
22
26
|
private _serverIdCounter;
|
|
23
27
|
private readonly _servers;
|
|
24
28
|
private readonly _serverDefinitions;
|
|
25
29
|
private readonly _proxy;
|
|
26
30
|
private readonly _collectionDefinitions;
|
|
27
|
-
constructor(_extHostContext: IExtHostContext, _mcpRegistry: IMcpRegistry, dialogService: IDialogService, _authenticationService: IAuthenticationService, authenticationMcpServersService: IAuthenticationMcpService, authenticationMCPServerAccessService: IAuthenticationMcpAccessService, authenticationMCPServerUsageService: IAuthenticationMcpUsageService);
|
|
31
|
+
constructor(_extHostContext: IExtHostContext, _mcpRegistry: IMcpRegistry, dialogService: IDialogService, _authenticationService: IAuthenticationService, authenticationMcpServersService: IAuthenticationMcpService, authenticationMCPServerAccessService: IAuthenticationMcpAccessService, authenticationMCPServerUsageService: IAuthenticationMcpUsageService, _extensionService: IExtensionService, _contextKeyService: IContextKeyService);
|
|
28
32
|
$upsertMcpCollection(collection: McpCollectionDefinition.FromExtHost, serversDto: McpServerDefinition.Serialized[]): void;
|
|
29
33
|
$deleteMcpCollection(collectionId: string): void;
|
|
30
34
|
$onDidChangeState(id: number, update: McpConnectionState): void;
|
|
31
35
|
$onDidPublishLog(id: number, level: LogLevel, log: string): void;
|
|
32
36
|
$onDidReceiveMessage(id: number, message: string): void;
|
|
33
|
-
$getTokenFromServerMetadata(id: number, authServerComponents: UriComponents, serverMetadata: IAuthorizationServerMetadata, resourceMetadata: IAuthorizationProtectedResourceMetadata | undefined): Promise<string | undefined>;
|
|
37
|
+
$getTokenFromServerMetadata(id: number, authServerComponents: UriComponents, serverMetadata: IAuthorizationServerMetadata, resourceMetadata: IAuthorizationProtectedResourceMetadata | undefined, errorOnUserInteraction?: boolean): Promise<string | undefined>;
|
|
34
38
|
private continueWithIncorrectAccountPrompt;
|
|
35
39
|
private loginPrompt;
|
|
36
40
|
dispose(): void;
|
|
@@ -1,29 +1,33 @@
|
|
|
1
1
|
|
|
2
2
|
import { __decorate, __param } from '@codingame/monaco-vscode-api/external/tslib/tslib.es6';
|
|
3
|
+
import { mapFindFirst } from '@codingame/monaco-vscode-api/vscode/vs/base/common/arraysFind';
|
|
3
4
|
import { disposableTimeout } from '@codingame/monaco-vscode-api/vscode/vs/base/common/async';
|
|
4
5
|
import { CancellationError } from '@codingame/monaco-vscode-api/vscode/vs/base/common/errors';
|
|
5
6
|
import { Emitter } from '@codingame/monaco-vscode-api/vscode/vs/base/common/event';
|
|
6
|
-
import { Disposable, DisposableMap } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
|
|
7
|
+
import { Disposable, DisposableMap, DisposableStore, MutableDisposable } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
|
|
7
8
|
import '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/index';
|
|
8
9
|
import Severity from '@codingame/monaco-vscode-api/vscode/vs/base/common/severity';
|
|
9
10
|
import { URI } from '@codingame/monaco-vscode-api/vscode/vs/base/common/uri';
|
|
10
11
|
import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
|
|
12
|
+
import { ContextKeyExpr } from '@codingame/monaco-vscode-api/vscode/vs/platform/contextkey/common/contextkey';
|
|
13
|
+
import { IContextKeyService } from '@codingame/monaco-vscode-api/vscode/vs/platform/contextkey/common/contextkey.service';
|
|
11
14
|
import { IDialogService } from '@codingame/monaco-vscode-api/vscode/vs/platform/dialogs/common/dialogs.service';
|
|
12
15
|
import { ExtensionIdentifier } from '@codingame/monaco-vscode-api/vscode/vs/platform/extensions/common/extensions';
|
|
13
16
|
import { LogLevel } from '@codingame/monaco-vscode-api/vscode/vs/platform/log/common/log';
|
|
14
17
|
import { IMcpRegistry } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/mcp/common/mcpRegistryTypes.service';
|
|
15
|
-
import { McpServerTransportType, McpServerDefinition, McpServerTrust,
|
|
18
|
+
import { McpServerLaunch, McpServerTransportType, McpServerDefinition, McpServerTrust, extensionPrefixedIdentifier, McpConnectionState, UserInteractionRequiredError } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/mcp/common/mcpTypes';
|
|
16
19
|
import { IAuthenticationMcpAccessService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/authentication/browser/authenticationMcpAccessService.service';
|
|
17
20
|
import { IAuthenticationMcpService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/authentication/browser/authenticationMcpService.service';
|
|
18
21
|
import { IAuthenticationMcpUsageService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/authentication/browser/authenticationMcpUsageService.service';
|
|
19
22
|
import { IAuthenticationService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/authentication/common/authentication.service';
|
|
20
23
|
import { ExtensionHostKind, extensionHostKindToString } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/extensions/common/extensionHostKind';
|
|
24
|
+
import { IExtensionService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/extensions/common/extensions.service';
|
|
21
25
|
import { extHostNamedCustomer } from '../../services/extensions/common/extHostCustomers.js';
|
|
22
26
|
import { ExtHostContext, MainContext } from '@codingame/monaco-vscode-api/vscode/vs/workbench/api/common/extHost.protocol';
|
|
23
27
|
import { observableValue } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/observables/observableValue';
|
|
24
28
|
|
|
25
29
|
let MainThreadMcp = class MainThreadMcp extends Disposable {
|
|
26
|
-
constructor(_extHostContext, _mcpRegistry, dialogService, _authenticationService, authenticationMcpServersService, authenticationMCPServerAccessService, authenticationMCPServerUsageService) {
|
|
30
|
+
constructor(_extHostContext, _mcpRegistry, dialogService, _authenticationService, authenticationMcpServersService, authenticationMCPServerAccessService, authenticationMCPServerUsageService, _extensionService, _contextKeyService) {
|
|
27
31
|
super();
|
|
28
32
|
this._extHostContext = _extHostContext;
|
|
29
33
|
this._mcpRegistry = _mcpRegistry;
|
|
@@ -32,6 +36,8 @@ let MainThreadMcp = class MainThreadMcp extends Disposable {
|
|
|
32
36
|
this.authenticationMcpServersService = authenticationMcpServersService;
|
|
33
37
|
this.authenticationMCPServerAccessService = authenticationMCPServerAccessService;
|
|
34
38
|
this.authenticationMCPServerUsageService = authenticationMCPServerUsageService;
|
|
39
|
+
this._extensionService = _extensionService;
|
|
40
|
+
this._contextKeyService = _contextKeyService;
|
|
35
41
|
this._serverIdCounter = 0;
|
|
36
42
|
this._servers = ( new Map());
|
|
37
43
|
this._serverDefinitions = ( new Map());
|
|
@@ -51,7 +57,11 @@ let MainThreadMcp = class MainThreadMcp extends Disposable {
|
|
|
51
57
|
}
|
|
52
58
|
return true;
|
|
53
59
|
},
|
|
54
|
-
|
|
60
|
+
async substituteVariables(serverDefinition, launch) {
|
|
61
|
+
const ser = await proxy.$substituteVariables(serverDefinition.variableReplacement?.folder?.uri, McpServerLaunch.toSerialized(launch));
|
|
62
|
+
return McpServerLaunch.fromSerialized(ser);
|
|
63
|
+
},
|
|
64
|
+
start: (_collection, serverDefiniton, resolveLaunch, options) => {
|
|
55
65
|
const id = ++this._serverIdCounter;
|
|
56
66
|
const launch = ( new ExtHostMcpServerLaunch(
|
|
57
67
|
_extHostContext.extensionHostKind,
|
|
@@ -60,7 +70,11 @@ let MainThreadMcp = class MainThreadMcp extends Disposable {
|
|
|
60
70
|
));
|
|
61
71
|
this._servers.set(id, launch);
|
|
62
72
|
this._serverDefinitions.set(id, serverDefiniton);
|
|
63
|
-
proxy.$startMcp(id,
|
|
73
|
+
proxy.$startMcp(id, {
|
|
74
|
+
launch: resolveLaunch,
|
|
75
|
+
defaultCwd: serverDefiniton.variableReplacement?.folder?.uri,
|
|
76
|
+
errorOnUserInteraction: options?.errorOnUserInteraction,
|
|
77
|
+
});
|
|
64
78
|
return launch;
|
|
65
79
|
},
|
|
66
80
|
}));
|
|
@@ -73,21 +87,44 @@ let MainThreadMcp = class MainThreadMcp extends Disposable {
|
|
|
73
87
|
}
|
|
74
88
|
else {
|
|
75
89
|
const serverDefinitions = observableValue('mcpServers', servers);
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
90
|
+
const extensionId = ( new ExtensionIdentifier(collection.extensionId));
|
|
91
|
+
const store = ( new DisposableStore());
|
|
92
|
+
const handle = ( new MutableDisposable());
|
|
93
|
+
const register = () => {
|
|
94
|
+
handle.value ??= this._mcpRegistry.registerCollection({
|
|
95
|
+
...collection,
|
|
96
|
+
source: extensionId,
|
|
97
|
+
resolveServerLanch: collection.canResolveLaunch ? (async (def) => {
|
|
98
|
+
const r = await this._proxy.$resolveMcpLaunch(collection.id, def.label);
|
|
99
|
+
return r ? McpServerLaunch.fromSerialized(r) : undefined;
|
|
100
|
+
}) : undefined,
|
|
101
|
+
trustBehavior: collection.isTrustedByDefault ? McpServerTrust.Kind.Trusted : McpServerTrust.Kind.TrustedOnNonce,
|
|
102
|
+
remoteAuthority: this._extHostContext.remoteAuthority,
|
|
103
|
+
serverDefinitions,
|
|
104
|
+
});
|
|
105
|
+
};
|
|
106
|
+
const whenClauseStr = mapFindFirst(this._extensionService.extensions, e => ExtensionIdentifier.equals(extensionId, e.identifier)
|
|
107
|
+
? e.contributes?.mcpServerDefinitionProviders?.find(p => extensionPrefixedIdentifier(extensionId, p.id) === collection.id)?.when
|
|
108
|
+
: undefined);
|
|
109
|
+
const whenClause = whenClauseStr && ContextKeyExpr.deserialize(whenClauseStr);
|
|
110
|
+
if (!whenClause) {
|
|
111
|
+
register();
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
const evaluate = () => {
|
|
115
|
+
if (this._contextKeyService.contextMatchesRules(whenClause)) {
|
|
116
|
+
register();
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
handle.clear();
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
store.add(this._contextKeyService.onDidChangeContext(evaluate));
|
|
123
|
+
evaluate();
|
|
124
|
+
}
|
|
87
125
|
this._collectionDefinitions.set(collection.id, {
|
|
88
|
-
fromExtHost: collection,
|
|
89
126
|
servers: serverDefinitions,
|
|
90
|
-
dispose: () =>
|
|
127
|
+
dispose: () => store.dispose(),
|
|
91
128
|
});
|
|
92
129
|
}
|
|
93
130
|
}
|
|
@@ -116,7 +153,7 @@ let MainThreadMcp = class MainThreadMcp extends Disposable {
|
|
|
116
153
|
$onDidReceiveMessage(id, message) {
|
|
117
154
|
this._servers.get(id)?.pushMessage(message);
|
|
118
155
|
}
|
|
119
|
-
async $getTokenFromServerMetadata(id, authServerComponents, serverMetadata, resourceMetadata) {
|
|
156
|
+
async $getTokenFromServerMetadata(id, authServerComponents, serverMetadata, resourceMetadata, errorOnUserInteraction) {
|
|
120
157
|
const server = this._serverDefinitions.get(id);
|
|
121
158
|
if (!server) {
|
|
122
159
|
return undefined;
|
|
@@ -149,16 +186,25 @@ let MainThreadMcp = class MainThreadMcp extends Disposable {
|
|
|
149
186
|
return sessions[0].accessToken;
|
|
150
187
|
}
|
|
151
188
|
}
|
|
189
|
+
if (errorOnUserInteraction) {
|
|
190
|
+
throw ( new UserInteractionRequiredError('authentication'));
|
|
191
|
+
}
|
|
152
192
|
const isAllowed = await this.loginPrompt(server.label, provider.label, false);
|
|
153
193
|
if (!isAllowed) {
|
|
154
194
|
throw ( new Error('User did not consent to login.'));
|
|
155
195
|
}
|
|
156
196
|
if (sessions.length) {
|
|
197
|
+
if (provider.supportsMultipleAccounts && errorOnUserInteraction) {
|
|
198
|
+
throw ( new UserInteractionRequiredError('authentication'));
|
|
199
|
+
}
|
|
157
200
|
session = provider.supportsMultipleAccounts
|
|
158
201
|
? await this.authenticationMcpServersService.selectSession(providerId, server.id, server.label, scopesSupported, sessions)
|
|
159
202
|
: sessions[0];
|
|
160
203
|
}
|
|
161
204
|
else {
|
|
205
|
+
if (errorOnUserInteraction) {
|
|
206
|
+
throw ( new UserInteractionRequiredError('authentication'));
|
|
207
|
+
}
|
|
162
208
|
const accountToCreate = matchingAccountPreferenceSession?.account;
|
|
163
209
|
do {
|
|
164
210
|
session = await this._authenticationService.createSession(providerId, scopesSupported, {
|
|
@@ -177,9 +223,9 @@ let MainThreadMcp = class MainThreadMcp extends Disposable {
|
|
|
177
223
|
}
|
|
178
224
|
async continueWithIncorrectAccountPrompt(chosenAccountLabel, requestedAccountLabel) {
|
|
179
225
|
const result = await this.dialogService.prompt({
|
|
180
|
-
message: ( localize(
|
|
226
|
+
message: ( localize(2491, "Incorrect account detected")),
|
|
181
227
|
detail: ( localize(
|
|
182
|
-
|
|
228
|
+
2492,
|
|
183
229
|
"The chosen account, {0}, does not match the requested account, {1}.",
|
|
184
230
|
chosenAccountLabel,
|
|
185
231
|
requestedAccountLabel
|
|
@@ -188,11 +234,11 @@ let MainThreadMcp = class MainThreadMcp extends Disposable {
|
|
|
188
234
|
cancelButton: true,
|
|
189
235
|
buttons: [
|
|
190
236
|
{
|
|
191
|
-
label: ( localize(
|
|
237
|
+
label: ( localize(2493, 'Keep {0}', chosenAccountLabel)),
|
|
192
238
|
run: () => chosenAccountLabel
|
|
193
239
|
},
|
|
194
240
|
{
|
|
195
|
-
label: ( localize(
|
|
241
|
+
label: ( localize(2494, 'Login with {0}', requestedAccountLabel)),
|
|
196
242
|
run: () => requestedAccountLabel
|
|
197
243
|
}
|
|
198
244
|
],
|
|
@@ -205,20 +251,20 @@ let MainThreadMcp = class MainThreadMcp extends Disposable {
|
|
|
205
251
|
async loginPrompt(mcpLabel, providerLabel, recreatingSession) {
|
|
206
252
|
const message = recreatingSession
|
|
207
253
|
? ( localize(
|
|
208
|
-
|
|
254
|
+
2495,
|
|
209
255
|
"The MCP Server Definition '{0}' wants you to authenticate to {1}.",
|
|
210
256
|
mcpLabel,
|
|
211
257
|
providerLabel
|
|
212
258
|
))
|
|
213
259
|
: ( localize(
|
|
214
|
-
|
|
260
|
+
2496,
|
|
215
261
|
"The MCP Server Definition '{0}' wants to authenticate to {1}.",
|
|
216
262
|
mcpLabel,
|
|
217
263
|
providerLabel
|
|
218
264
|
));
|
|
219
265
|
const buttons = [
|
|
220
266
|
{
|
|
221
|
-
label: ( localize(
|
|
267
|
+
label: ( localize(2497, "&&Allow")),
|
|
222
268
|
run() {
|
|
223
269
|
return true;
|
|
224
270
|
},
|
|
@@ -248,7 +294,9 @@ MainThreadMcp = __decorate([
|
|
|
248
294
|
( __param(3, IAuthenticationService)),
|
|
249
295
|
( __param(4, IAuthenticationMcpService)),
|
|
250
296
|
( __param(5, IAuthenticationMcpAccessService)),
|
|
251
|
-
( __param(6, IAuthenticationMcpUsageService))
|
|
297
|
+
( __param(6, IAuthenticationMcpUsageService)),
|
|
298
|
+
( __param(7, IExtensionService)),
|
|
299
|
+
( __param(8, IContextKeyService))
|
|
252
300
|
], MainThreadMcp);
|
|
253
301
|
class ExtHostMcpServerLaunch extends Disposable {
|
|
254
302
|
pushLog(level, message) {
|
|
@@ -60,13 +60,13 @@ let MainThreadMessageService = class MainThreadMessageService {
|
|
|
60
60
|
sourceIsUrgent = MainThreadMessageService_1.URGENT_NOTIFICATION_SOURCES.includes(source.id);
|
|
61
61
|
}
|
|
62
62
|
if (!source) {
|
|
63
|
-
source = ( localize(
|
|
63
|
+
source = ( localize(2498, "Extension"));
|
|
64
64
|
}
|
|
65
65
|
const secondaryActions = [];
|
|
66
66
|
if (options.source) {
|
|
67
67
|
secondaryActions.push(toAction({
|
|
68
68
|
id: options.source.identifier.value,
|
|
69
|
-
label: ( localize(
|
|
69
|
+
label: ( localize(2499, "Manage Extension")),
|
|
70
70
|
run: () => {
|
|
71
71
|
return this._commandService.executeCommand('_extensions.manage', options.source.identifier.value);
|
|
72
72
|
}
|
|
@@ -103,13 +103,13 @@ let MainThreadMessageService = class MainThreadMessageService {
|
|
|
103
103
|
if (!cancelButton) {
|
|
104
104
|
if (buttons.length > 0) {
|
|
105
105
|
cancelButton = {
|
|
106
|
-
label: ( localize(
|
|
106
|
+
label: ( localize(2500, "Cancel")),
|
|
107
107
|
run: () => undefined
|
|
108
108
|
};
|
|
109
109
|
}
|
|
110
110
|
else {
|
|
111
111
|
cancelButton = {
|
|
112
|
-
label: ( localize(
|
|
112
|
+
label: ( localize(2501, "&&OK")),
|
|
113
113
|
run: () => undefined
|
|
114
114
|
};
|
|
115
115
|
}
|
|
@@ -8,7 +8,7 @@ import { MainThreadNotebookDocuments } from './mainThreadNotebookDocuments.js';
|
|
|
8
8
|
import { NotebookDto } from './mainThreadNotebookDto.js';
|
|
9
9
|
import { MainThreadNotebookEditors } from './mainThreadNotebookEditors.js';
|
|
10
10
|
import { extHostCustomer } from '../../services/extensions/common/extHostCustomers.js';
|
|
11
|
-
import { editorGroupToColumn } from '@codingame/monaco-vscode-
|
|
11
|
+
import { editorGroupToColumn } from '@codingame/monaco-vscode-a17e9d37-b6c1-5556-8402-5db73960fae3-common/vscode/vs/workbench/services/editor/common/editorGroupColumn';
|
|
12
12
|
import { getNotebookEditorFromEditorPane } from '@codingame/monaco-vscode-670aae94-7f88-54d7-90ea-6fcbef423557-common/vscode/vs/workbench/contrib/notebook/browser/notebookBrowser';
|
|
13
13
|
import { INotebookEditorService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/notebook/browser/services/notebookEditorService.service';
|
|
14
14
|
import { INotebookService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/notebook/common/notebookService.service';
|
|
@@ -7,7 +7,7 @@ import { IConfigurationService } from '@codingame/monaco-vscode-api/vscode/vs/pl
|
|
|
7
7
|
import { EditorActivation } from '@codingame/monaco-vscode-api/vscode/vs/platform/editor/common/editor';
|
|
8
8
|
import { getNotebookEditorFromEditorPane } from '@codingame/monaco-vscode-670aae94-7f88-54d7-90ea-6fcbef423557-common/vscode/vs/workbench/contrib/notebook/browser/notebookBrowser';
|
|
9
9
|
import { INotebookEditorService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/notebook/browser/services/notebookEditorService.service';
|
|
10
|
-
import { editorGroupToColumn, columnToEditorGroup } from '@codingame/monaco-vscode-
|
|
10
|
+
import { editorGroupToColumn, columnToEditorGroup } from '@codingame/monaco-vscode-a17e9d37-b6c1-5556-8402-5db73960fae3-common/vscode/vs/workbench/services/editor/common/editorGroupColumn';
|
|
11
11
|
import { IEditorGroupsService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/editor/common/editorGroupsService.service';
|
|
12
12
|
import { IEditorService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/editor/common/editorService.service';
|
|
13
13
|
import { ExtHostContext, NotebookEditorRevealType } from '@codingame/monaco-vscode-api/vscode/vs/workbench/api/common/extHost.protocol';
|
|
@@ -18,7 +18,7 @@ class ExtHostNotebookDocumentSaveParticipant {
|
|
|
18
18
|
}
|
|
19
19
|
let _warningTimeout;
|
|
20
20
|
const p = ( new Promise((resolve, reject) => {
|
|
21
|
-
_warningTimeout = setTimeout(() => reject(( new Error(( localize(
|
|
21
|
+
_warningTimeout = setTimeout(() => reject(( new Error(( localize(2502, "Aborted onWillSaveNotebookDocument-event after 1750ms"))))), 1750);
|
|
22
22
|
this._proxy.$participateInSave(workingCopy.resource, context.reason, token).then(_ => {
|
|
23
23
|
clearTimeout(_warningTimeout);
|
|
24
24
|
return undefined;
|
|
@@ -69,11 +69,11 @@ let MainThreadOutputService = class MainThreadOutputService extends Disposable {
|
|
|
69
69
|
}
|
|
70
70
|
_showChannelQuietly(channel) {
|
|
71
71
|
const statusProperties = {
|
|
72
|
-
name: ( localize(
|
|
72
|
+
name: ( localize(2503, "Show Output")),
|
|
73
73
|
text: '$(output)',
|
|
74
|
-
ariaLabel: ( localize(
|
|
74
|
+
ariaLabel: ( localize(2504, "Show {0} Output Channel", channel.label)),
|
|
75
75
|
command: `workbench.action.output.show.${channel.id}`,
|
|
76
|
-
tooltip: ( localize(
|
|
76
|
+
tooltip: ( localize(2505, "Show {0} Output Channel", channel.label)),
|
|
77
77
|
kind: 'prominent'
|
|
78
78
|
};
|
|
79
79
|
if (!this._outputStatusItem.value) {
|
|
@@ -37,7 +37,7 @@ let MainThreadProgress = class MainThreadProgress {
|
|
|
37
37
|
location: ProgressLocation.Notification,
|
|
38
38
|
secondaryActions: [toAction({
|
|
39
39
|
id: extensionId,
|
|
40
|
-
label: ( localize(
|
|
40
|
+
label: ( localize(2506, "Manage Extension")),
|
|
41
41
|
run: () => this._commandService.executeCommand('_extensions.manage', extensionId)
|
|
42
42
|
})]
|
|
43
43
|
};
|
|
@@ -12,7 +12,7 @@ import { CancellationToken } from '@codingame/monaco-vscode-api/vscode/vs/base/c
|
|
|
12
12
|
import { MarshalledId } from '@codingame/monaco-vscode-api/vscode/vs/base/common/marshallingIds';
|
|
13
13
|
import { ThemeIcon } from '@codingame/monaco-vscode-api/vscode/vs/base/common/themables';
|
|
14
14
|
import { IQuickDiffService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/scm/common/quickDiff.service';
|
|
15
|
-
import { ResourceTree } from '@codingame/monaco-vscode-
|
|
15
|
+
import { ResourceTree } from '@codingame/monaco-vscode-5084de40-f866-5cb5-9d9b-33a10f6f235d-common/vscode/vs/base/common/resourceTree';
|
|
16
16
|
import { IUriIdentityService } from '@codingame/monaco-vscode-api/vscode/vs/platform/uriIdentity/common/uriIdentity.service';
|
|
17
17
|
import { IWorkspaceContextService } from '@codingame/monaco-vscode-api/vscode/vs/platform/workspace/common/workspace.service';
|
|
18
18
|
import { basename } from '@codingame/monaco-vscode-api/vscode/vs/base/common/resources';
|
|
@@ -21,7 +21,7 @@ import { IModelService } from '@codingame/monaco-vscode-api/vscode/vs/editor/com
|
|
|
21
21
|
import { ITextModelService } from '@codingame/monaco-vscode-api/vscode/vs/editor/common/services/resolverService.service';
|
|
22
22
|
import { Schemas } from '@codingame/monaco-vscode-api/vscode/vs/base/common/network';
|
|
23
23
|
import { structuralEquals } from '@codingame/monaco-vscode-api/vscode/vs/base/common/equals';
|
|
24
|
-
import { historyItemRefColor, historyItemRemoteRefColor, historyItemBaseRefColor } from '@codingame/monaco-vscode-
|
|
24
|
+
import { historyItemRefColor, historyItemRemoteRefColor, historyItemBaseRefColor } from '@codingame/monaco-vscode-5084de40-f866-5cb5-9d9b-33a10f6f235d-common/vscode/vs/workbench/contrib/scm/browser/scmHistory';
|
|
25
25
|
import { observableValue } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/observables/observableValue';
|
|
26
26
|
import { observableValueOpts } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/observables/observableValueOpts';
|
|
27
27
|
import { transaction } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/transaction';
|
|
@@ -163,9 +163,16 @@ class MainThreadSCMHistoryProvider {
|
|
|
163
163
|
}, undefined);
|
|
164
164
|
this._historyItemRefChanges = observableValue(this, { added: [], modified: [], removed: [], silent: false });
|
|
165
165
|
}
|
|
166
|
+
async resolveHistoryItem(historyItemId, token) {
|
|
167
|
+
const historyItem = await this.proxy.$resolveHistoryItem(this.handle, historyItemId, token ?? CancellationToken.None);
|
|
168
|
+
return historyItem ? toISCMHistoryItem(historyItem) : undefined;
|
|
169
|
+
}
|
|
166
170
|
async resolveHistoryItemChatContext(historyItemId, token) {
|
|
167
171
|
return this.proxy.$resolveHistoryItemChatContext(this.handle, historyItemId, token ?? CancellationToken.None);
|
|
168
172
|
}
|
|
173
|
+
async resolveHistoryItemChangeRangeChatContext(historyItemId, historyItemParentId, path, token) {
|
|
174
|
+
return this.proxy.$resolveHistoryItemChangeRangeChatContext(this.handle, historyItemId, historyItemParentId, path, token ?? CancellationToken.None);
|
|
175
|
+
}
|
|
169
176
|
async resolveHistoryItemRefsCommonAncestor(historyItemRefs, token) {
|
|
170
177
|
return this.proxy.$resolveHistoryItemRefsCommonAncestor(this.handle, historyItemRefs, token ?? CancellationToken.None);
|
|
171
178
|
}
|
|
@@ -17,7 +17,7 @@ class ExtHostSaveParticipant {
|
|
|
17
17
|
return undefined;
|
|
18
18
|
}
|
|
19
19
|
const p = ( new Promise((resolve, reject) => {
|
|
20
|
-
setTimeout(() => reject(( new Error(( localize(
|
|
20
|
+
setTimeout(() => reject(( new Error(( localize(2507, "Aborted onWillSaveTextDocument-event after 1750ms"))))), 1750);
|
|
21
21
|
this._proxy.$participateInSave(editorModel.resource, context.reason).then(values => {
|
|
22
22
|
if (!values.every(success => success)) {
|
|
23
23
|
return Promise.reject(( new Error('listener failed')));
|
|
@@ -10,7 +10,7 @@ import { SearchProviderType, QueryType } from '@codingame/monaco-vscode-api/vsco
|
|
|
10
10
|
import { ISearchService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/search/common/search.service';
|
|
11
11
|
import { ExtHostContext, MainContext } from '@codingame/monaco-vscode-api/vscode/vs/workbench/api/common/extHost.protocol';
|
|
12
12
|
import { revive } from '@codingame/monaco-vscode-api/vscode/vs/base/common/marshalling';
|
|
13
|
-
import { SearchContext } from '@codingame/monaco-vscode-
|
|
13
|
+
import { SearchContext } from '@codingame/monaco-vscode-5084de40-f866-5cb5-9d9b-33a10f6f235d-common/vscode/vs/workbench/contrib/search/common/constants';
|
|
14
14
|
import { IContextKeyService } from '@codingame/monaco-vscode-api/vscode/vs/platform/contextkey/common/contextkey.service';
|
|
15
15
|
|
|
16
16
|
let MainThreadSearch = class MainThreadSearch {
|
|
@@ -405,7 +405,7 @@ var TaskDTO;
|
|
|
405
405
|
}
|
|
406
406
|
command.presentation = TaskPresentationOptionsDTO.to(task.presentationOptions);
|
|
407
407
|
const source = TaskSourceDTO.to(task.source, workspace);
|
|
408
|
-
const label = ( localize(
|
|
408
|
+
const label = ( localize(2508, '{0}: {1}', source.label, task.name));
|
|
409
409
|
const definition = TaskDefinitionDTO.to(task.definition, executeOnly);
|
|
410
410
|
const id = (CustomExecutionDTO.is(task.execution) && task._id) ? task._id : `${task.source.extensionId}.${definition._key}`;
|
|
411
411
|
const result = ( new ContributedTask(
|
|
@@ -228,13 +228,27 @@ let MainThreadTerminalService = class MainThreadTerminalService {
|
|
|
228
228
|
id,
|
|
229
229
|
provideCompletions: async (commandLine, cursorPosition, allowFallbackCompletions, token) => {
|
|
230
230
|
const completions = await this._proxy.$provideTerminalCompletions(id, { commandLine, cursorPosition, allowFallbackCompletions }, token);
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
|
|
231
|
+
if (!completions) {
|
|
232
|
+
return undefined;
|
|
233
|
+
}
|
|
234
|
+
if (completions.resourceRequestConfig) {
|
|
235
|
+
const { cwd, globPattern, ...rest } = completions.resourceRequestConfig;
|
|
236
|
+
return {
|
|
237
|
+
items: completions.items?.map(c => ({
|
|
238
|
+
provider: `ext:${id}`,
|
|
239
|
+
...c,
|
|
240
|
+
})),
|
|
241
|
+
resourceRequestConfig: {
|
|
242
|
+
...rest,
|
|
243
|
+
cwd,
|
|
244
|
+
globPattern
|
|
245
|
+
}
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
return completions.items?.map(c => ({
|
|
249
|
+
provider: `ext:${id}`,
|
|
250
|
+
...c,
|
|
251
|
+
}));
|
|
238
252
|
}
|
|
239
253
|
}, ...triggerCharacters));
|
|
240
254
|
}
|
|
@@ -39,6 +39,7 @@ export declare class MainThreadTunnelService extends Disposable implements MainT
|
|
|
39
39
|
$getTunnels(): Promise<TunnelDescription[]>;
|
|
40
40
|
$onFoundNewCandidates(candidates: CandidatePort[]): Promise<void>;
|
|
41
41
|
$setTunnelProvider(features: TunnelProviderFeatures | undefined, isResolver: boolean): Promise<void>;
|
|
42
|
+
$hasTunnelProvider(): Promise<boolean>;
|
|
42
43
|
$setCandidateFilter(): Promise<void>;
|
|
43
44
|
$setCandidatePortSource(source: CandidatePortSource): Promise<void>;
|
|
44
45
|
}
|
|
@@ -112,13 +112,13 @@ let MainThreadTunnelService = class MainThreadTunnelService extends Disposable {
|
|
|
112
112
|
}
|
|
113
113
|
async elevationPrompt(tunnelOptions, tunnel, source) {
|
|
114
114
|
return this.notificationService.prompt(Severity.Info, ( localize(
|
|
115
|
-
|
|
115
|
+
2509,
|
|
116
116
|
"The extension {0} has forwarded port {1}. You'll need to run as superuser to use port {2} locally.",
|
|
117
117
|
source,
|
|
118
118
|
tunnelOptions.remoteAddress.port,
|
|
119
119
|
tunnelOptions.localAddressPort
|
|
120
120
|
)), [{
|
|
121
|
-
label: ( localize(
|
|
121
|
+
label: ( localize(2510, "Use Port {0} as Sudo...", tunnel.tunnelRemotePort)),
|
|
122
122
|
run: async () => {
|
|
123
123
|
this.elevateionRetry = true;
|
|
124
124
|
await this.remoteExplorerService.close({ host: tunnel.tunnelRemoteHost, port: tunnel.tunnelRemotePort }, TunnelCloseReason.Other);
|
|
@@ -189,6 +189,9 @@ let MainThreadTunnelService = class MainThreadTunnelService extends Disposable {
|
|
|
189
189
|
this.contextKeyService.createKey(forwardedPortsFeaturesEnabled.key, true);
|
|
190
190
|
}
|
|
191
191
|
}
|
|
192
|
+
async $hasTunnelProvider() {
|
|
193
|
+
return this.tunnelService.hasTunnelProvider;
|
|
194
|
+
}
|
|
192
195
|
async $setCandidateFilter() {
|
|
193
196
|
this.remoteExplorerService.setCandidateFilter((candidates) => {
|
|
194
197
|
return this._proxy.$applyCandidateFilter(candidates);
|