@codingame/monaco-vscode-extensions-service-override 34.1.3 → 35.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 (46) hide show
  1. package/index.js +2 -0
  2. package/package.json +3 -3
  3. package/vscode/src/vs/platform/extensionManagement/common/extensionManagementCLI.js +29 -29
  4. package/vscode/src/vs/workbench/api/browser/mainThreadAgentEditorComments.d.ts +25 -0
  5. package/vscode/src/vs/workbench/api/browser/mainThreadAgentEditorComments.js +57 -0
  6. package/vscode/src/vs/workbench/api/browser/mainThreadAuthentication.js +28 -28
  7. package/vscode/src/vs/workbench/api/browser/mainThreadBrowserTunnelProxy.d.ts +23 -0
  8. package/vscode/src/vs/workbench/api/browser/mainThreadBrowserTunnelProxy.js +47 -0
  9. package/vscode/src/vs/workbench/api/browser/mainThreadCLICommands.js +1 -1
  10. package/vscode/src/vs/workbench/api/browser/mainThreadChatAgents2.js +30 -3
  11. package/vscode/src/vs/workbench/api/browser/mainThreadChatSessions.d.ts +12 -0
  12. package/vscode/src/vs/workbench/api/browser/mainThreadChatSessions.js +12 -3
  13. package/vscode/src/vs/workbench/api/browser/mainThreadComments.js +1 -1
  14. package/vscode/src/vs/workbench/api/browser/mainThreadCustomEditors.js +2 -2
  15. package/vscode/src/vs/workbench/api/browser/mainThreadEditSessionIdentityParticipant.js +1 -1
  16. package/vscode/src/vs/workbench/api/browser/mainThreadExtensionService.js +11 -11
  17. package/vscode/src/vs/workbench/api/browser/mainThreadFileSystemEventService.js +20 -20
  18. package/vscode/src/vs/workbench/api/browser/mainThreadLanguageFeatures.js +1 -1
  19. package/vscode/src/vs/workbench/api/browser/mainThreadLanguageModelTools.js +2 -1
  20. package/vscode/src/vs/workbench/api/browser/mainThreadLanguageModels.d.ts +5 -1
  21. package/vscode/src/vs/workbench/api/browser/mainThreadLanguageModels.js +70 -10
  22. package/vscode/src/vs/workbench/api/browser/mainThreadLanguages.d.ts +6 -2
  23. package/vscode/src/vs/workbench/api/browser/mainThreadLanguages.js +61 -2
  24. package/vscode/src/vs/workbench/api/browser/mainThreadMcp.js +13 -13
  25. package/vscode/src/vs/workbench/api/browser/mainThreadMessageService.js +4 -4
  26. package/vscode/src/vs/workbench/api/browser/mainThreadNotebookSaveParticipant.js +1 -1
  27. package/vscode/src/vs/workbench/api/browser/mainThreadOutputService.js +3 -3
  28. package/vscode/src/vs/workbench/api/browser/mainThreadProgress.js +1 -1
  29. package/vscode/src/vs/workbench/api/browser/mainThreadQuickDiff.d.ts +7 -1
  30. package/vscode/src/vs/workbench/api/browser/mainThreadQuickDiff.js +46 -3
  31. package/vscode/src/vs/workbench/api/browser/mainThreadSaveParticipant.js +1 -1
  32. package/vscode/src/vs/workbench/api/browser/mainThreadTask.js +1 -1
  33. package/vscode/src/vs/workbench/api/browser/mainThreadTunnelService.js +2 -2
  34. package/vscode/src/vs/workbench/api/browser/mainThreadUriOpeners.js +2 -2
  35. package/vscode/src/vs/workbench/api/browser/mainThreadWebviews.js +1 -1
  36. package/vscode/src/vs/workbench/api/browser/mainThreadWorkspace.js +5 -5
  37. package/vscode/src/vs/workbench/contrib/customEditor/common/customTextEditorModel.js +1 -1
  38. package/vscode/src/vs/workbench/services/extensionManagement/browser/extensionBisect.js +23 -23
  39. package/vscode/src/vs/workbench/services/extensionManagement/browser/webExtensionsScannerService.d.ts +0 -1
  40. package/vscode/src/vs/workbench/services/extensionManagement/browser/webExtensionsScannerService.js +4 -7
  41. package/vscode/src/vs/workbench/services/extensions/common/abstractExtensionService.js +12 -12
  42. package/vscode/src/vs/workbench/services/extensions/common/extensionHostManager.js +1 -1
  43. package/vscode/src/vs/workbench/services/extensions/common/extensionsProposedApi.js +1 -1
  44. package/vscode/src/vs/workbench/services/extensions/common/extensionsUtil.js +4 -4
  45. package/vscode/src/vs/workbench/services/extensions/worker/webWorkerExtensionHostIframe.html +12 -3
  46. package/vscode/src/vs/workbench/services/themes/browser/cssExtensionPoint.js +5 -5
@@ -2,14 +2,17 @@
2
2
  import { __decorate, __param } from '@codingame/monaco-vscode-api/external/tslib/tslib.es6';
3
3
  import { DeferredPromise, AsyncIterableSource } from '@codingame/monaco-vscode-api/vscode/vs/base/common/async';
