@codingame/monaco-vscode-extensions-service-override 30.0.1 → 31.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/package.json +3 -3
  2. package/vscode/src/vs/platform/extensionManagement/common/extensionManagementCLI.d.ts +1 -0
  3. package/vscode/src/vs/platform/extensionManagement/common/extensionManagementCLI.js +63 -42
  4. package/vscode/src/vs/workbench/api/browser/mainThreadAuthentication.js +28 -28
  5. package/vscode/src/vs/workbench/api/browser/mainThreadBrowsers.js +2 -2
  6. package/vscode/src/vs/workbench/api/browser/mainThreadCLICommands.js +1 -1
  7. package/vscode/src/vs/workbench/api/browser/mainThreadChatAgents2.d.ts +22 -7
  8. package/vscode/src/vs/workbench/api/browser/mainThreadChatAgents2.js +171 -83
  9. package/vscode/src/vs/workbench/api/browser/mainThreadChatDebug.js +7 -0
  10. package/vscode/src/vs/workbench/api/browser/mainThreadChatSessions.d.ts +4 -1
  11. package/vscode/src/vs/workbench/api/browser/mainThreadChatSessions.js +46 -15
  12. package/vscode/src/vs/workbench/api/browser/mainThreadComments.js +1 -1
  13. package/vscode/src/vs/workbench/api/browser/mainThreadCustomEditors.js +2 -2
  14. package/vscode/src/vs/workbench/api/browser/mainThreadEditSessionIdentityParticipant.js +1 -1
  15. package/vscode/src/vs/workbench/api/browser/mainThreadExtensionService.js +11 -11
  16. package/vscode/src/vs/workbench/api/browser/mainThreadFileSystemEventService.js +20 -20
  17. package/vscode/src/vs/workbench/api/browser/mainThreadGitExtensionService.d.ts +0 -1
  18. package/vscode/src/vs/workbench/api/browser/mainThreadGitExtensionService.js +4 -13
  19. package/vscode/src/vs/workbench/api/browser/mainThreadLanguageModels.js +2 -2
  20. package/vscode/src/vs/workbench/api/browser/mainThreadMcp.d.ts +3 -3
  21. package/vscode/src/vs/workbench/api/browser/mainThreadMcp.js +34 -17
  22. package/vscode/src/vs/workbench/api/browser/mainThreadMessageService.js +4 -4
  23. package/vscode/src/vs/workbench/api/browser/mainThreadNotebookSaveParticipant.js +1 -1
  24. package/vscode/src/vs/workbench/api/browser/mainThreadOutputService.js +3 -3
  25. package/vscode/src/vs/workbench/api/browser/mainThreadProgress.js +1 -1
  26. package/vscode/src/vs/workbench/api/browser/mainThreadSaveParticipant.js +1 -1
  27. package/vscode/src/vs/workbench/api/browser/mainThreadTask.js +1 -1
  28. package/vscode/src/vs/workbench/api/browser/mainThreadTunnelService.js +2 -2
  29. package/vscode/src/vs/workbench/api/browser/mainThreadUriOpeners.js +2 -2
  30. package/vscode/src/vs/workbench/api/browser/mainThreadWebviews.js +1 -1
  31. package/vscode/src/vs/workbench/api/browser/mainThreadWorkspace.js +5 -5
  32. package/vscode/src/vs/workbench/contrib/customEditor/common/customTextEditorModel.js +1 -1
  33. package/vscode/src/vs/workbench/contrib/git/common/gitService.d.ts +7 -1
  34. package/vscode/src/vs/workbench/services/extensionManagement/browser/extensionBisect.js +23 -23
  35. package/vscode/src/vs/workbench/services/extensionManagement/browser/webExtensionsScannerService.js +2 -2
  36. package/vscode/src/vs/workbench/services/extensions/common/abstractExtensionService.js +12 -12
  37. package/vscode/src/vs/workbench/services/extensions/common/extensionHostManager.js +1 -1
  38. package/vscode/src/vs/workbench/services/extensions/common/extensionsProposedApi.js +1 -1
  39. package/vscode/src/vs/workbench/services/extensions/common/extensionsUtil.js +4 -4
  40. package/vscode/src/vs/workbench/services/themes/browser/cssExtensionPoint.js +5 -5
  41. package/vscode/src/vs/platform/browserView/common/browserViewTelemetry.d.ts +0 -34
  42. package/vscode/src/vs/platform/browserView/common/browserViewTelemetry.js +0 -7
  43. package/vscode/src/vs/platform/browserView/common/browserViewUri.d.ts +0 -21
  44. package/vscode/src/vs/platform/browserView/common/browserViewUri.js +0 -34
  45. package/vscode/src/vs/workbench/contrib/browserView/common/browserEditorInput.d.ts +0 -61
  46. package/vscode/src/vs/workbench/contrib/browserView/common/browserEditorInput.js +0 -233
