@codingame/monaco-vscode-extensions-service-override 21.6.0 → 22.0.1

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.
Files changed (48) hide show
  1. package/package.json +29 -30
  2. package/vscode/src/vs/platform/extensionManagement/common/extensionManagementCLI.js +28 -28
  3. package/vscode/src/vs/workbench/api/browser/mainThreadAuthentication.d.ts +3 -3
  4. package/vscode/src/vs/workbench/api/browser/mainThreadAuthentication.js +41 -32
  5. package/vscode/src/vs/workbench/api/browser/mainThreadCLICommands.js +1 -1
  6. package/vscode/src/vs/workbench/api/browser/mainThreadChatAgents2.js +6 -5
  7. package/vscode/src/vs/workbench/api/browser/mainThreadChatSessions.d.ts +5 -2
  8. package/vscode/src/vs/workbench/api/browser/mainThreadChatSessions.js +44 -4
  9. package/vscode/src/vs/workbench/api/browser/mainThreadComments.js +2 -2
  10. package/vscode/src/vs/workbench/api/browser/mainThreadCustomEditors.js +3 -3
  11. package/vscode/src/vs/workbench/api/browser/mainThreadDocumentsAndEditors.js +1 -1
  12. package/vscode/src/vs/workbench/api/browser/mainThreadEditSessionIdentityParticipant.js +1 -1
  13. package/vscode/src/vs/workbench/api/browser/mainThreadEditorTabs.d.ts +1 -1
  14. package/vscode/src/vs/workbench/api/browser/mainThreadEditorTabs.js +2 -2
  15. package/vscode/src/vs/workbench/api/browser/mainThreadEditors.d.ts +1 -1
  16. package/vscode/src/vs/workbench/api/browser/mainThreadEditors.js +1 -1
  17. package/vscode/src/vs/workbench/api/browser/mainThreadExtensionService.js +11 -11
  18. package/vscode/src/vs/workbench/api/browser/mainThreadFileSystemEventService.js +20 -20
  19. package/vscode/src/vs/workbench/api/browser/mainThreadLanguageFeatures.js +39 -27
  20. package/vscode/src/vs/workbench/api/browser/mainThreadLanguageModelTools.js +4 -1
  21. package/vscode/src/vs/workbench/api/browser/mainThreadLanguageModels.js +47 -41
  22. package/vscode/src/vs/workbench/api/browser/mainThreadMcp.d.ts +6 -2
  23. package/vscode/src/vs/workbench/api/browser/mainThreadMcp.js +75 -27
  24. package/vscode/src/vs/workbench/api/browser/mainThreadMessageService.js +4 -4
  25. package/vscode/src/vs/workbench/api/browser/mainThreadNotebookDocumentsAndEditors.js +1 -1
  26. package/vscode/src/vs/workbench/api/browser/mainThreadNotebookEditors.js +1 -1
  27. package/vscode/src/vs/workbench/api/browser/mainThreadNotebookSaveParticipant.js +1 -1
  28. package/vscode/src/vs/workbench/api/browser/mainThreadOutputService.js +3 -3
  29. package/vscode/src/vs/workbench/api/browser/mainThreadProgress.js +1 -1
  30. package/vscode/src/vs/workbench/api/browser/mainThreadSCM.js +9 -2
  31. package/vscode/src/vs/workbench/api/browser/mainThreadSaveParticipant.js +1 -1
  32. package/vscode/src/vs/workbench/api/browser/mainThreadSearch.js +1 -1
  33. package/vscode/src/vs/workbench/api/browser/mainThreadTask.js +1 -1
  34. package/vscode/src/vs/workbench/api/browser/mainThreadTerminalService.js +21 -7
  35. package/vscode/src/vs/workbench/api/browser/mainThreadTunnelService.d.ts +1 -0
  36. package/vscode/src/vs/workbench/api/browser/mainThreadTunnelService.js +5 -2
  37. package/vscode/src/vs/workbench/api/browser/mainThreadUriOpeners.js +2 -2
  38. package/vscode/src/vs/workbench/api/browser/mainThreadWebviewPanels.js +1 -1
  39. package/vscode/src/vs/workbench/api/browser/mainThreadWebviews.js +1 -1
  40. package/vscode/src/vs/workbench/api/browser/mainThreadWorkspace.js +5 -5
  41. package/vscode/src/vs/workbench/contrib/customEditor/common/customTextEditorModel.js +1 -1
  42. package/vscode/src/vs/workbench/contrib/externalUriOpener/common/contributedOpeners.js +1 -1
  43. package/vscode/src/vs/workbench/services/extensionManagement/browser/extensionBisect.js +23 -23
  44. package/vscode/src/vs/workbench/services/extensionManagement/browser/webExtensionsScannerService.js +2 -2
  45. package/vscode/src/vs/workbench/services/extensions/common/abstractExtensionService.js +12 -12
  46. package/vscode/src/vs/workbench/services/extensions/common/extensionHostManager.js +1 -1
  47. package/vscode/src/vs/workbench/services/extensions/common/extensionsProposedApi.js +1 -1
  48. 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-0af61f78-dfc5-57ba-8d32-66268c8de38d-common/vscode/vs/workbench/contrib/chat/browser/imageUtils';
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 dipsosables = ( new DisposableStore());
47
- dipsosables.add(this._chatProviderService.registerLanguageModelProvider(vendor, {
48
- onDidChange: Event.filter(this._lmProviderChange.event, e => e.vendor === vendor, dipsosables),
49
- provideLanguageModelChatInfo: async (options, token) => {
50
- const modelsAndIdentifiers = await this._proxy.$provideLanguageModelChatInfo(vendor, options, token);
51
- modelsAndIdentifiers.forEach(m => {
52
- if (m.metadata.auth) {
53
- dipsosables.add(this._registerAuthenticationProvider(m.metadata.extension, m.metadata.auth));
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
- return modelsAndIdentifiers;
57
- },
58
- sendChatRequest: async (modelId, messages, from, options, token) => {
59
- const requestId = (Math.random() * 1e6) | 0;
60
- const defer = ( new DeferredPromise());
61
- const stream = ( new AsyncIterableSource());
62
- try {
63
- this._pendingProgress.set(requestId, { defer, stream });
64
- await Promise.all(( messages.flatMap(msg => msg.content)
65
- .filter(part => part.type === 'image_url')
66
- .map(async (part) => {
67
- part.value.data = VSBuffer.wrap(await resizeImage(part.value.data.buffer));
68
- })));
69
- await this._proxy.$startChatRequest(modelId, requestId, from, ( new SerializableObjectWithBuffers(messages)), options, token);
70
- }
71
- catch (err) {
72
- this._pendingProgress.delete(requestId);
73
- throw err;
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(2483, 'Language Models'));
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
- 2484,
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, McpServerLaunch, McpConnectionState } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/mcp/common/mcpTypes';
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
- start: (_collection, serverDefiniton, resolveLaunch) => {
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, resolveLaunch);
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 handle = this._mcpRegistry.registerCollection({
77
- ...collection,
78
- source: ( new ExtensionIdentifier(collection.extensionId)),
79
- resolveServerLanch: collection.canResolveLaunch ? (async (def) => {
80
- const r = await this._proxy.$resolveMcpLaunch(collection.id, def.label);
81
- return r ? McpServerLaunch.fromSerialized(r) : undefined;
82
- }) : undefined,
83
- trustBehavior: collection.isTrustedByDefault ? McpServerTrust.Kind.Trusted : McpServerTrust.Kind.TrustedOnNonce,
84
- remoteAuthority: this._extHostContext.remoteAuthority,
85
- serverDefinitions,
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: () => handle.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(2485, "Incorrect account detected")),
226
+ message: ( localize(2491, "Incorrect account detected")),
181
227
  detail: ( localize(
182
- 2486,
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(2487, 'Keep {0}', chosenAccountLabel)),
237
+ label: ( localize(2493, 'Keep {0}', chosenAccountLabel)),
192
238
  run: () => chosenAccountLabel
193
239
  },
194
240
  {
195
- label: ( localize(2488, 'Login with {0}', requestedAccountLabel)),
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
- 2489,
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
- 2490,
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(2491, "&&Allow")),
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(2492, "Extension"));
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(2493, "Manage Extension")),
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(2494, "Cancel")),
106
+ label: ( localize(2500, "Cancel")),
107
107
  run: () => undefined
108
108
  };
109
109
  }
110
110
  else {
111
111
  cancelButton = {
112
- label: ( localize(2495, "&&OK")),
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-5e2c24a1-3217-55e8-bc90-521eaf7df5a6-common/vscode/vs/workbench/services/editor/common/editorGroupColumn';
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-5e2c24a1-3217-55e8-bc90-521eaf7df5a6-common/vscode/vs/workbench/services/editor/common/editorGroupColumn';
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(2496, "Aborted onWillSaveNotebookDocument-event after 1750ms"))))), 1750);
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(2497, "Show Output")),
72
+ name: ( localize(2503, "Show Output")),
73
73
  text: '$(output)',
74
- ariaLabel: ( localize(2498, "Show {0} Output Channel", channel.label)),
74
+ ariaLabel: ( localize(2504, "Show {0} Output Channel", channel.label)),
75
75
  command: `workbench.action.output.show.${channel.id}`,
76
- tooltip: ( localize(2499, "Show {0} Output Channel", channel.label)),
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(2500, "Manage Extension")),
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-d0569cfb-4706-5ad6-b0b0-5115ad8685db-common/vscode/vs/base/common/resourceTree';
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-d0569cfb-4706-5ad6-b0b0-5115ad8685db-common/vscode/vs/workbench/contrib/scm/browser/scmHistory';
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(2501, "Aborted onWillSaveTextDocument-event after 1750ms"))))), 1750);
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-4dda7789-5a25-5e8b-b2de-c2f11b1b96e5-common/vscode/vs/workbench/contrib/search/common/constants';
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(2502, '{0}: {1}', source.label, task.name));
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
- return {
232
- items: completions?.items.map(c => ({
233
- provider: `ext:${id}`,
234
- ...c,
235
- })),
236
- resourceRequestConfig: completions?.resourceRequestConfig
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
- 2503,
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(2504, "Use Port {0} as Sudo...", tunnel.tunnelRemotePort)),
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);