4
4
  import { VSBuffer } from '@codingame/monaco-vscode-api/vscode/vs/base/common/buffer';
5
+ import { CancellationTokenSource } from '@codingame/monaco-vscode-api/vscode/vs/base/common/cancellation';
5
6
  import { toErrorMessage } from '@codingame/monaco-vscode-api/vscode/vs/base/common/errorMessage';
6
- import { transformErrorFromSerialization, transformErrorForSerialization } from '@codingame/monaco-vscode-api/vscode/vs/base/common/errors';
7
+ import { CancellationError, transformErrorFromSerialization, transformErrorForSerialization } from '@codingame/monaco-vscode-api/vscode/vs/base/common/errors';
7
8
  import { Emitter, Event } from '@codingame/monaco-vscode-api/vscode/vs/base/common/event';
8
9
  import { equalSets } from '@codingame/monaco-vscode-api/vscode/vs/base/common/collections';
9
- import { DisposableStore, DisposableMap, Disposable, toDisposable } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
10
+ import { Disposable, DisposableStore, DisposableMap, toDisposable } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
10
11
  import { URI } from '@codingame/monaco-vscode-api/vscode/vs/base/common/uri';
11
12
  import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
13
+ import { ExtensionIdentifier } from '@codingame/monaco-vscode-api/vscode/vs/platform/extensions/common/extensions';
12
14
  import { ILogService } from '@codingame/monaco-vscode-api/vscode/vs/platform/log/common/log.service';
15
+ import { IProductService } from '@codingame/monaco-vscode-api/vscode/vs/platform/product/common/productService.service';
13
16
  import { resizeImage } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/chatImageUtils';