@@ -94,25 +94,25 @@ let MainThreadFileSystemEventService = class MainThreadFileSystemEventService {
94
94
  if (data.extensionNames.length === 1) {
95
95
  if (operation === FileOperation.CREATE) {
96
96
  message = ( localize(
97
- 2571,
97
+ 2566,
98
98
  "Extension '{0}' wants to make refactoring changes with this file creation",
99
99
  data.extensionNames[0]
100
100
  ));
101
101
  } else if (operation === FileOperation.COPY) {
102
102
  message = ( localize(
103
- 2572,
103
+ 2567,
104
104
  "Extension '{0}' wants to make refactoring changes with this file copy",
105
105
  data.extensionNames[0]
106
106
  ));
107
107
  } else if (operation === FileOperation.MOVE) {
108
108
  message = ( localize(
109
- 2573,
109
+ 2568,
110
110
  "Extension '{0}' wants to make refactoring changes with this file move",
111
111
  data.extensionNames[0]
112
112
  ));
113
113
  } else {
114
114
  message = ( localize(
115
- 2574,
115
+ 2569,
116
116
  "Extension '{0}' wants to make refactoring changes with this file deletion",
117
117
  data.extensionNames[0]
118
118
  ));
@@ -120,25 +120,25 @@ let MainThreadFileSystemEventService = class MainThreadFileSystemEventService {
120
120
  } else {
121
121
  if (operation === FileOperation.CREATE) {
122
122
  message = ( localize(
123
- 2575,
123
+ 2570,
124
124
  "{0} extensions want to make refactoring changes with this file creation",
125
125
  data.extensionNames.length
126
126
  ));
127
127
  } else if (operation === FileOperation.COPY) {
128
128
  message = ( localize(
129
- 2576,
129
+ 2571,
130
130
  "{0} extensions want to make refactoring changes with this file copy",
131
131
  data.extensionNames.length
132
132
  ));
133
133
  } else if (operation === FileOperation.MOVE) {
134
134
  message = ( localize(
135
- 2577,
135
+ 2572,
136
136
  "{0} extensions want to make refactoring changes with this file move",
137
137
  data.extensionNames.length
138
138
  ));
139
139
  } else {
140
140
  message = ( localize(
141
- 2578,
141
+ 2573,
142
142
  "{0} extensions want to make refactoring changes with this file deletion",
143
143
  data.extensionNames.length
144
144
  ));
@@ -150,8 +150,8 @@ let MainThreadFileSystemEventService = class MainThreadFileSystemEventService {
150
150
  } = await dialogService.confirm({
151
151
  type: Severity.Info,
152
152
  message,
153
- primaryButton: ( localize(2579, "Show &&Preview")),
154
- cancelButton: ( localize(2580, "Skip Changes"))
153
+ primaryButton: ( localize(2574, "Show &&Preview")),
154
+ cancelButton: ( localize(2575, "Skip Changes"))
155
155
  });
156
156
  showPreview = true;
157
157
  if (!confirmed) {
@@ -171,18 +171,18 @@ let MainThreadFileSystemEventService = class MainThreadFileSystemEventService {
171
171
  type: Severity.Info,
172
172
  message,
173
173
  buttons: [{
174
- label: ( localize(2581, "&&OK")),
174
+ label: ( localize(2576, "&&OK")),
175
175
  run: () => Choice.OK
176
176
  }, {
177
- label: ( localize(2579, "Show &&Preview")),
177
+ label: ( localize(2574, "Show &&Preview")),
178
178
  run: () => Choice.Preview
179
179
  }],
180
180
  cancelButton: {
181
- label: ( localize(2580, "Skip Changes")),
181
+ label: ( localize(2575, "Skip Changes")),
182
182
  run: () => Choice.Cancel
183
183
  },
184
184
  checkbox: {
185
- label: ( localize(2582, "Do not ask me again"))
185
+ label: ( localize(2577, "Do not ask me again"))
186
186
  }
187
187
  });
188
188
  if (result === Choice.Cancel) {
@@ -211,15 +211,15 @@ let MainThreadFileSystemEventService = class MainThreadFileSystemEventService {
211
211
  _progressLabel(operation) {
212
212
  switch (operation) {
213
213
  case FileOperation.CREATE:
214
- return localize(2583, "Running 'File Create' participants...");
214
+ return localize(2578, "Running 'File Create' participants...");
215
215
  case FileOperation.MOVE:
216
- return localize(2584, "Running 'File Rename' participants...");
216
+ return localize(2579, "Running 'File Rename' participants...");
217
217
  case FileOperation.COPY:
218
- return localize(2585, "Running 'File Copy' participants...");
218
+ return localize(2580, "Running 'File Copy' participants...");
219
219
  case FileOperation.DELETE:
220
- return localize(2586, "Running 'File Delete' participants...");
220
+ return localize(2581, "Running 'File Delete' participants...");
221
221
  case FileOperation.WRITE:
222
- return localize(2587, "Running 'File Write' participants...");
222
+ return localize(2582, "Running 'File Write' participants...");
223
223
  }
224
224
  }
225
225
  })();
@@ -307,7 +307,7 @@ registerAction2(class ResetMemento extends Action2 {
307
307
  super({
308
308
  id: "files.participants.resetChoice",
309
309
  title: {
310
- value: ( localize(2588, "Reset choice for 'File operation needs preview'")),
310
+ value: ( localize(2583, "Reset choice for 'File operation needs preview'")),
311
311
  original: `Reset choice for 'File operation needs preview'`
312
312
  },
313
313
  f1: true
@@ -14,7 +14,6 @@ export declare class MainThreadGitExtensionService extends Disposable implements
14
14
  get repositories(): Iterable<IGitRepository>;
15
15
  constructor(extHostContext: IExtHostContext, gitService: IGitService);
16
16
  private _initializeDelegate;
17
- private _getRepositoryByUri;
18
17
  openRepository(uri: URI): Promise<IGitRepository | undefined>;
19
18
  getRefs(root: URI, query: GitRefQuery, token?: CancellationToken): Promise<GitRef[]>;
20
19
  diffBetweenWithStats(root: URI, ref1: string, ref2: string, path?: string): Promise<GitDiffChange[]>;
@@ -3,12 +3,14 @@ import { __decorate, __param } from '@codingame/monaco-vscode-api/external/tslib
3
3
  import { Sequencer } from '@codingame/monaco-vscode-api/vscode/vs/base/common/async';
4
4
  import { Disposable } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
5
5
  import { ResourceMap } from '@codingame/monaco-vscode-api/vscode/vs/base/common/map';
6
+ import '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/index';
6
7
  import { URI } from '@codingame/monaco-vscode-api/vscode/vs/base/common/uri';
7
8
  import { GitRepository } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/git/browser/gitService';
8
9
  import { GitRefType } from '../../contrib/git/common/gitService.js';
9
10
  import { IGitService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/git/common/gitService.service';
10
11
  import { extHostNamedCustomer } from '../../services/extensions/common/extHostCustomers.js';
11
12
  import { GitRefTypeDto, ExtHostContext, MainContext } from '@codingame/monaco-vscode-api/vscode/vs/workbench/api/common/extHost.protocol';
13
+ import { waitForState } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/utils/utilsCancellation';
12
14
 
13
15
  function toGitRefType(type) {
14
16
  switch (type) {
@@ -38,11 +40,11 @@ function toGitRepositoryState(dto) {
38
40
  name: dto.HEAD.name,
39
41
  commit: dto.HEAD.commit,
40
42
  remote: dto.HEAD.remote,
41
- base: dto.HEAD.base,
42
43
  upstream: dto.HEAD.upstream,
43
44
  ahead: dto.HEAD.ahead,
44
45
  behind: dto.HEAD.behind
45
46
  } : undefined,
47
+ remotes: dto?.remotes ?? [],
46
48
  mergeChanges: dto?.mergeChanges?.map(c => ({
47
49
  uri: URI.revive(c.uri),
48
50
  originalUri: c.originalUri ? URI.revive(c.originalUri) : undefined,
@@ -84,29 +86,18 @@ let MainThreadGitExtensionService = class MainThreadGitExtensionService extends
84
86
  this._register(this.gitService.setDelegate(this));
85
87
  }
86
88
  }
87
- _getRepositoryByUri(uri) {
88
- const handle = this._repositoryHandles.get(uri);
89
- return handle !== undefined ? this._repositories.get(handle) : undefined;
90
- }
91
89
  async openRepository(uri) {
92
90
  return this._openRepositorySequencer.queue(async () => {
93
- const existingRepository = this._getRepositoryByUri(uri);
94
- if (existingRepository) {
95
- return existingRepository;
96
- }
97
91
  const result = await this._proxy.$openRepository(uri);
98
92
  if (!result) {
99
93
  return undefined;
100
94
  }
101
95
  const repositoryRootUri = URI.revive(result.rootUri);
102
- const existingRepositoryForRoot = this._getRepositoryByUri(repositoryRootUri);
103
- if (existingRepositoryForRoot) {
104
- return existingRepositoryForRoot;
105
- }
106
96
  const state = toGitRepositoryState(result.state);
107
97
  const repository = ( new GitRepository(repositoryRootUri, state, this));
108
98
  this._repositories.set(result.handle, repository);
109
99
  this._repositoryHandles.set(repositoryRootUri, result.handle);
100
+ await waitForState(repository.state, state => state.HEAD !== undefined);
110
101
  return repository;
111
102
  });
112
103
  }
@@ -178,7 +178,7 @@ let MainThreadLanguageModels = class MainThreadLanguageModels {
178
178
  if (this._authenticationService.getProviderIds().includes(authProviderId)) {
179
179
  return Disposable.None;
180
180
  }
181
- const accountLabel = auth.accountLabel ?? ( localize(2589, "Language Models"));
181
+ const accountLabel = auth.accountLabel ?? ( localize(2584, "Language Models"));
182
182
  const disposables = ( new DisposableStore());
183
183
  const provider = ( new LanguageModelAccessAuthProvider(authProviderId, auth.providerLabel, accountLabel));
184
184
  this._authenticationService.registerAuthenticationProvider(authProviderId, provider);
@@ -261,7 +261,7 @@ class LanguageModelAccessAuthProvider {
261
261
  }
262
262
  confirmation(extensionName, _recreatingSession) {
263
263
  return localize(
264
- 2590,
264
+ 2585,
265
265
  "The extension '{0}' wants to access the language models provided by {1}.",
266
266
  extensionName,
267
267
  this.label
@@ -1,5 +1,5 @@
1
1
  import { Disposable } from "@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle";
2
- import { URI } from "@codingame/monaco-vscode-api/vscode/vs/base/common/uri";
2
+ import { URI, UriComponents } from "@codingame/monaco-vscode-api/vscode/vs/base/common/uri";
3
3
  import { IContextKeyService } from "@codingame/monaco-vscode-api/vscode/vs/platform/contextkey/common/contextkey.service";
4
4
  import { IDialogService } from "@codingame/monaco-vscode-api/vscode/vs/platform/dialogs/common/dialogs.service";
5
5
  import { LogLevel } from "@codingame/monaco-vscode-api/vscode/vs/platform/log/common/log";
@@ -43,12 +43,12 @@ export declare class MainThreadMcp extends Disposable implements MainThreadMcpSh
43
43
  $onDidPublishLog(id: number, level: LogLevel, log: string): void;
44
44
  $onDidReceiveMessage(id: number, message: string): void;
45
45
  $getTokenForProviderId(id: number, providerId: string, scopes: string[], options?: IMcpAuthenticationOptions): Promise<string | undefined>;
46
- $getTokenFromServerMetadata(id: number, authDetails: IMcpAuthenticationDetails, { errorOnUserInteraction, forceNewRegistration }?: IMcpAuthenticationOptions): Promise<string | undefined>;
46
+ $getTokenFromServerMetadata(id: number, authDetails: IMcpAuthenticationDetails, { errorOnUserInteraction, forceNewRegistration, clientId }?: IMcpAuthenticationOptions): Promise<string | undefined>;
47
47
  private _getSessionForProvider;
48
48
  private continueWithIncorrectAccountPrompt;
49
49
  private _onDidChangeAuthSessions;
50
50
  $logMcpAuthSetup(data: IAuthMetadataSource): void;
51
- $startMcpGateway(): Promise<{
51
+ $startMcpGateway(chatSessionResource?: UriComponents): Promise<{
52
52
  servers: {
53
53
  label: string;
54
54
  address: URI;
@@ -208,14 +208,23 @@ let MainThreadMcp = class MainThreadMcp extends Disposable {
208
208
  if (!server) {
209
209
  return undefined;
210
210
  }
211
- return this._getSessionForProvider(id, server, providerId, scopes, undefined, options.errorOnUserInteraction);
211
+ return this._getSessionForProvider(
212
+ id,
213
+ server,
214
+ providerId,
215
+ scopes,
216
+ undefined,
217
+ options.errorOnUserInteraction,
218
+ options.clientId
219
+ );
212
220
  }
213
221
  async $getTokenFromServerMetadata(
214
222
  id,
215
223
  authDetails,
216
224
  {
217
225
  errorOnUserInteraction,
218
- forceNewRegistration
226
+ forceNewRegistration,
227
+ clientId
219
228
  } = {}
220
229
  ) {
221
230
  const server = this._serverDefinitions.get(id);
@@ -238,7 +247,8 @@ let MainThreadMcp = class MainThreadMcp extends Disposable {
238
247
  const provider = await this._authenticationService.createDynamicAuthenticationProvider(
239
248
  authorizationServer,
240
249
  authDetails.authorizationServerMetadata,
241
- authDetails.resourceMetadata
250
+ authDetails.resourceMetadata,
251
+ authDetails.clientId
242
252
  );
243
253
  if (!provider) {
244
254
  return undefined;
@@ -251,7 +261,8 @@ let MainThreadMcp = class MainThreadMcp extends Disposable {
251
261
  providerId,
252
262
  resolvedScopes,
253
263
  authorizationServer,
254
- errorOnUserInteraction
264
+ errorOnUserInteraction,
265
+ clientId ?? authDetails.clientId
255
266
  );
256
267
  }
257
268
  async _getSessionForProvider(
@@ -260,10 +271,12 @@ let MainThreadMcp = class MainThreadMcp extends Disposable {
260
271
  providerId,
261
272
  scopes,
262
273
  authorizationServer,
263
- errorOnUserInteraction = false
274
+ errorOnUserInteraction = false,
275
+ clientId
264
276
  ) {
265
277
  const sessions = await this._authenticationService.getSessions(providerId, scopes, {
266
- authorizationServer
278
+ authorizationServer,
279
+ clientId
267
280
  }, true);
268
281
  const accountNamePreference = this.authenticationMcpServersService.getAccountPreference(server.id, providerId);
269
282
  let matchingAccountPreferenceSession;
@@ -311,7 +324,8 @@ let MainThreadMcp = class MainThreadMcp extends Disposable {
311
324
  session = await this._authenticationService.createSession(providerId, scopes, {
312
325
  activateImmediate: true,
313
326
  account: accountToCreate,
314
- authorizationServer
327
+ authorizationServer,
328
+ clientId
315
329
  });
316
330
  } while (accountToCreate && accountToCreate.label !== session.account.label && !(await this.continueWithIncorrectAccountPrompt(session.account.label, accountToCreate.label)));
317
331
  }
@@ -327,9 +341,9 @@ let MainThreadMcp = class MainThreadMcp extends Disposable {
327
341
  }
328
342
  async continueWithIncorrectAccountPrompt(chosenAccountLabel, requestedAccountLabel) {
329
343
  const result = await this.dialogService.prompt({
330
- message: ( localize(2591, "Incorrect account detected")),
344
+ message: ( localize(2586, "Incorrect account detected")),
331
345
  detail: ( localize(
332
- 2592,
346
+ 2587,
333
347
  "The chosen account, {0}, does not match the requested account, {1}.",
334
348
  chosenAccountLabel,
335
349
  requestedAccountLabel
@@ -337,10 +351,10 @@ let MainThreadMcp = class MainThreadMcp extends Disposable {
337
351
  type: Severity.Warning,
338
352
  cancelButton: true,
339
353
  buttons: [{
340
- label: ( localize(2593, "Keep {0}", chosenAccountLabel)),
354
+ label: ( localize(2588, "Keep {0}", chosenAccountLabel)),
341
355
  run: () => chosenAccountLabel
342
356
  }, {
343
- label: ( localize(2594, "Login with {0}", requestedAccountLabel)),
357
+ label: ( localize(2589, "Login with {0}", requestedAccountLabel)),
344
358
  run: () => requestedAccountLabel
345
359
  }]
346
360
  });
@@ -372,7 +386,7 @@ let MainThreadMcp = class MainThreadMcp extends Disposable {
372
386
  } catch (e) {
373
387
  if (UserInteractionRequiredError.is(e)) {
374
388
  server.pushLog(LogLevel.Warning, ( localize(
375
- 2595,
389
+ 2590,
376
390
  "Authentication session for {0} removed, stopping server",
377
391
  providerLabel
378
392
  )));
@@ -384,8 +398,11 @@ let MainThreadMcp = class MainThreadMcp extends Disposable {
384
398
  $logMcpAuthSetup(data) {
385
399
  this._telemetryService.publicLog2("mcp/authSetup", data);
386
400
  }
387
- async $startMcpGateway() {
388
- const result = await this._mcpGatewayService.createGateway(this._extHostContext.extensionHostKind === ExtensionHostKind.Remote);
401
+ async $startMcpGateway(chatSessionResource) {
402
+ const result = await this._mcpGatewayService.createGateway(
403
+ this._extHostContext.extensionHostKind === ExtensionHostKind.Remote,
404
+ chatSessionResource ? URI.revive(chatSessionResource) : undefined
405
+ );
389
406
  if (!result) {
390
407
  return undefined;
391
408
  }
@@ -416,18 +433,18 @@ let MainThreadMcp = class MainThreadMcp extends Disposable {
416
433
  }
417
434
  async loginPrompt(mcpLabel, providerLabel, recreatingSession) {
418
435
  const message = recreatingSession ? ( localize(
419
- 2596,
436
+ 2591,
420
437
  "The MCP Server Definition '{0}' wants you to authenticate to {1}.",
421
438
  mcpLabel,
422
439
  providerLabel
423
440
  )) : ( localize(
424
- 2597,
441
+ 2592,
425
442
  "The MCP Server Definition '{0}' wants to authenticate to {1}.",
426
443
  mcpLabel,
427
444
  providerLabel
428
445
  ));
429
446
  const buttons = [{
430
- label: ( localize(2598, "&&Allow")),
447
+ label: ( localize(2593, "&&Allow")),
431
448
  run() {
432
449
  return true;
433
450
  }
@@ -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(2599, "Extension"));
69
+ source = ( localize(2594, "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(2600, "Manage Extension")),
75
+ label: ( localize(2595, "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(2601, "Cancel")),
114
+ label: ( localize(2596, "Cancel")),
115
115
  run: () => undefined
116
116
  };
117
117
  } else {
118
118
  cancelButton = {
119
- label: ( localize(2602, "&&OK")),
119
+ label: ( localize(2597, "&&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(2603, "Aborted onWillSaveNotebookDocument-event after 1750ms"))))), 1750);
21
+ _warningTimeout = setTimeout(() => reject(( new Error(( localize(2598, "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(2604, "Show Output")),
97
+ name: ( localize(2599, "Show Output")),
98
98
  text: "$(output)",
99
- ariaLabel: ( localize(2605, "Show {0} Output Channel", channel.label)),
99
+ ariaLabel: ( localize(2600, "Show {0} Output Channel", channel.label)),
100
100
  command: `workbench.action.output.show.${channel.id}`,
101
- tooltip: ( localize(2606, "Show {0} Output Channel", channel.label)),
101
+ tooltip: ( localize(2601, "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(2607, "Manage Extension")),
41
+ label: ( localize(2602, "Manage Extension")),
42
42
  run: () => this._commandService.executeCommand("_extensions.manage", extensionId)
43
43
  })]
44
44
  };
@@ -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(2608, "Aborted onWillSaveTextDocument-event after 1750ms"))))), 1750);
20
+ setTimeout(() => reject(( new Error(( localize(2603, "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(2609, "{0}: {1}", source.label, task.name));
400
+ const label = ( localize(2604, "{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(
@@ -116,13 +116,13 @@ let MainThreadTunnelService = class MainThreadTunnelService extends Disposable {
116
116
  }
117
117
  async elevationPrompt(tunnelOptions, tunnel, source) {
118
118
  return this.notificationService.prompt(Severity.Info, ( localize(
119
- 2610,
119
+ 2605,
120
120
  "The extension {0} has forwarded port {1}. You'll need to run as superuser to use port {2} locally.",
121
121
  source,
122
122
  tunnelOptions.remoteAddress.port,
123
123
  tunnelOptions.localAddressPort
124
124
  )), [{
125
- label: ( localize(2611, "Use Port {0} as Sudo...", tunnel.tunnelRemotePort)),
125
+ label: ( localize(2606, "Use Port {0} as Sudo...", tunnel.tunnelRemotePort)),
126
126
  run: async () => {
127
127
  this.elevateionRetry = true;
128
128
  await this.remoteExplorerService.close({
@@ -61,7 +61,7 @@ let MainThreadUriOpeners = class MainThreadUriOpeners extends Disposable {
61
61
  }, token);
62
62
  } catch (e) {
63
63
  if (!isCancellationError(e)) {
64
- const openDefaultAction = ( new Action("default", ( localize(2612, "Open using default opener")), undefined, undefined, async () => {
64
+ const openDefaultAction = ( new Action("default", ( localize(2607, "Open using default opener")), undefined, undefined, async () => {
65
65
  await this.openerService.open(uri, {
66
66
  allowTunneling: false,
67
67
  allowContributedOpeners: defaultExternalUriOpenerId
@@ -70,7 +70,7 @@ let MainThreadUriOpeners = class MainThreadUriOpeners extends Disposable {
70
70
  openDefaultAction.tooltip = ( uri.toString());
71
71
  this.notificationService.notify({
72
72
  severity: Severity.Error,
73
- message: ( localize(2613, "Could not open uri with '{0}': {1}", id, (e.toString()))),
73
+ message: ( localize(2608, "Could not open uri with '{0}': {1}", id, (e.toString()))),
74
74
  actions: {
75
75
  primary: [openDefaultAction]
76
76
  }
@@ -118,7 +118,7 @@ let MainThreadWebviews = class MainThreadWebviews extends Disposable {
118
118
  <meta http-equiv="Content-type" content="text/html;charset=UTF-8">
119
119
  <meta http-equiv="Content-Security-Policy" content="default-src 'none';">
120
120
  </head>
121
- <body>${( localize(2614, "An error occurred while loading view: {0}", escape(viewType)))}</body>
121
+ <body>${( localize(2609, "An error occurred while loading view: {0}", escape(viewType)))}</body>
122
122
  </html>`;
123
123
  }
124
124
  };
@@ -114,10 +114,10 @@ let MainThreadWorkspace = class MainThreadWorkspace extends Disposable {
114
114
  const wantsToDelete = removeCount > 0;
115
115
  if (wantsToAdd && !wantsToDelete) {
116
116
  if (addCount === 1) {
117
- message = ( localize(2615, "Extension '{0}' added 1 folder to the workspace", extensionName));
117
+ message = ( localize(2610, "Extension '{0}' added 1 folder to the workspace", extensionName));
118
118
  } else {
119
119
  message = ( localize(
120
- 2616,
120
+ 2611,
121
121
  "Extension '{0}' added {1} folders to the workspace",
122
122
  extensionName,
123
123
  addCount
@@ -126,10 +126,10 @@ let MainThreadWorkspace = class MainThreadWorkspace extends Disposable {
126
126
  }
127
127
  else if (wantsToDelete && !wantsToAdd) {
128
128
  if (removeCount === 1) {
129
- message = ( localize(2617, "Extension '{0}' removed 1 folder from the workspace", extensionName));
129
+ message = ( localize(2612, "Extension '{0}' removed 1 folder from the workspace", extensionName));
130
130
  } else {
131
131
  message = ( localize(
132
- 2618,
132
+ 2613,
133
133
  "Extension '{0}' removed {1} folders from the workspace",
134
134
  extensionName,
135
135
  removeCount
@@ -137,7 +137,7 @@ let MainThreadWorkspace = class MainThreadWorkspace extends Disposable {
137
137
  }
138
138
  }
139
139
  else {
140
- message = ( localize(2619, "Extension '{0}' changed folders of the workspace", extensionName));
140
+ message = ( localize(2614, "Extension '{0}' changed folders of the workspace", extensionName));
141
141
  }
142
142
  return message;
143
143
  }
@@ -60,7 +60,7 @@ let CustomTextEditorModel = CustomTextEditorModel_1 = class CustomTextEditorMode
60
60
  }));
61
61
  this._register(extensionService.onWillStop(e => {
62
62
  e.veto(true, ( localize(
63
- 8014,
63
+ 8143,
64
64
  "An extension provided text editor for '{0}' is still open that would close otherwise.",
65
65
  this.name
66
66
  )));
@@ -27,15 +27,21 @@ export interface GitDiffChange extends GitChange {
27
27
  readonly insertions: number;
28
28
  readonly deletions: number;
29
29
  }
30
+ export interface GitRemote {
31
+ readonly name: string;
32
+ readonly fetchUrl?: string;
33
+ readonly pushUrl?: string;
34
+ readonly isReadOnly: boolean;
35
+ }
30
36
  export interface GitRepositoryState {
31
37
  readonly HEAD?: GitBranch;
38
+ readonly remotes: readonly GitRemote[];
32
39
  readonly mergeChanges: readonly GitChange[];
33
40
  readonly indexChanges: readonly GitChange[];
34
41
  readonly workingTreeChanges: readonly GitChange[];
35
42
  readonly untrackedChanges: readonly GitChange[];
36
43
  }
37
44
  export interface GitBranch extends GitRef {
38
- readonly base?: GitBaseRef;
39
45
  readonly upstream?: GitUpstreamRef;
40
46
  readonly ahead?: number;
41
47
  readonly behind?: number;