@codingame/monaco-vscode-extensions-service-override 25.1.2 → 26.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/index.js +7 -0
- package/package.json +3 -3
- package/vscode/src/vs/base/common/console.js +24 -15
- package/vscode/src/vs/platform/extensionManagement/common/extensionManagementCLI.d.ts +4 -1
- package/vscode/src/vs/platform/extensionManagement/common/extensionManagementCLI.js +149 -84
- package/vscode/src/vs/platform/extensionResourceLoader/browser/extensionResourceLoaderService.js +20 -12
- package/vscode/src/vs/platform/extensionResourceLoader/common/extensionResourceLoader.js +38 -21
- package/vscode/src/vs/platform/remote/common/managedSocket.js +7 -10
- package/vscode/src/vs/workbench/api/browser/mainThreadAiEmbeddingVector.js +5 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadAiRelatedInformation.js +5 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadAiSettingsSearch.js +4 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadAuthentication.js +200 -143
- package/vscode/src/vs/workbench/api/browser/mainThreadBulkEdits.js +10 -14
- package/vscode/src/vs/workbench/api/browser/mainThreadCLICommands.js +41 -31
- package/vscode/src/vs/workbench/api/browser/mainThreadChatAgents2.d.ts +9 -12
- package/vscode/src/vs/workbench/api/browser/mainThreadChatAgents2.js +168 -115
- package/vscode/src/vs/workbench/api/browser/mainThreadChatCodeMapper.js +11 -13
- package/vscode/src/vs/workbench/api/browser/mainThreadChatContext.d.ts +5 -5
- package/vscode/src/vs/workbench/api/browser/mainThreadChatContext.js +42 -15
- package/vscode/src/vs/workbench/api/browser/mainThreadChatOutputRenderer.js +8 -7
- package/vscode/src/vs/workbench/api/browser/mainThreadChatSessions.d.ts +4 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadChatSessions.js +170 -99
- package/vscode/src/vs/workbench/api/browser/mainThreadChatStatus.js +2 -5
- package/vscode/src/vs/workbench/api/browser/mainThreadClipboard.js +4 -9
- package/vscode/src/vs/workbench/api/browser/mainThreadCodeInsets.js +13 -12
- package/vscode/src/vs/workbench/api/browser/mainThreadCommands.js +16 -19
- package/vscode/src/vs/workbench/api/browser/mainThreadComments.js +127 -70
- package/vscode/src/vs/workbench/api/browser/mainThreadConfiguration.js +80 -26
- package/vscode/src/vs/workbench/api/browser/mainThreadConsole.js +5 -11
- package/vscode/src/vs/workbench/api/browser/mainThreadCustomEditors.js +199 -97
- package/vscode/src/vs/workbench/api/browser/mainThreadDataChannels.js +1 -4
- package/vscode/src/vs/workbench/api/browser/mainThreadDebugService.js +88 -73
- package/vscode/src/vs/workbench/api/browser/mainThreadDecorations.js +5 -5
- package/vscode/src/vs/workbench/api/browser/mainThreadDiagnostics.js +16 -12
- package/vscode/src/vs/workbench/api/browser/mainThreadDialogs.js +10 -8
- package/vscode/src/vs/workbench/api/browser/mainThreadDocumentContentProviders.js +14 -6
- package/vscode/src/vs/workbench/api/browser/mainThreadDocuments.js +52 -37
- package/vscode/src/vs/workbench/api/browser/mainThreadDocumentsAndEditors.js +78 -58
- package/vscode/src/vs/workbench/api/browser/mainThreadEditSessionIdentityParticipant.js +5 -7
- package/vscode/src/vs/workbench/api/browser/mainThreadEditor.js +75 -63
- package/vscode/src/vs/workbench/api/browser/mainThreadEditorTabs.js +99 -91
- package/vscode/src/vs/workbench/api/browser/mainThreadEditors.js +93 -55
- package/vscode/src/vs/workbench/api/browser/mainThreadEmbeddings.js +3 -7
- package/vscode/src/vs/workbench/api/browser/mainThreadExtensionService.js +85 -60
- package/vscode/src/vs/workbench/api/browser/mainThreadFileSystem.js +49 -45
- package/vscode/src/vs/workbench/api/browser/mainThreadFileSystemEventService.js +114 -72
- package/vscode/src/vs/workbench/api/browser/mainThreadInteractive.js +4 -7
- package/vscode/src/vs/workbench/api/browser/mainThreadLabelService.js +1 -4
- package/vscode/src/vs/workbench/api/browser/mainThreadLanguageFeatures.d.ts +2 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadLanguageFeatures.js +381 -238
- package/vscode/src/vs/workbench/api/browser/mainThreadLanguageModelTools.d.ts +7 -3
- package/vscode/src/vs/workbench/api/browser/mainThreadLanguageModelTools.js +90 -13
- package/vscode/src/vs/workbench/api/browser/mainThreadLanguageModels.js +81 -58
- package/vscode/src/vs/workbench/api/browser/mainThreadLanguages.js +9 -10
- package/vscode/src/vs/workbench/api/browser/mainThreadLocalization.js +2 -7
- package/vscode/src/vs/workbench/api/browser/mainThreadLogService.js +6 -10
- package/vscode/src/vs/workbench/api/browser/mainThreadManagedSockets.js +12 -10
- package/vscode/src/vs/workbench/api/browser/mainThreadMcp.d.ts +3 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadMcp.js +162 -97
- package/vscode/src/vs/workbench/api/browser/mainThreadMessageService.js +32 -26
- package/vscode/src/vs/workbench/api/browser/mainThreadNotebook.js +38 -32
- package/vscode/src/vs/workbench/api/browser/mainThreadNotebookDocuments.js +48 -46
- package/vscode/src/vs/workbench/api/browser/mainThreadNotebookDocumentsAndEditors.js +22 -18
- package/vscode/src/vs/workbench/api/browser/mainThreadNotebookDto.js +5 -8
- package/vscode/src/vs/workbench/api/browser/mainThreadNotebookEditors.js +35 -21
- package/vscode/src/vs/workbench/api/browser/mainThreadNotebookKernels.js +31 -28
- package/vscode/src/vs/workbench/api/browser/mainThreadNotebookSaveParticipant.js +5 -7
- package/vscode/src/vs/workbench/api/browser/mainThreadOutputService.js +47 -23
- package/vscode/src/vs/workbench/api/browser/mainThreadProfileContentHandlers.js +15 -12
- package/vscode/src/vs/workbench/api/browser/mainThreadProgress.js +17 -18
- package/vscode/src/vs/workbench/api/browser/mainThreadQuickDiff.js +6 -7
- package/vscode/src/vs/workbench/api/browser/mainThreadQuickOpen.js +83 -66
- package/vscode/src/vs/workbench/api/browser/mainThreadRemoteConnectionData.js +1 -5
- package/vscode/src/vs/workbench/api/browser/mainThreadSCM.js +250 -92
- package/vscode/src/vs/workbench/api/browser/mainThreadSaveParticipant.js +6 -8
- package/vscode/src/vs/workbench/api/browser/mainThreadSearch.js +37 -26
- package/vscode/src/vs/workbench/api/browser/mainThreadSecretState.js +34 -21
- package/vscode/src/vs/workbench/api/browser/mainThreadShare.js +3 -6
- package/vscode/src/vs/workbench/api/browser/mainThreadSpeech.js +19 -14
- package/vscode/src/vs/workbench/api/browser/mainThreadStatusBar.js +41 -16
- package/vscode/src/vs/workbench/api/browser/mainThreadStorage.js +18 -17
- package/vscode/src/vs/workbench/api/browser/mainThreadTask.js +145 -145
- package/vscode/src/vs/workbench/api/browser/mainThreadTelemetry.js +19 -11
- package/vscode/src/vs/workbench/api/browser/mainThreadTerminalService.js +176 -80
- package/vscode/src/vs/workbench/api/browser/mainThreadTerminalShellIntegration.js +52 -21
- package/vscode/src/vs/workbench/api/browser/mainThreadTesting.js +26 -24
- package/vscode/src/vs/workbench/api/browser/mainThreadTheming.js +1 -4
- package/vscode/src/vs/workbench/api/browser/mainThreadTimeline.js +5 -8
- package/vscode/src/vs/workbench/api/browser/mainThreadTreeViews.d.ts +4 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadTreeViews.js +106 -46
- package/vscode/src/vs/workbench/api/browser/mainThreadTunnelService.js +83 -65
- package/vscode/src/vs/workbench/api/browser/mainThreadUriOpeners.js +20 -20
- package/vscode/src/vs/workbench/api/browser/mainThreadUrls.js +14 -9
- package/vscode/src/vs/workbench/api/browser/mainThreadWebviewManager.js +17 -9
- package/vscode/src/vs/workbench/api/browser/mainThreadWebviewPanels.js +49 -38
- package/vscode/src/vs/workbench/api/browser/mainThreadWebviewViews.js +10 -13
- package/vscode/src/vs/workbench/api/browser/mainThreadWebviews.js +38 -27
- package/vscode/src/vs/workbench/api/browser/mainThreadWindow.js +5 -11
- package/vscode/src/vs/workbench/api/browser/mainThreadWorkspace.d.ts +4 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadWorkspace.js +73 -43
- package/vscode/src/vs/workbench/api/common/shared/dataTransferCache.js +2 -2
- package/vscode/src/vs/workbench/contrib/customEditor/common/customTextEditorModel.js +17 -10
- package/vscode/src/vs/workbench/contrib/externalUriOpener/common/contributedOpeners.js +17 -11
- package/vscode/src/vs/workbench/services/extensionManagement/browser/extensionBisect.js +107 -80
- package/vscode/src/vs/workbench/services/extensionManagement/browser/webExtensionsScannerService.js +336 -175
- package/vscode/src/vs/workbench/services/extensions/browser/extensionService.js +126 -71
- package/vscode/src/vs/workbench/services/extensions/browser/webWorkerExtensionHost.js +76 -54
- package/vscode/src/vs/workbench/services/extensions/browser/webWorkerFileSystemProvider.js +1 -2
- package/vscode/src/vs/workbench/services/extensions/common/abstractExtensionService.d.ts +2 -0
- package/vscode/src/vs/workbench/services/extensions/common/abstractExtensionService.js +343 -192
- package/vscode/src/vs/workbench/services/extensions/common/extHostCustomers.js +5 -3
- package/vscode/src/vs/workbench/services/extensions/common/extensionHostManager.d.ts +0 -1
- package/vscode/src/vs/workbench/services/extensions/common/extensionHostManager.js +75 -68
- package/vscode/src/vs/workbench/services/extensions/common/extensionRunningLocationTracker.js +135 -36
- package/vscode/src/vs/workbench/services/extensions/common/extensionsProposedApi.js +22 -18
- package/vscode/src/vs/workbench/services/extensions/common/extensionsUtil.js +14 -12
- package/vscode/src/vs/workbench/services/extensions/common/lazyCreateExtensionHostManager.js +21 -9
- package/vscode/src/vs/workbench/services/extensions/common/remoteExtensionHost.js +48 -25
- package/vscode/src/vs/workbench/services/themes/browser/cssExtensionPoint.d.ts +24 -0
- package/vscode/src/vs/workbench/services/themes/browser/cssExtensionPoint.js +300 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
|
|
2
2
|
import { __decorate, __param } from '@codingame/monaco-vscode-api/external/tslib/tslib.es6';
|
|
3
3
|
import { mapFindFirst } from '@codingame/monaco-vscode-api/vscode/vs/base/common/arraysFind';
|
|
4
|
-
import { disposableTimeout } from '@codingame/monaco-vscode-api/vscode/vs/base/common/async';
|
|
4
|
+
import { RunOnceScheduler, disposableTimeout } from '@codingame/monaco-vscode-api/vscode/vs/base/common/async';
|
|
5
5
|
import { CancellationError } from '@codingame/monaco-vscode-api/vscode/vs/base/common/errors';
|
|
6
6
|
import { Emitter } from '@codingame/monaco-vscode-api/vscode/vs/base/common/event';
|
|
7
7
|
import { Disposable, DisposableMap, DisposableStore, MutableDisposable } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
|
|
@@ -26,10 +26,23 @@ import { ExtensionHostKind, extensionHostKindToString } from '@codingame/monaco-
|
|
|
26
26
|
import { IExtensionService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/extensions/common/extensions.service';
|
|
27
27
|
import { extHostNamedCustomer } from '../../services/extensions/common/extHostCustomers.js';
|
|
28
28
|
import { ExtHostContext, MainContext } from '@codingame/monaco-vscode-api/vscode/vs/workbench/api/common/extHost.protocol';
|
|
29
|
+
import { autorun } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/reactions/autorun';
|
|
29
30
|
import { observableValue } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/observables/observableValue';
|
|
30
31
|
|
|
31
32
|
let MainThreadMcp = class MainThreadMcp extends Disposable {
|
|
32
|
-
constructor(
|
|
33
|
+
constructor(
|
|
34
|
+
_extHostContext,
|
|
35
|
+
_mcpRegistry,
|
|
36
|
+
dialogService,
|
|
37
|
+
_authenticationService,
|
|
38
|
+
authenticationMcpServersService,
|
|
39
|
+
authenticationMCPServerAccessService,
|
|
40
|
+
authenticationMCPServerUsageService,
|
|
41
|
+
_dynamicAuthenticationProviderStorageService,
|
|
42
|
+
_extensionService,
|
|
43
|
+
_contextKeyService,
|
|
44
|
+
_telemetryService
|
|
45
|
+
) {
|
|
33
46
|
super();
|
|
34
47
|
this._extHostContext = _extHostContext;
|
|
35
48
|
this._mcpRegistry = _mcpRegistry;
|
|
@@ -47,7 +60,9 @@ let MainThreadMcp = class MainThreadMcp extends Disposable {
|
|
|
47
60
|
this._serverDefinitions = ( new Map());
|
|
48
61
|
this._serverAuthTracking = ( new McpServerAuthTracker());
|
|
49
62
|
this._collectionDefinitions = this._register(( new DisposableMap()));
|
|
50
|
-
this._register(
|
|
63
|
+
this._register(
|
|
64
|
+
_authenticationService.onDidChangeSessions(e => this._onDidChangeAuthSessions(e.providerId, e.label))
|
|
65
|
+
);
|
|
51
66
|
const proxy = this._proxy = ( _extHostContext.getProxy(ExtHostContext.ExtHostMcp));
|
|
52
67
|
this._register(this._mcpRegistry.registerDelegate({
|
|
53
68
|
priority: _extHostContext.extensionHostKind === ExtensionHostKind.LocalWebWorker ? 0 : 1,
|
|
@@ -64,7 +79,10 @@ let MainThreadMcp = class MainThreadMcp extends Disposable {
|
|
|
64
79
|
return true;
|
|
65
80
|
},
|
|
66
81
|
async substituteVariables(serverDefinition, launch) {
|
|
67
|
-
const ser = await proxy.$substituteVariables(
|
|
82
|
+
const ser = await proxy.$substituteVariables(
|
|
83
|
+
serverDefinition.variableReplacement?.folder?.uri,
|
|
84
|
+
McpServerLaunch.toSerialized(launch)
|
|
85
|
+
);
|
|
68
86
|
return McpServerLaunch.fromSerialized(ser);
|
|
69
87
|
},
|
|
70
88
|
start: (_collection, serverDefiniton, resolveLaunch, options) => {
|
|
@@ -79,20 +97,41 @@ let MainThreadMcp = class MainThreadMcp extends Disposable {
|
|
|
79
97
|
proxy.$startMcp(id, {
|
|
80
98
|
launch: resolveLaunch,
|
|
81
99
|
defaultCwd: serverDefiniton.variableReplacement?.folder?.uri,
|
|
82
|
-
errorOnUserInteraction: options?.errorOnUserInteraction
|
|
100
|
+
errorOnUserInteraction: options?.errorOnUserInteraction
|
|
83
101
|
});
|
|
84
102
|
return launch;
|
|
85
|
-
}
|
|
103
|
+
}
|
|
104
|
+
}));
|
|
105
|
+
const onDidChangeMcpServerDefinitionsTrigger = this._register(( new RunOnceScheduler(() => this._publishServerDefinitions(), 500)));
|
|
106
|
+
this._register(autorun(reader => {
|
|
107
|
+
const collections = this._mcpRegistry.collections.read(reader);
|
|
108
|
+
for (const collection of collections) {
|
|
109
|
+
collection.serverDefinitions.read(reader);
|
|
110
|
+
}
|
|
111
|
+
if (!onDidChangeMcpServerDefinitionsTrigger.isScheduled()) {
|
|
112
|
+
onDidChangeMcpServerDefinitionsTrigger.schedule();
|
|
113
|
+
}
|
|
86
114
|
}));
|
|
115
|
+
onDidChangeMcpServerDefinitionsTrigger.schedule();
|
|
116
|
+
}
|
|
117
|
+
_publishServerDefinitions() {
|
|
118
|
+
const collections = this._mcpRegistry.collections.get();
|
|
119
|
+
const allServers = [];
|
|
120
|
+
for (const collection of collections) {
|
|
121
|
+
const servers = collection.serverDefinitions.get();
|
|
122
|
+
for (const server of servers) {
|
|
123
|
+
allServers.push(McpServerDefinition.toSerialized(server));
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
this._proxy.$onDidChangeMcpServerDefinitions(allServers);
|
|
87
127
|
}
|
|
88
128
|
$upsertMcpCollection(collection, serversDto) {
|
|
89
129
|
const servers = ( serversDto.map(McpServerDefinition.fromSerialized));
|
|
90
130
|
const existing = this._collectionDefinitions.get(collection.id);
|
|
91
131
|
if (existing) {
|
|
92
132
|
existing.servers.set(servers, undefined);
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
const serverDefinitions = observableValue('mcpServers', servers);
|
|
133
|
+
} else {
|
|
134
|
+
const serverDefinitions = observableValue("mcpServers", servers);
|
|
96
135
|
const extensionId = ( new ExtensionIdentifier(collection.extensionId));
|
|
97
136
|
const store = ( new DisposableStore());
|
|
98
137
|
const handle = store.add(( new MutableDisposable()));
|
|
@@ -100,28 +139,27 @@ let MainThreadMcp = class MainThreadMcp extends Disposable {
|
|
|
100
139
|
handle.value ??= this._mcpRegistry.registerCollection({
|
|
101
140
|
...collection,
|
|
102
141
|
source: extensionId,
|
|
103
|
-
resolveServerLanch: collection.canResolveLaunch ? (async
|
|
142
|
+
resolveServerLanch: collection.canResolveLaunch ? (async def => {
|
|
104
143
|
const r = await this._proxy.$resolveMcpLaunch(collection.id, def.label);
|
|
105
144
|
return r ? McpServerLaunch.fromSerialized(r) : undefined;
|
|
106
145
|
}) : undefined,
|
|
107
146
|
trustBehavior: collection.isTrustedByDefault ? McpServerTrust.Kind.Trusted : McpServerTrust.Kind.TrustedOnNonce,
|
|
108
147
|
remoteAuthority: this._extHostContext.remoteAuthority,
|
|
109
|
-
serverDefinitions
|
|
148
|
+
serverDefinitions
|
|
110
149
|
});
|
|
111
150
|
};
|
|
112
|
-
const whenClauseStr = mapFindFirst(
|
|
113
|
-
|
|
114
|
-
: undefined
|
|
151
|
+
const whenClauseStr = mapFindFirst(
|
|
152
|
+
this._extensionService.extensions,
|
|
153
|
+
e => ExtensionIdentifier.equals(extensionId, e.identifier) ? e.contributes?.mcpServerDefinitionProviders?.find(p => extensionPrefixedIdentifier(extensionId, p.id) === collection.id)?.when : undefined
|
|
154
|
+
);
|
|
115
155
|
const whenClause = whenClauseStr && ContextKeyExpr.deserialize(whenClauseStr);
|
|
116
156
|
if (!whenClause) {
|
|
117
157
|
register();
|
|
118
|
-
}
|
|
119
|
-
else {
|
|
158
|
+
} else {
|
|
120
159
|
const evaluate = () => {
|
|
121
160
|
if (this._contextKeyService.contextMatchesRules(whenClause)) {
|
|
122
161
|
register();
|
|
123
|
-
}
|
|
124
|
-
else {
|
|
162
|
+
} else {
|
|
125
163
|
handle.clear();
|
|
126
164
|
}
|
|
127
165
|
};
|
|
@@ -130,7 +168,7 @@ let MainThreadMcp = class MainThreadMcp extends Disposable {
|
|
|
130
168
|
}
|
|
131
169
|
this._collectionDefinitions.set(collection.id, {
|
|
132
170
|
servers: serverDefinitions,
|
|
133
|
-
dispose: () => store.dispose()
|
|
171
|
+
dispose: () => store.dispose()
|
|
134
172
|
});
|
|
135
173
|
}
|
|
136
174
|
}
|
|
@@ -151,7 +189,7 @@ let MainThreadMcp = class MainThreadMcp extends Disposable {
|
|
|
151
189
|
}
|
|
152
190
|
}
|
|
153
191
|
$onDidPublishLog(id, level, log) {
|
|
154
|
-
if (typeof level ===
|
|
192
|
+
if (typeof level === "string") {
|
|
155
193
|
level = LogLevel.Info;
|
|
156
194
|
log = level;
|
|
157
195
|
}
|
|
@@ -167,7 +205,14 @@ let MainThreadMcp = class MainThreadMcp extends Disposable {
|
|
|
167
205
|
}
|
|
168
206
|
return this._getSessionForProvider(id, server, providerId, scopes, undefined, options.errorOnUserInteraction);
|
|
169
207
|
}
|
|
170
|
-
async $getTokenFromServerMetadata(
|
|
208
|
+
async $getTokenFromServerMetadata(
|
|
209
|
+
id,
|
|
210
|
+
authDetails,
|
|
211
|
+
{
|
|
212
|
+
errorOnUserInteraction,
|
|
213
|
+
forceNewRegistration
|
|
214
|
+
} = {}
|
|
215
|
+
) {
|
|
171
216
|
const server = this._serverDefinitions.get(id);
|
|
172
217
|
if (!server) {
|
|
173
218
|
return undefined;
|
|
@@ -178,23 +223,43 @@ let MainThreadMcp = class MainThreadMcp extends Disposable {
|
|
|
178
223
|
let providerId = await this._authenticationService.getOrActivateProviderIdForServer(authorizationServer, resourceServer);
|
|
179
224
|
if (forceNewRegistration && providerId) {
|
|
180
225
|
if (!this._authenticationService.isDynamicAuthenticationProvider(providerId)) {
|
|
181
|
-
throw ( new Error(
|
|
226
|
+
throw ( new Error("Cannot force new registration for a non-dynamic authentication provider."));
|
|
182
227
|
}
|
|
183
228
|
this._authenticationService.unregisterAuthenticationProvider(providerId);
|
|
184
229
|
await this._dynamicAuthenticationProviderStorageService.removeDynamicProvider(providerId);
|
|
185
230
|
providerId = undefined;
|
|
186
231
|
}
|
|
187
232
|
if (!providerId) {
|
|
188
|
-
const provider = await this._authenticationService.createDynamicAuthenticationProvider(
|
|
233
|
+
const provider = await this._authenticationService.createDynamicAuthenticationProvider(
|
|
234
|
+
authorizationServer,
|
|
235
|
+
authDetails.authorizationServerMetadata,
|
|
236
|
+
authDetails.resourceMetadata
|
|
237
|
+
);
|
|
189
238
|
if (!provider) {
|
|
190
239
|
return undefined;
|
|
191
240
|
}
|
|
192
241
|
providerId = provider.id;
|
|
193
242
|
}
|
|
194
|
-
return this._getSessionForProvider(
|
|
243
|
+
return this._getSessionForProvider(
|
|
244
|
+
id,
|
|
245
|
+
server,
|
|
246
|
+
providerId,
|
|
247
|
+
resolvedScopes,
|
|
248
|
+
authorizationServer,
|
|
249
|
+
errorOnUserInteraction
|
|
250
|
+
);
|
|
195
251
|
}
|
|
196
|
-
async _getSessionForProvider(
|
|
197
|
-
|
|
252
|
+
async _getSessionForProvider(
|
|
253
|
+
serverId,
|
|
254
|
+
server,
|
|
255
|
+
providerId,
|
|
256
|
+
scopes,
|
|
257
|
+
authorizationServer,
|
|
258
|
+
errorOnUserInteraction = false
|
|
259
|
+
) {
|
|
260
|
+
const sessions = await this._authenticationService.getSessions(providerId, scopes, {
|
|
261
|
+
authorizationServer
|
|
262
|
+
}, true);
|
|
198
263
|
const accountNamePreference = this.authenticationMcpServersService.getAccountPreference(server.id, providerId);
|
|
199
264
|
let matchingAccountPreferenceSession;
|
|
200
265
|
if (accountNamePreference) {
|
|
@@ -204,7 +269,13 @@ let MainThreadMcp = class MainThreadMcp extends Disposable {
|
|
|
204
269
|
let session;
|
|
205
270
|
if (sessions.length) {
|
|
206
271
|
if (matchingAccountPreferenceSession && this.authenticationMCPServerAccessService.isAccessAllowed(providerId, matchingAccountPreferenceSession.account.label, server.id)) {
|
|
207
|
-
this.authenticationMCPServerUsageService.addAccountUsage(
|
|
272
|
+
this.authenticationMCPServerUsageService.addAccountUsage(
|
|
273
|
+
providerId,
|
|
274
|
+
matchingAccountPreferenceSession.account.label,
|
|
275
|
+
scopes,
|
|
276
|
+
server.id,
|
|
277
|
+
server.label
|
|
278
|
+
);
|
|
208
279
|
this._serverAuthTracking.track(providerId, serverId, scopes);
|
|
209
280
|
return matchingAccountPreferenceSession.accessToken;
|
|
210
281
|
}
|
|
@@ -215,23 +286,20 @@ let MainThreadMcp = class MainThreadMcp extends Disposable {
|
|
|
215
286
|
}
|
|
216
287
|
}
|
|
217
288
|
if (errorOnUserInteraction) {
|
|
218
|
-
throw ( new UserInteractionRequiredError(
|
|
289
|
+
throw ( new UserInteractionRequiredError("authentication"));
|
|
219
290
|
}
|
|
220
291
|
const isAllowed = await this.loginPrompt(server.label, provider.label, false);
|
|
221
292
|
if (!isAllowed) {
|
|
222
|
-
throw ( new Error(
|
|
293
|
+
throw ( new Error("User did not consent to login."));
|
|
223
294
|
}
|
|
224
295
|
if (sessions.length) {
|
|
225
296
|
if (provider.supportsMultipleAccounts && errorOnUserInteraction) {
|
|
226
|
-
throw ( new UserInteractionRequiredError(
|
|
297
|
+
throw ( new UserInteractionRequiredError("authentication"));
|
|
227
298
|
}
|
|
228
|
-
session = provider.supportsMultipleAccounts
|
|
229
|
-
|
|
230
|
-
: sessions[0];
|
|
231
|
-
}
|
|
232
|
-
else {
|
|
299
|
+
session = provider.supportsMultipleAccounts ? await this.authenticationMcpServersService.selectSession(providerId, server.id, server.label, scopes, sessions) : sessions[0];
|
|
300
|
+
} else {
|
|
233
301
|
if (errorOnUserInteraction) {
|
|
234
|
-
throw ( new UserInteractionRequiredError(
|
|
302
|
+
throw ( new UserInteractionRequiredError("authentication"));
|
|
235
303
|
}
|
|
236
304
|
const accountToCreate = matchingAccountPreferenceSession?.account;
|
|
237
305
|
do {
|
|
@@ -240,11 +308,13 @@ let MainThreadMcp = class MainThreadMcp extends Disposable {
|
|
|
240
308
|
account: accountToCreate,
|
|
241
309
|
authorizationServer
|
|
242
310
|
});
|
|
243
|
-
} while (accountToCreate
|
|
244
|
-
&& accountToCreate.label !== session.account.label
|
|
245
|
-
&& !(await this.continueWithIncorrectAccountPrompt(session.account.label, accountToCreate.label)));
|
|
311
|
+
} while (accountToCreate && accountToCreate.label !== session.account.label && !(await this.continueWithIncorrectAccountPrompt(session.account.label, accountToCreate.label)));
|
|
246
312
|
}
|
|
247
|
-
this.authenticationMCPServerAccessService.updateAllowedMcpServers(providerId, session.account.label, [{
|
|
313
|
+
this.authenticationMCPServerAccessService.updateAllowedMcpServers(providerId, session.account.label, [{
|
|
314
|
+
id: server.id,
|
|
315
|
+
name: server.label,
|
|
316
|
+
allowed: true
|
|
317
|
+
}]);
|
|
248
318
|
this.authenticationMcpServersService.updateAccountPreference(server.id, providerId, session.account);
|
|
249
319
|
this.authenticationMCPServerUsageService.addAccountUsage(providerId, session.account.label, scopes, server.id, server.label);
|
|
250
320
|
this._serverAuthTracking.track(providerId, serverId, scopes);
|
|
@@ -252,25 +322,22 @@ let MainThreadMcp = class MainThreadMcp extends Disposable {
|
|
|
252
322
|
}
|
|
253
323
|
async continueWithIncorrectAccountPrompt(chosenAccountLabel, requestedAccountLabel) {
|
|
254
324
|
const result = await this.dialogService.prompt({
|
|
255
|
-
message: ( localize(
|
|
325
|
+
message: ( localize(2538, "Incorrect account detected")),
|
|
256
326
|
detail: ( localize(
|
|
257
|
-
|
|
327
|
+
2539,
|
|
258
328
|
"The chosen account, {0}, does not match the requested account, {1}.",
|
|
259
329
|
chosenAccountLabel,
|
|
260
330
|
requestedAccountLabel
|
|
261
331
|
)),
|
|
262
332
|
type: Severity.Warning,
|
|
263
333
|
cancelButton: true,
|
|
264
|
-
buttons: [
|
|
265
|
-
{
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
},
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
run: () => requestedAccountLabel
|
|
272
|
-
}
|
|
273
|
-
],
|
|
334
|
+
buttons: [{
|
|
335
|
+
label: ( localize(2540, "Keep {0}", chosenAccountLabel)),
|
|
336
|
+
run: () => chosenAccountLabel
|
|
337
|
+
}, {
|
|
338
|
+
label: ( localize(2541, "Login with {0}", requestedAccountLabel)),
|
|
339
|
+
run: () => requestedAccountLabel
|
|
340
|
+
}]
|
|
274
341
|
});
|
|
275
342
|
if (!result.result) {
|
|
276
343
|
throw ( new CancellationError());
|
|
@@ -282,7 +349,10 @@ let MainThreadMcp = class MainThreadMcp extends Disposable {
|
|
|
282
349
|
if (!serversUsingProvider) {
|
|
283
350
|
return;
|
|
284
351
|
}
|
|
285
|
-
for (const {
|
|
352
|
+
for (const {
|
|
353
|
+
serverId,
|
|
354
|
+
scopes
|
|
355
|
+
} of serversUsingProvider) {
|
|
286
356
|
const server = this._servers.get(serverId);
|
|
287
357
|
const serverDefinition = this._serverDefinitions.get(serverId);
|
|
288
358
|
if (!server || !serverDefinition) {
|
|
@@ -294,11 +364,10 @@ let MainThreadMcp = class MainThreadMcp extends Disposable {
|
|
|
294
364
|
}
|
|
295
365
|
try {
|
|
296
366
|
await this._getSessionForProvider(serverId, serverDefinition, providerId, scopes, undefined, true);
|
|
297
|
-
}
|
|
298
|
-
catch (e) {
|
|
367
|
+
} catch (e) {
|
|
299
368
|
if (UserInteractionRequiredError.is(e)) {
|
|
300
369
|
server.pushLog(LogLevel.Warning, ( localize(
|
|
301
|
-
|
|
370
|
+
2542,
|
|
302
371
|
"Authentication session for {0} removed, stopping server",
|
|
303
372
|
providerLabel
|
|
304
373
|
)));
|
|
@@ -308,35 +377,33 @@ let MainThreadMcp = class MainThreadMcp extends Disposable {
|
|
|
308
377
|
}
|
|
309
378
|
}
|
|
310
379
|
$logMcpAuthSetup(data) {
|
|
311
|
-
this._telemetryService.publicLog2(
|
|
380
|
+
this._telemetryService.publicLog2("mcp/authSetup", data);
|
|
312
381
|
}
|
|
313
382
|
async loginPrompt(mcpLabel, providerLabel, recreatingSession) {
|
|
314
|
-
const message = recreatingSession
|
|
315
|
-
|
|
316
|
-
2540,
|
|
383
|
+
const message = recreatingSession ? ( localize(
|
|
384
|
+
2543,
|
|
317
385
|
"The MCP Server Definition '{0}' wants you to authenticate to {1}.",
|
|
318
386
|
mcpLabel,
|
|
319
387
|
providerLabel
|
|
320
|
-
))
|
|
321
|
-
|
|
322
|
-
2541,
|
|
388
|
+
)) : ( localize(
|
|
389
|
+
2544,
|
|
323
390
|
"The MCP Server Definition '{0}' wants to authenticate to {1}.",
|
|
324
391
|
mcpLabel,
|
|
325
392
|
providerLabel
|
|
326
393
|
));
|
|
327
|
-
const buttons = [
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
return true;
|
|
332
|
-
},
|
|
394
|
+
const buttons = [{
|
|
395
|
+
label: ( localize(2545, "&&Allow")),
|
|
396
|
+
run() {
|
|
397
|
+
return true;
|
|
333
398
|
}
|
|
334
|
-
];
|
|
335
|
-
const {
|
|
399
|
+
}];
|
|
400
|
+
const {
|
|
401
|
+
result
|
|
402
|
+
} = await this.dialogService.prompt({
|
|
336
403
|
type: Severity.Info,
|
|
337
404
|
message,
|
|
338
405
|
buttons,
|
|
339
|
-
cancelButton: true
|
|
406
|
+
cancelButton: true
|
|
340
407
|
});
|
|
341
408
|
return result ?? false;
|
|
342
409
|
}
|
|
@@ -350,36 +417,25 @@ let MainThreadMcp = class MainThreadMcp extends Disposable {
|
|
|
350
417
|
super.dispose();
|
|
351
418
|
}
|
|
352
419
|
};
|
|
353
|
-
MainThreadMcp = __decorate([
|
|
354
|
-
extHostNamedCustomer(MainContext.MainThreadMcp),
|
|
355
|
-
( __param(1, IMcpRegistry)),
|
|
356
|
-
( __param(2, IDialogService)),
|
|
357
|
-
( __param(3, IAuthenticationService)),
|
|
358
|
-
( __param(4, IAuthenticationMcpService)),
|
|
359
|
-
( __param(5, IAuthenticationMcpAccessService)),
|
|
360
|
-
( __param(6, IAuthenticationMcpUsageService)),
|
|
361
|
-
( __param(7, IDynamicAuthenticationProviderStorageService)),
|
|
362
|
-
( __param(8, IExtensionService)),
|
|
363
|
-
( __param(9, IContextKeyService)),
|
|
364
|
-
( __param(10, ITelemetryService))
|
|
365
|
-
], MainThreadMcp);
|
|
420
|
+
MainThreadMcp = __decorate([extHostNamedCustomer(MainContext.MainThreadMcp), ( __param(1, IMcpRegistry)), ( __param(2, IDialogService)), ( __param(3, IAuthenticationService)), ( __param(4, IAuthenticationMcpService)), ( __param(5, IAuthenticationMcpAccessService)), ( __param(6, IAuthenticationMcpUsageService)), ( __param(7, IDynamicAuthenticationProviderStorageService)), ( __param(8, IExtensionService)), ( __param(9, IContextKeyService)), ( __param(10, ITelemetryService))], MainThreadMcp);
|
|
366
421
|
class ExtHostMcpServerLaunch extends Disposable {
|
|
367
422
|
pushLog(level, message) {
|
|
368
|
-
this._onDidLog.fire({
|
|
423
|
+
this._onDidLog.fire({
|
|
424
|
+
message,
|
|
425
|
+
level
|
|
426
|
+
});
|
|
369
427
|
}
|
|
370
428
|
pushMessage(message) {
|
|
371
429
|
let parsed;
|
|
372
430
|
try {
|
|
373
431
|
parsed = JSON.parse(message);
|
|
374
|
-
}
|
|
375
|
-
catch (e) {
|
|
432
|
+
} catch (e) {
|
|
376
433
|
this.pushLog(LogLevel.Warning, `Failed to parse message: ${JSON.stringify(message)}`);
|
|
377
434
|
}
|
|
378
435
|
if (parsed) {
|
|
379
436
|
if (Array.isArray(parsed)) {
|
|
380
437
|
parsed.forEach(p => this._onDidReceiveMessage.fire(p));
|
|
381
|
-
}
|
|
382
|
-
else {
|
|
438
|
+
} else {
|
|
383
439
|
this._onDidReceiveMessage.fire(parsed);
|
|
384
440
|
}
|
|
385
441
|
}
|
|
@@ -388,19 +444,26 @@ class ExtHostMcpServerLaunch extends Disposable {
|
|
|
388
444
|
super();
|
|
389
445
|
this.stop = stop;
|
|
390
446
|
this.send = send;
|
|
391
|
-
this.state = observableValue(
|
|
447
|
+
this.state = observableValue("mcpServerState", {
|
|
448
|
+
state: McpConnectionState.Kind.Starting
|
|
449
|
+
});
|
|
392
450
|
this._onDidLog = this._register(( new Emitter()));
|
|
393
451
|
this.onDidLog = this._onDidLog.event;
|
|
394
452
|
this._onDidReceiveMessage = this._register(( new Emitter()));
|
|
395
453
|
this.onDidReceiveMessage = this._onDidReceiveMessage.event;
|
|
396
454
|
this._register(disposableTimeout(() => {
|
|
397
|
-
this.pushLog(
|
|
455
|
+
this.pushLog(
|
|
456
|
+
LogLevel.Info,
|
|
457
|
+
`Starting server from ${extensionHostKindToString(extHostKind)} extension host`
|
|
458
|
+
);
|
|
398
459
|
}));
|
|
399
460
|
}
|
|
400
461
|
extHostDispose() {
|
|
401
462
|
if (McpConnectionState.isRunning(this.state.get())) {
|
|
402
|
-
this.pushLog(LogLevel.Warning,
|
|
403
|
-
this.state.set({
|
|
463
|
+
this.pushLog(LogLevel.Warning, "Extension host shut down, server will stop.");
|
|
464
|
+
this.state.set({
|
|
465
|
+
state: McpConnectionState.Kind.Stopped
|
|
466
|
+
}, undefined);
|
|
404
467
|
}
|
|
405
468
|
this.dispose();
|
|
406
469
|
}
|
|
@@ -418,7 +481,10 @@ class McpServerAuthTracker {
|
|
|
418
481
|
track(providerId, serverId, scopes) {
|
|
419
482
|
const servers = this._tracking.get(providerId) || [];
|
|
420
483
|
const filtered = servers.filter(s => s.serverId !== serverId);
|
|
421
|
-
filtered.push({
|
|
484
|
+
filtered.push({
|
|
485
|
+
serverId,
|
|
486
|
+
scopes
|
|
487
|
+
});
|
|
422
488
|
this._tracking.set(providerId, filtered);
|
|
423
489
|
}
|
|
424
490
|
untrack(serverId) {
|
|
@@ -426,8 +492,7 @@ class McpServerAuthTracker {
|
|
|
426
492
|
const filtered = servers.filter(s => s.serverId !== serverId);
|
|
427
493
|
if (filtered.length === 0) {
|
|
428
494
|
this._tracking.delete(providerId);
|
|
429
|
-
}
|
|
430
|
-
else {
|
|
495
|
+
} else {
|
|
431
496
|
this._tracking.set(providerId, filtered);
|
|
432
497
|
}
|
|
433
498
|
}
|
|
@@ -13,12 +13,19 @@ import { IExtensionService } from '@codingame/monaco-vscode-api/vscode/vs/workbe
|
|
|
13
13
|
|
|
14
14
|
var MainThreadMessageService_1;
|
|
15
15
|
let MainThreadMessageService = class MainThreadMessageService {
|
|
16
|
-
static {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
16
|
+
static {
|
|
17
|
+
MainThreadMessageService_1 = this;
|
|
18
|
+
}
|
|
19
|
+
static {
|
|
20
|
+
this.URGENT_NOTIFICATION_SOURCES = ["vscode.github-authentication", "vscode.microsoft-authentication"];
|
|
21
|
+
}
|
|
22
|
+
constructor(
|
|
23
|
+
extHostContext,
|
|
24
|
+
_notificationService,
|
|
25
|
+
_commandService,
|
|
26
|
+
_dialogService,
|
|
27
|
+
extensionService
|
|
28
|
+
) {
|
|
22
29
|
this._notificationService = _notificationService;
|
|
23
30
|
this._commandService = _commandService;
|
|
24
31
|
this._dialogService = _dialogService;
|
|
@@ -34,8 +41,7 @@ let MainThreadMessageService = class MainThreadMessageService {
|
|
|
34
41
|
$showMessage(severity, message, options, commands) {
|
|
35
42
|
if (options.modal) {
|
|
36
43
|
return this._showModalMessage(severity, message, options.detail, commands, options.useCustom);
|
|
37
|
-
}
|
|
38
|
-
else {
|
|
44
|
+
} else {
|
|
39
45
|
return this._showMessage(severity, message, commands, options);
|
|
40
46
|
}
|
|
41
47
|
}
|
|
@@ -60,22 +66,25 @@ let MainThreadMessageService = class MainThreadMessageService {
|
|
|
60
66
|
sourceIsUrgent = MainThreadMessageService_1.URGENT_NOTIFICATION_SOURCES.includes(source.id);
|
|
61
67
|
}
|
|
62
68
|
if (!source) {
|
|
63
|
-
source = ( localize(
|
|
69
|
+
source = ( localize(2546, "Extension"));
|
|
64
70
|
}
|
|
65
71
|
const secondaryActions = [];
|
|
66
72
|
if (options.source) {
|
|
67
73
|
secondaryActions.push(toAction({
|
|
68
74
|
id: options.source.identifier.value,
|
|
69
|
-
label: ( localize(
|
|
75
|
+
label: ( localize(2547, "Manage Extension")),
|
|
70
76
|
run: () => {
|
|
71
|
-
return this._commandService.executeCommand(
|
|
77
|
+
return this._commandService.executeCommand("_extensions.manage", options.source.identifier.value);
|
|
72
78
|
}
|
|
73
79
|
}));
|
|
74
80
|
}
|
|
75
81
|
const messageHandle = this._notificationService.notify({
|
|
76
82
|
severity,
|
|
77
83
|
message,
|
|
78
|
-
actions: {
|
|
84
|
+
actions: {
|
|
85
|
+
primary: primaryActions,
|
|
86
|
+
secondary: secondaryActions
|
|
87
|
+
},
|
|
79
88
|
source,
|
|
80
89
|
priority: sourceIsUrgent ? NotificationPriority.URGENT : NotificationPriority.DEFAULT,
|
|
81
90
|
sticky: sourceIsUrgent
|
|
@@ -95,26 +104,26 @@ let MainThreadMessageService = class MainThreadMessageService {
|
|
|
95
104
|
};
|
|
96
105
|
if (command.isCloseAffordance) {
|
|
97
106
|
cancelButton = button;
|
|
98
|
-
}
|
|
99
|
-
else {
|
|
107
|
+
} else {
|
|
100
108
|
buttons.push(button);
|
|
101
109
|
}
|
|
102
110
|
}
|
|
103
111
|
if (!cancelButton) {
|
|
104
112
|
if (buttons.length > 0) {
|
|
105
113
|
cancelButton = {
|
|
106
|
-
label: ( localize(
|
|
114
|
+
label: ( localize(2548, "Cancel")),
|
|
107
115
|
run: () => undefined
|
|
108
116
|
};
|
|
109
|
-
}
|
|
110
|
-
else {
|
|
117
|
+
} else {
|
|
111
118
|
cancelButton = {
|
|
112
|
-
label: ( localize(
|
|
119
|
+
label: ( localize(2549, "&&OK")),
|
|
113
120
|
run: () => undefined
|
|
114
121
|
};
|
|
115
122
|
}
|
|
116
123
|
}
|
|
117
|
-
const {
|
|
124
|
+
const {
|
|
125
|
+
result
|
|
126
|
+
} = await this._dialogService.prompt({
|
|
118
127
|
type: severity,
|
|
119
128
|
message,
|
|
120
129
|
detail,
|
|
@@ -125,12 +134,9 @@ let MainThreadMessageService = class MainThreadMessageService {
|
|
|
125
134
|
return result;
|
|
126
135
|
}
|
|
127
136
|
};
|
|
128
|
-
MainThreadMessageService = MainThreadMessageService_1 = __decorate(
|
|
129
|
-
extHostNamedCustomer(MainContext.MainThreadMessageService),
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
( __param(3, IDialogService)),
|
|
133
|
-
( __param(4, IExtensionService))
|
|
134
|
-
], MainThreadMessageService);
|
|
137
|
+
MainThreadMessageService = MainThreadMessageService_1 = __decorate(
|
|
138
|
+
[extHostNamedCustomer(MainContext.MainThreadMessageService), ( __param(1, INotificationService)), ( __param(2, ICommandService)), ( __param(3, IDialogService)), ( __param(4, IExtensionService))],
|
|
139
|
+
MainThreadMessageService
|
|
140
|
+
);
|
|
135
141
|
|
|
136
142
|
export { MainThreadMessageService };
|