14
17
  import { ILanguageModelIgnoredFilesService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/ignoredFiles.service';
15
18
  import { ILanguageModelsService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/languageModels.service';
@@ -22,11 +25,27 @@ import { SerializableObjectWithBuffers } from '@codingame/monaco-vscode-api/vsco
22
25
  import { ExtHostContext, MainContext } from '@codingame/monaco-vscode-api/vscode/vs/workbench/api/common/extHost.protocol';
23
26
  import { LanguageModelError } from '@codingame/monaco-vscode-api/vscode/vs/workbench/api/common/extHostTypes';
24
27
 
28
+ class RequestCancellationTokenSource extends Disposable {
29
+ constructor(parent, onCancellationRequested) {
30
+ super();
31
+ this._source = this._register(( new CancellationTokenSource(parent)));
32
+ if (onCancellationRequested) {
33
+ this._register(this._source.token.onCancellationRequested(onCancellationRequested));
34
+ }
35
+ }
36
+ get token() {
37
+ return this._source.token;
38
+ }
39
+ cancel() {
40
+ this._source.cancel();
41
+ }
42
+ }
25
43
  let MainThreadLanguageModels = class MainThreadLanguageModels {
26
44
  constructor(
27
45
  extHostContext,
28
46
  _chatProviderService,
29
47
  _logService,
48
+ _productService,
30
49
  _authenticationService,
31
50
  _authenticationAccessService,
32
51
  _extensionService,
@@ -34,6 +53,7 @@ let MainThreadLanguageModels = class MainThreadLanguageModels {
34
53
  ) {
35
54
  this._chatProviderService = _chatProviderService;
36
55
  this._logService = _logService;
56
+ this._productService = _productService;
37
57
  this._authenticationService = _authenticationService;
38
58
  this._authenticationAccessService = _authenticationAccessService;
39
59
  this._extensionService = _extensionService;
@@ -42,6 +62,7 @@ let MainThreadLanguageModels = class MainThreadLanguageModels {
42
62
  this._providerRegistrations = ( new DisposableMap());
43
63
  this._lmProviderChange = ( new Emitter());
44
64
  this._pendingProgress = ( new Map());
65
+ this._pendingCancelCTS = ( new DisposableMap());
45
66
  this._ignoredFileProviderRegistrations = ( new DisposableMap());
46
67
  this._proxy = ( extHostContext.getProxy(ExtHostContext.ExtHostChatProvider));
47
68
  let lastModelIds = ( new Set(this._chatProviderService.getLanguageModelIds()));
@@ -57,6 +78,8 @@ let MainThreadLanguageModels = class MainThreadLanguageModels {
57
78
  dispose() {
58
79
  this._lmProviderChange.dispose();
59
80
  this._providerRegistrations.dispose();
81
+ this._pendingProgress.clear();
82
+ this._pendingCancelCTS.dispose();
60
83
  this._ignoredFileProviderRegistrations.dispose();
61
84
  this._store.dispose();
62
85
  }
@@ -67,30 +90,58 @@ let MainThreadLanguageModels = class MainThreadLanguageModels {
67
90
  onDidChange: Event.filter(this._lmProviderChange.event, e => e.vendor === vendor, disposables),
68
91
  provideLanguageModelChatInfo: async (options, token) => {
69
92
  const modelsAndIdentifiers = await this._proxy.$provideLanguageModelChatInfo(vendor, options, token);
70
- modelsAndIdentifiers.forEach(m => {
93
+ const copilotExtensionId = this._productService.defaultChatAgent?.chatExtensionId;
94
+ return ( modelsAndIdentifiers.map(m => {
71
95
  if (m.metadata.auth) {
72
96
  disposables.add(
73
97
  this._registerAuthenticationProvider(m.metadata.extension, m.metadata.auth)
74
98
  );
75
99
  }
76
- });
77
- return modelsAndIdentifiers;
100
+ if (m.metadata.isBYOK !== undefined) {
101
+ return m;
102
+ }
103
+ const isBuiltinCopilot = !!copilotExtensionId && ExtensionIdentifier.equals(m.metadata.extension, copilotExtensionId);
104
+ return {
105
+ ...m,
106
+ metadata: {
107
+ ...m.metadata,
108
+ isBYOK: !isBuiltinCopilot
109
+ }
110
+ };
111
+ }));
78
112
  },
79
113
  sendChatRequest: async (modelId, messages, from, options, token) => {
80
114
  const requestId = (Math.random() * 1e6) | 0;
81
115
  const defer = ( new DeferredPromise());
116
+ defer.p.catch(() => {});
82
117
  const stream = new AsyncIterableSource();
83
118
  try {
84
119
  this._pendingProgress.set(requestId, {
85
120
  defer,
86
121
  stream
87
122
  });
123
+ const cts = ( new RequestCancellationTokenSource(token, () => {
124
+ this._proxy.$cancelLanguageModelChatRequest(requestId);
125
+ }));
126
+ this._pendingCancelCTS.set(requestId, cts);
88
127
  await Promise.all(( messages.flatMap(msg => msg.content).filter(part => part.type === "image_url").map(async part => {
89
128
  part.value.data = VSBuffer.wrap(await resizeImage(part.value.data.buffer));
90
129
  })));
91
- await this._proxy.$startChatRequest(modelId, requestId, from, ( new SerializableObjectWithBuffers(messages)), options, token);
130
+ if (token.isCancellationRequested) {
131
+ this._pendingProgress.delete(requestId);
132
+ this._pendingCancelCTS.deleteAndDispose(requestId);
133
+ const err = ( new CancellationError());
134
+ stream.reject(err);
135
+ defer.error(err);
136
+ return {
137
+ result: defer.p,
138
+ stream: stream.asyncIterable
139
+ };
140
+ }
141
+ await this._proxy.$startChatRequest(modelId, requestId, from, ( new SerializableObjectWithBuffers(messages)), options, cts.token);
92
142
  } catch (err) {
93
143
  this._pendingProgress.delete(requestId);
144
+ this._pendingCancelCTS.deleteAndDispose(requestId);
94
145
  throw err;
95
146
  }
96
147
  return {
@@ -125,6 +176,7 @@ let MainThreadLanguageModels = class MainThreadLanguageModels {
125
176
  this._logService.trace("[LM] report response DONE", Boolean(data), requestId, err);
126
177
  if (data) {
127
178
  this._pendingProgress.delete(requestId);
179
+ this._pendingCancelCTS.deleteAndDispose(requestId);
128
180
  if (err) {
129
181
  const error = LanguageModelError.tryDeserialize(err) ?? transformErrorFromSerialization(err);
130
182
  data.stream.reject(error);
@@ -138,16 +190,22 @@ let MainThreadLanguageModels = class MainThreadLanguageModels {
138
190
  $unregisterProvider(vendor) {
139
191
  this._providerRegistrations.deleteAndDispose(vendor);
140
192
  }
193
+ $cancelLanguageModelChatRequest(requestId) {
194
+ this._pendingCancelCTS.get(requestId)?.cancel();
195
+ }
141
196
  $selectChatModels(selector) {
142
197
  return this._chatProviderService.selectLanguageModels(selector);
143
198
  }
144
199
  async $tryStartChatRequest(extension, modelIdentifier, requestId, messages, options, token) {
145
200
  this._logService.trace("[CHAT] request STARTED", extension.value, requestId);
201
+ const cts = ( new RequestCancellationTokenSource(token));
202
+ this._pendingCancelCTS.set(requestId, cts);
146
203
  let response;
147
204
  try {
148
- response = await this._chatProviderService.sendChatRequest(modelIdentifier, extension, messages.value, options, token);
205
+ response = await this._chatProviderService.sendChatRequest(modelIdentifier, extension, messages.value, options, cts.token);
149
206
  } catch (err) {
150
207
  this._logService.error("[CHAT] request FAILED", extension.value, requestId, err);
208
+ this._pendingCancelCTS.deleteAndDispose(requestId);
151
209
  throw err;
152
210
  }
153
211
  const streaming = (async () => {
@@ -169,6 +227,7 @@ let MainThreadLanguageModels = class MainThreadLanguageModels {
169
227
  })();
170
228
  Promise.allSettled([response.result, streaming]).then(() => {
171
229
  this._logService.debug("[CHAT] extension request DONE", extension.value, requestId);
230
+ this._pendingCancelCTS.deleteAndDispose(requestId);
172
231
  this._proxy.$acceptResponseDone(requestId, undefined);
173
232
  }, err => {
174
233
  this._logService.error(
@@ -177,6 +236,7 @@ let MainThreadLanguageModels = class MainThreadLanguageModels {
177
236
  extension.value,
178
237
  requestId
179
238
  );
239
+ this._pendingCancelCTS.deleteAndDispose(requestId);
180
240
  this._proxy.$acceptResponseDone(requestId, transformErrorForSerialization(err));
181
241
  });
182
242
  }
@@ -188,7 +248,7 @@ let MainThreadLanguageModels = class MainThreadLanguageModels {
188
248
  if (this._authenticationService.getProviderIds().includes(authProviderId)) {
189
249
  return Disposable.None;
190
250
  }
191
- const accountLabel = auth.accountLabel ?? ( localize(2697, "Language Models"));
251
+ const accountLabel = auth.accountLabel ?? ( localize(2773, "Language Models"));
192
252
  const disposables = ( new DisposableStore());
193
253
  const provider = ( new LanguageModelAccessAuthProvider(authProviderId, auth.providerLabel, accountLabel));
194
254
  this._authenticationService.registerAuthenticationProvider(authProviderId, provider);
@@ -228,7 +288,7 @@ let MainThreadLanguageModels = class MainThreadLanguageModels {
228
288
  }
229
289
  };
230
290
  MainThreadLanguageModels = __decorate(
231
- [extHostNamedCustomer(MainContext.MainThreadLanguageModels), ( __param(1, ILanguageModelsService)), ( __param(2, ILogService)), ( __param(3, IAuthenticationService)), ( __param(4, IAuthenticationAccessService)), ( __param(5, IExtensionService)), ( __param(6, ILanguageModelIgnoredFilesService))],
291
+ [extHostNamedCustomer(MainContext.MainThreadLanguageModels), ( __param(1, ILanguageModelsService)), ( __param(2, ILogService)), ( __param(3, IProductService)), ( __param(4, IAuthenticationService)), ( __param(5, IAuthenticationAccessService)), ( __param(6, IExtensionService)), ( __param(7, ILanguageModelIgnoredFilesService))],
232
292
  MainThreadLanguageModels
233
293
  );
234
294
  class LanguageModelAccessAuthProvider {
@@ -271,7 +331,7 @@ class LanguageModelAccessAuthProvider {
271
331
  }
272
332
  confirmation(extensionName, _recreatingSession) {
273
333
  return localize(
274
- 2698,
334
+ 2774,
275
335
  "The extension '{0}' wants to access the language models provided by {1}.",
276
336
  extensionName,
277
337
  this.label
@@ -1,7 +1,7 @@
1
1
  import { UriComponents } from "@codingame/monaco-vscode-api/vscode/vs/base/common/uri";
2
2
  import { ILanguageService } from "@codingame/monaco-vscode-api/vscode/vs/editor/common/languages/language.service";
3
3
  import { IModelService } from "@codingame/monaco-vscode-api/vscode/vs/editor/common/services/model.service";
4
- import { MainThreadLanguagesShape } from "@codingame/monaco-vscode-api/vscode/vs/workbench/api/common/extHost.protocol";
4
+ import { MainThreadLanguagesShape, ISyntaxHighlightingResultDto } from "@codingame/monaco-vscode-api/vscode/vs/workbench/api/common/extHost.protocol";
5
5
  import { IExtHostContext } from "../../services/extensions/common/extHostCustomers.js";
6
6
  import { IPosition } from "@codingame/monaco-vscode-api/vscode/vs/editor/common/core/position";
7
7
  import { IRange } from "@codingame/monaco-vscode-api/vscode/vs/editor/common/core/range";
@@ -10,19 +10,23 @@ import { ITextModelService } from "@codingame/monaco-vscode-api/vscode/vs/editor
10
10
  import { ILanguageStatus } from "@codingame/monaco-vscode-languages-service-override/vscode/vs/workbench/services/languageStatus/common/languageStatusService";
11
11
  import { ILanguageStatusService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/services/languageStatus/common/languageStatusService.service";
12
12
  import { Disposable } from "@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle";
13
+ import { ITextMateTokenizationService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/services/textMate/browser/textMateTokenizationFeature.service";
14
+ import { IThemeService } from "@codingame/monaco-vscode-api/vscode/vs/platform/theme/common/themeService.service";
13
15
  export declare class MainThreadLanguages extends Disposable implements MainThreadLanguagesShape {
14
16
  private readonly _languageService;
15
17
  private readonly _modelService;
16
18
  private _resolverService;
17
19
  private readonly _languageStatusService;
20
+ private readonly _textMateService;
18
21
  private readonly _proxy;
19
22
  private readonly _status;
20
- constructor(_extHostContext: IExtHostContext, _languageService: ILanguageService, _modelService: IModelService, _resolverService: ITextModelService, _languageStatusService: ILanguageStatusService);
23
+ constructor(_extHostContext: IExtHostContext, _languageService: ILanguageService, _modelService: IModelService, _resolverService: ITextModelService, _languageStatusService: ILanguageStatusService, _textMateService: ITextMateTokenizationService, themeService: IThemeService);
21
24
  $changeLanguage(resource: UriComponents, languageId: string): Promise<void>;
22
25
  $tokensAtPosition(resource: UriComponents, position: IPosition): Promise<undefined | {
23
26
  type: StandardTokenType;
24
27
  range: IRange;
25
28
  }>;
29
+ $computeFullSyntaxHighlighting(source: string, languageId: string): Promise<ISyntaxHighlightingResultDto>;
26
30
  $setLanguageStatus(handle: number, status: ILanguageStatus): void;
27
31
  $removeLanguageStatus(handle: number): void;
28
32
  }
@@ -6,9 +6,14 @@ import { IModelService } from '@codingame/monaco-vscode-api/vscode/vs/editor/com
6
6
  import { ExtHostContext, MainContext } from '@codingame/monaco-vscode-api/vscode/vs/workbench/api/common/extHost.protocol';
7
7
  import { extHostNamedCustomer } from '../../services/extensions/common/extHostCustomers.js';
8
8
  import { Range } from '@codingame/monaco-vscode-api/vscode/vs/editor/common/core/range';
9
+ import { FontStyle, TokenMetadata } from '@codingame/monaco-vscode-api/vscode/vs/editor/common/encodedTokenAttributes';
10
+ import { TokenizationRegistry } from '@codingame/monaco-vscode-api/vscode/vs/editor/common/languages';
11
+ import { Color } from '@codingame/monaco-vscode-api/vscode/vs/base/common/color';
9
12
  import { ITextModelService } from '@codingame/monaco-vscode-api/vscode/vs/editor/common/services/resolverService.service';
10
13
  import { ILanguageStatusService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/languageStatus/common/languageStatusService.service';
11
14
  import { Disposable, DisposableMap } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
15
+ import { ITextMateTokenizationService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/textMate/browser/textMateTokenizationFeature.service';
16
+ import { IThemeService } from '@codingame/monaco-vscode-api/vscode/vs/platform/theme/common/themeService.service';
12
17
 
13
18
  let MainThreadLanguages = class MainThreadLanguages extends Disposable {
14
19
  constructor(
@@ -16,19 +21,25 @@ let MainThreadLanguages = class MainThreadLanguages extends Disposable {
16
21
  _languageService,
17
22
  _modelService,
18
23
  _resolverService,
19
- _languageStatusService
24
+ _languageStatusService,
25
+ _textMateService,
26
+ themeService
20
27
  ) {
21
28
  super();
22
29
  this._languageService = _languageService;
23
30
  this._modelService = _modelService;
24
31
  this._resolverService = _resolverService;
25
32
  this._languageStatusService = _languageStatusService;
33
+ this._textMateService = _textMateService;
26
34
  this._status = this._register(( new DisposableMap()));
27
35
  this._proxy = ( _extHostContext.getProxy(ExtHostContext.ExtHostLanguages));
28
36
  this._proxy.$acceptLanguageIds(_languageService.getRegisteredLanguageIds());
29
37
  this._register(_languageService.onDidChange(_ => {
30
38
  this._proxy.$acceptLanguageIds(_languageService.getRegisteredLanguageIds());
31
39
  }));
40
+ this._register(themeService.onDidColorThemeChange(() => {
41
+ this._proxy.$acceptSyntaxHighlightingThemeChanged();
42
+ }));
32
43
  }
33
44
  async $changeLanguage(resource, languageId) {
34
45
  if (!this._languageService.isRegisteredLanguageId(languageId)) {
@@ -61,6 +72,54 @@ let MainThreadLanguages = class MainThreadLanguages extends Disposable {
61
72
  ))
62
73
  };
63
74
  }
75
+ async $computeFullSyntaxHighlighting(source, languageId) {
76
+ const colorMap = ( (TokenizationRegistry.getColorMap() ?? []).map(c => c ? Color.Format.CSS.formatHexA(c) : ""));
77
+ const resolvedLanguageId = this._languageService.isRegisteredLanguageId(languageId) ? languageId : this._languageService.getLanguageIdByLanguageName(languageId);
78
+ const grammar = resolvedLanguageId ? await this._textMateService.createTokenizer(resolvedLanguageId) : null;
79
+ if (!grammar) {
80
+ const tokens = source.length === 0 ? [] : [{
81
+ length: source.length,
82
+ foreground: 0,
83
+ fontStyle: FontStyle.None
84
+ }];
85
+ return {
86
+ tokens,
87
+ colorMap
88
+ };
89
+ }
90
+ const tokens = [];
91
+ const lines = source.split("\n");
92
+ let state = null;
93
+ for (let i = 0; i < lines.length; i++) {
94
+ const line = lines[i];
95
+ const result = grammar.tokenizeLine2(line, state, 500);
96
+ state = result.ruleStack;
97
+ const binary = result.tokens;
98
+ for (let j = 0; j < binary.length; j += 2) {
99
+ const startOffset = binary[j];
100
+ const metadata = binary[j + 1];
101
+ const endOffset = j + 2 < binary.length ? binary[j + 2] : line.length;
102
+ if (endOffset > startOffset) {
103
+ tokens.push({
104
+ length: endOffset - startOffset,
105
+ foreground: TokenMetadata.getForeground(metadata),
106
+ fontStyle: TokenMetadata.getFontStyle(metadata)
107
+ });
108
+ }
109
+ }
110
+ if (i < lines.length - 1) {
111
+ tokens.push({
112
+ length: 1,
113
+ foreground: 0,
114
+ fontStyle: FontStyle.None
115
+ });
116
+ }
117
+ }
118
+ return {
119
+ tokens,
120
+ colorMap
121
+ };
122
+ }
64
123
  $setLanguageStatus(handle, status) {
65
124
  this._status.set(handle, this._languageStatusService.addStatus(status));
66
125
  }
@@ -68,6 +127,6 @@ let MainThreadLanguages = class MainThreadLanguages extends Disposable {
68
127
  this._status.deleteAndDispose(handle);
69
128
  }
70
129
  };
71
- MainThreadLanguages = __decorate([extHostNamedCustomer(MainContext.MainThreadLanguages), ( __param(1, ILanguageService)), ( __param(2, IModelService)), ( __param(3, ITextModelService)), ( __param(4, ILanguageStatusService))], MainThreadLanguages);
130
+ MainThreadLanguages = __decorate([extHostNamedCustomer(MainContext.MainThreadLanguages), ( __param(1, ILanguageService)), ( __param(2, IModelService)), ( __param(3, ITextModelService)), ( __param(4, ILanguageStatusService)), ( __param(5, ITextMateTokenizationService)), ( __param(6, IThemeService))], MainThreadLanguages);
72
131
 
73
132
  export { MainThreadLanguages };
@@ -246,7 +246,7 @@ let MainThreadMcp = class MainThreadMcp extends Disposable {
246
246
  const resource = authDetails.resourceMetadata?.resource;
247
247
  if (!resource) {
248
248
  throw ( new Error(( localize(
249
- 2699,
249
+ 2775,
250
250
  "The enterprise-managed MCP server '{0}' did not advertise a protected-resource metadata document with a 'resource' identifier.",
251
251
  server.label
252
252
  ))));
@@ -255,7 +255,7 @@ let MainThreadMcp = class MainThreadMcp extends Disposable {
255
255
  const audience = resourceAuthServers[0];
256
256
  if (!audience) {
257
257
  throw ( new Error(( localize(
258
- 2700,
258
+ 2776,
259
259
  "The enterprise-managed MCP server '{0}' did not advertise an `authorization_servers` entry in its protected-resource metadata.",
260
260
  server.label
261
261
  ))));
@@ -342,7 +342,7 @@ let MainThreadMcp = class MainThreadMcp extends Disposable {
342
342
  const configuredIssuer = config.issuer?.trim();
343
343
  if (!configuredIssuer) {
344
344
  throw ( new Error(( localize(
345
- 2701,
345
+ 2777,
346
346
  "Enterprise-managed MCP authentication requires `mcp.enterpriseManagedAuth.idp.issuer` to be configured. Set it via enterprise policy (Windows Group Policy / macOS managed preferences / Linux `/etc/vscode/policy.json`) or, for local testing, by hand-editing `settings.json`."
347
347
  ))));
348
348
  }
@@ -351,14 +351,14 @@ let MainThreadMcp = class MainThreadMcp extends Disposable {
351
351
  parsed = ( URI.parse(configuredIssuer));
352
352
  } catch {
353
353
  throw ( new Error(( localize(
354
- 2702,
354
+ 2778,
355
355
  "Enterprise-managed MCP authentication requires `mcp.enterpriseManagedAuth.idp.issuer` to be a valid URL; got '{0}'.",
356
356
  configuredIssuer
357
357
  ))));
358
358
  }
359
359
  if (parsed.scheme !== "https" && parsed.scheme !== "http") {
360
360
  throw ( new Error(( localize(
361
- 2703,
361
+ 2779,
362
362
  "Enterprise-managed MCP authentication requires `mcp.enterpriseManagedAuth.idp.issuer` to use the `https` or `http` scheme; got '{0}'.",
363
363
  configuredIssuer
364
364
  ))));
@@ -460,9 +460,9 @@ let MainThreadMcp = class MainThreadMcp extends Disposable {
460
460
  }
461
461
  async continueWithIncorrectAccountPrompt(chosenAccountLabel, requestedAccountLabel) {
462
462
  const result = await this.dialogService.prompt({
463
- message: ( localize(2704, "Incorrect account detected")),
463
+ message: ( localize(2780, "Incorrect account detected")),
464
464
  detail: ( localize(
465
- 2705,
465
+ 2781,
466
466
  "The chosen account, {0}, does not match the requested account, {1}.",
467
467
  chosenAccountLabel,
468
468
  requestedAccountLabel
@@ -470,10 +470,10 @@ let MainThreadMcp = class MainThreadMcp extends Disposable {
470
470
  type: Severity.Warning,
471
471
  cancelButton: true,
472
472
  buttons: [{
473
- label: ( localize(2706, "Keep {0}", chosenAccountLabel)),
473
+ label: ( localize(2782, "Keep {0}", chosenAccountLabel)),
474
474
  run: () => chosenAccountLabel
475
475
  }, {
476
- label: ( localize(2707, "Login with {0}", requestedAccountLabel)),
476
+ label: ( localize(2783, "Login with {0}", requestedAccountLabel)),
477
477
  run: () => requestedAccountLabel
478
478
  }]
479
479
  });
@@ -505,7 +505,7 @@ let MainThreadMcp = class MainThreadMcp extends Disposable {
505
505
  } catch (e) {
506
506
  if (UserInteractionRequiredError.is(e)) {
507
507
  server.pushLog(LogLevel.Warning, ( localize(
508
- 2708,
508
+ 2784,
509
509
  "Authentication session for {0} removed, stopping server",
510
510
  providerLabel
511
511
  )));
@@ -552,18 +552,18 @@ let MainThreadMcp = class MainThreadMcp extends Disposable {
552
552
  }
553
553
  async loginPrompt(mcpLabel, providerLabel, recreatingSession) {
554
554
  const message = recreatingSession ? ( localize(
555
- 2709,
555
+ 2785,
556
556
  "The MCP Server Definition '{0}' wants you to authenticate to {1}.",
557
557
  mcpLabel,
558
558
  providerLabel
559
559
  )) : ( localize(
560
- 2710,
560
+ 2786,
561
561
  "The MCP Server Definition '{0}' wants to authenticate to {1}.",
562
562
  mcpLabel,
563
563
  providerLabel
564
564
  ));
565
565
  const buttons = [{
566
- label: ( localize(2711, "&&Allow")),
566
+ label: ( localize(2787, "&&Allow")),
567
567
  run() {
568
568
  return true;
569
569
  }
@@ -66,13 +66,13 @@ let MainThreadMessageService = class MainThreadMessageService {
66
66
  sourceIsUrgent = MainThreadMessageService_1.URGENT_NOTIFICATION_SOURCES.includes(source.id);
67
67
  }
68
68
  if (!source) {
69
- source = ( localize(2712, "Extension"));
69
+ source = ( localize(2788, "Extension"));
70
70
  }
71
71
  const secondaryActions = [];
72
72
  if (options.source) {
73
73
  secondaryActions.push(toAction({
74
74
  id: options.source.identifier.value,
75
- label: ( localize(2713, "Manage Extension")),
75
+ label: ( localize(2789, "Manage Extension")),
76
76
  run: () => {
77
77
  return this._commandService.executeCommand("_extensions.manage", options.source.identifier.value);
78
78
  }
@@ -111,12 +111,12 @@ let MainThreadMessageService = class MainThreadMessageService {
111
111
  if (!cancelButton) {
112
112
  if (buttons.length > 0) {
113
113
  cancelButton = {
114
- label: ( localize(2714, "Cancel")),
114
+ label: ( localize(2790, "Cancel")),
115
115
  run: () => undefined
116
116
  };
117
117
  } else {
118
118
  cancelButton = {
119
- label: ( localize(2715, "&&OK")),
119
+ label: ( localize(2791, "&&OK")),
120
120
  run: () => undefined
121
121
  };
122
122
  }
@@ -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(2716, "Aborted onWillSaveNotebookDocument-event after 1750ms"))))), 1750);
21
+ _warningTimeout = setTimeout(() => reject(( new Error(( localize(2792, "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;
@@ -94,11 +94,11 @@ let MainThreadOutputService = class MainThreadOutputService extends Disposable {
94
94
  }
95
95
  _showChannelQuietly(channel) {
96
96
  const statusProperties = {
97
- name: ( localize(2717, "Show Output")),
97
+ name: ( localize(2793, "Show Output")),
98
98
  text: "$(output)",
99
- ariaLabel: ( localize(2718, "Show {0} Output Channel", channel.label)),
99
+ ariaLabel: ( localize(2794, "Show {0} Output Channel", channel.label)),
100
100
  command: `workbench.action.output.show.${channel.id}`,
101
- tooltip: ( localize(2719, "Show {0} Output Channel", channel.label)),
101
+ tooltip: ( localize(2795, "Show {0} Output Channel", channel.label)),
102
102
  kind: "prominent"
103
103
  };
104
104
  if (!this._outputStatusItem.value) {
@@ -38,7 +38,7 @@ let MainThreadProgress = class MainThreadProgress {
38
38
  location: ProgressLocation.Notification,
39
39
  secondaryActions: [toAction({
40
40
  id: extensionId,
41
- label: ( localize(2720, "Manage Extension")),
41
+ label: ( localize(2796, "Manage Extension")),
42
42
  run: () => this._commandService.executeCommand("_extensions.manage", extensionId)
43
43
  })]
44
44
  };
@@ -1,13 +1,19 @@
1
1
  import { UriComponents } from "@codingame/monaco-vscode-api/vscode/vs/base/common/uri";
2
2
  import { IDocumentFilterDto, MainThreadQuickDiffShape } from "@codingame/monaco-vscode-api/vscode/vs/workbench/api/common/extHost.protocol";
3
3
  import { IQuickDiffService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/scm/common/quickDiff.service";
4
+ import { IQuickDiffModelService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/scm/browser/quickDiffModel.service";
4
5
  import { IExtHostContext } from "../../services/extensions/common/extHostCustomers.js";
5
6
  export declare class MainThreadQuickDiff implements MainThreadQuickDiffShape {
6
7
  private readonly quickDiffService;
8
+ private readonly quickDiffModelService;
7
9
  private readonly proxy;
8
10
  private providerDisposables;
9
- constructor(extHostContext: IExtHostContext, quickDiffService: IQuickDiffService);
11
+ private informationDisposables;
12
+ constructor(extHostContext: IExtHostContext, quickDiffService: IQuickDiffService, quickDiffModelService: IQuickDiffModelService);
10
13
  $registerQuickDiffProvider(handle: number, selector: IDocumentFilterDto[], id: string, label: string, rootUri: UriComponents | undefined): Promise<void>;
11
14
  $unregisterQuickDiffProvider(handle: number): Promise<void>;
15
+ $createSourceControlDiffInformation(handle: number, uri: UriComponents): Promise<void>;
16
+ $disposeSourceControlDiffInformation(handle: number): Promise<void>;
17
+ private sendSourceControlDiffInformation;
12
18
  dispose(): void;
13
19
  }
@@ -1,16 +1,19 @@
1
1
 
2
2
  import { __decorate, __param } from '@codingame/monaco-vscode-api/external/tslib/tslib.es6';
3
3
  import { CancellationToken } from '@codingame/monaco-vscode-api/vscode/vs/base/common/cancellation';
4
- import { DisposableMap } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
4
+ import { DisposableMap, DisposableStore } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
5
5
  import { URI } from '@codingame/monaco-vscode-api/vscode/vs/base/common/uri';
6
6
  import { ExtHostContext, MainContext } from '@codingame/monaco-vscode-api/vscode/vs/workbench/api/common/extHost.protocol';
7
7
  import { IQuickDiffService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/scm/common/quickDiff.service';
8
+ import { IQuickDiffModelService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/scm/browser/quickDiffModel.service';
8
9
  import { extHostNamedCustomer } from '../../services/extensions/common/extHostCustomers.js';
9
10
 
10
11
  let MainThreadQuickDiff = class MainThreadQuickDiff {
11
- constructor(extHostContext, quickDiffService) {
12
+ constructor(extHostContext, quickDiffService, quickDiffModelService) {
12
13
  this.quickDiffService = quickDiffService;
14
+ this.quickDiffModelService = quickDiffModelService;
13
15
  this.providerDisposables = ( new DisposableMap());
16
+ this.informationDisposables = ( new DisposableMap());
14
17
  this.proxy = ( extHostContext.getProxy(ExtHostContext.ExtHostQuickDiff));
15
18
  }
16
19
  async $registerQuickDiffProvider(handle, selector, id, label, rootUri) {
@@ -34,10 +37,50 @@ let MainThreadQuickDiff = class MainThreadQuickDiff {
34
37
  this.providerDisposables.deleteAndDispose(handle);
35
38
  }
36
39
  }
40
+ async $createSourceControlDiffInformation(handle, uri) {
41
+ const reference = this.quickDiffModelService.createQuickDiffModelReference(URI.revive(uri));
42
+ if (!reference) {
43
+ return;
44
+ }
45
+ const store = ( new DisposableStore());
46
+ store.add(reference);
47
+ store.add(
48
+ reference.object.onDidChange(() => this.sendSourceControlDiffInformation(handle, reference))
49
+ );
50
+ this.informationDisposables.set(handle, store);
51
+ this.sendSourceControlDiffInformation(handle, reference);
52
+ }
53
+ async $disposeSourceControlDiffInformation(handle) {
54
+ if (( this.informationDisposables.has(handle))) {
55
+ this.informationDisposables.deleteAndDispose(handle);
56
+ }
57
+ }
58
+ sendSourceControlDiffInformation(handle, reference) {
59
+ const model = reference.object;
60
+ const primaryResult = model.getQuickDiffResults().find(result => result.providerKind === "primary");
61
+ if (!primaryResult) {
62
+ this.proxy.$acceptSourceControlDiffInformation(handle, undefined);
63
+ return;
64
+ }
65
+ const changes = ( primaryResult.changes2.map(change => [
66
+ change.original.startLineNumber,
67
+ change.original.endLineNumberExclusive,
68
+ change.modified.startLineNumber,
69
+ change.modified.endLineNumberExclusive
70
+ ]));
71
+ const diffInformation = {
72
+ documentVersion: model.changesVersionId,
73
+ original: primaryResult.original,
74
+ modified: primaryResult.modified,
75
+ changes
76
+ };
77
+ this.proxy.$acceptSourceControlDiffInformation(handle, diffInformation);
78
+ }
37
79
  dispose() {
38
80
  this.providerDisposables.dispose();
81
+ this.informationDisposables.dispose();
39
82
  }
40
83
  };
41
- MainThreadQuickDiff = __decorate([extHostNamedCustomer(MainContext.MainThreadQuickDiff), ( __param(1, IQuickDiffService))], MainThreadQuickDiff);
84
+ MainThreadQuickDiff = __decorate([extHostNamedCustomer(MainContext.MainThreadQuickDiff), ( __param(1, IQuickDiffService)), ( __param(2, IQuickDiffModelService))], MainThreadQuickDiff);
42
85
 
43
86
  export { MainThreadQuickDiff };
@@ -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(2721, "Aborted onWillSaveTextDocument-event after 1750ms"))))), 1750);
20
+ setTimeout(() => reject(( new Error(( localize(2797, "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")));
@@ -397,7 +397,7 @@ var TaskDTO;
397
397
  }
398
398
  command.presentation = TaskPresentationOptionsDTO.to(task.presentationOptions);
399
399
  const source = TaskSourceDTO.to(task.source, workspace);
400
- const label = ( localize(2722, "{0}: {1}", source.label, task.name));
400
+ const label = ( localize(2798, "{0}: {1}", source.label, task.name));
401
401
  const definition = TaskDefinitionDTO.to(task.definition, executeOnly);
402
402
  const id = (CustomExecutionDTO.is(task.execution) && task._id) ? task._id : `${task.source.extensionId}.${definition._key}`;
403
403
  const result = ( new ContributedTask(