@codingame/monaco-vscode-extensions-service-override 19.1.4 → 20.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.
- package/index.js +3 -0
- package/package.json +27 -27
- package/vscode/src/vs/platform/extensionManagement/common/extensionManagementCLI.js +28 -28
- package/vscode/src/vs/workbench/api/browser/mainThreadAuthentication.d.ts +10 -3
- package/vscode/src/vs/workbench/api/browser/mainThreadAuthentication.js +85 -22
- package/vscode/src/vs/workbench/api/browser/mainThreadBulkEdits.js +1 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadCLICommands.js +1 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadChatAgents2.js +9 -6
- package/vscode/src/vs/workbench/api/browser/mainThreadChatOutputRenderer.d.ts +18 -0
- package/vscode/src/vs/workbench/api/browser/mainThreadChatOutputRenderer.js +44 -0
- package/vscode/src/vs/workbench/api/browser/mainThreadChatSessions.d.ts +42 -0
- package/vscode/src/vs/workbench/api/browser/mainThreadChatSessions.js +247 -0
- package/vscode/src/vs/workbench/api/browser/mainThreadClipboard.d.ts +3 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadClipboard.js +9 -3
- package/vscode/src/vs/workbench/api/browser/mainThreadComments.d.ts +1 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadComments.js +1 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadCustomEditors.js +6 -6
- package/vscode/src/vs/workbench/api/browser/mainThreadDataChannels.d.ts +9 -0
- package/vscode/src/vs/workbench/api/browser/mainThreadDataChannels.js +23 -0
- package/vscode/src/vs/workbench/api/browser/mainThreadDocumentsAndEditors.js +1 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadEditSessionIdentityParticipant.js +1 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadEditorTabs.d.ts +1 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadEditorTabs.js +10 -10
- package/vscode/src/vs/workbench/api/browser/mainThreadEditors.d.ts +1 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadEditors.js +1 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadExtensionService.js +11 -11
- package/vscode/src/vs/workbench/api/browser/mainThreadFileSystemEventService.js +20 -20
- package/vscode/src/vs/workbench/api/browser/mainThreadLanguageFeatures.d.ts +3 -3
- package/vscode/src/vs/workbench/api/browser/mainThreadLanguageFeatures.js +12 -6
- package/vscode/src/vs/workbench/api/browser/mainThreadLanguageModelTools.js +1 -0
- package/vscode/src/vs/workbench/api/browser/mainThreadLanguageModels.d.ts +8 -9
- package/vscode/src/vs/workbench/api/browser/mainThreadLanguageModels.js +38 -37
- package/vscode/src/vs/workbench/api/browser/mainThreadMcp.js +11 -8
- package/vscode/src/vs/workbench/api/browser/mainThreadMessageService.js +4 -4
- package/vscode/src/vs/workbench/api/browser/mainThreadNotebook.js +1 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadNotebookDocumentsAndEditors.js +2 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadNotebookEditors.d.ts +2 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadNotebookEditors.js +2 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadNotebookSaveParticipant.js +1 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadOutputService.js +3 -3
- package/vscode/src/vs/workbench/api/browser/mainThreadProgress.js +1 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadSCM.d.ts +5 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadSCM.js +21 -8
- package/vscode/src/vs/workbench/api/browser/mainThreadSaveParticipant.js +1 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadSecretState.d.ts +2 -0
- package/vscode/src/vs/workbench/api/browser/mainThreadSecretState.js +25 -8
- package/vscode/src/vs/workbench/api/browser/mainThreadTask.js +1 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadTerminalService.d.ts +1 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadTerminalService.js +5 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadTerminalShellIntegration.d.ts +3 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadTerminalShellIntegration.js +9 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadTunnelService.js +2 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadUriOpeners.js +2 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadWebviewManager.js +3 -0
- package/vscode/src/vs/workbench/api/browser/mainThreadWebviewPanels.d.ts +1 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadWebviewPanels.js +4 -4
- package/vscode/src/vs/workbench/api/browser/mainThreadWebviews.d.ts +3 -3
- package/vscode/src/vs/workbench/api/browser/mainThreadWebviews.js +2 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadWorkspace.js +5 -5
- package/vscode/src/vs/workbench/contrib/customEditor/common/customTextEditorModel.js +1 -1
- package/vscode/src/vs/workbench/contrib/editTelemetry/browser/telemetry/forwardingTelemetryService.d.ts +30 -0
- package/vscode/src/vs/workbench/contrib/editTelemetry/browser/telemetry/forwardingTelemetryService.js +67 -0
- package/vscode/src/vs/workbench/services/extensionManagement/browser/extensionBisect.js +23 -23
- package/vscode/src/vs/workbench/services/extensions/browser/webWorkerExtensionHost.js +1 -1
- package/vscode/src/vs/workbench/services/extensions/common/abstractExtensionService.d.ts +3 -5
- package/vscode/src/vs/workbench/services/extensions/common/abstractExtensionService.js +32 -22
- package/vscode/src/vs/workbench/services/extensions/common/extensionHostManager.d.ts +2 -5
- package/vscode/src/vs/workbench/services/extensions/common/extensionHostManager.js +1 -1
- package/vscode/src/vs/workbench/services/extensions/common/extensionHostManagers.d.ts +2 -5
- package/vscode/src/vs/workbench/services/extensions/common/extensionsProposedApi.js +1 -1
- package/vscode/src/vs/workbench/services/extensions/common/extensionsUtil.js +4 -4
- package/vscode/src/vs/workbench/services/extensions/common/lazyCreateExtensionHostManager.d.ts +4 -7
- package/vscode/src/vs/workbench/services/extensions/common/lazyCreateExtensionHostManager.js +9 -11
|
@@ -8,9 +8,9 @@ import { URI } from '@codingame/monaco-vscode-api/vscode/vs/base/common/uri';
|
|
|
8
8
|
import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
|
|
9
9
|
import { IOpenerService } from '@codingame/monaco-vscode-api/vscode/vs/platform/opener/common/opener.service';
|
|
10
10
|
import { IProductService } from '@codingame/monaco-vscode-api/vscode/vs/platform/product/common/productService.service';
|
|
11
|
+
import { SerializableObjectWithBuffers } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/extensions/common/proxyIdentifier';
|
|
11
12
|
import { ExtHostContext } from '@codingame/monaco-vscode-api/vscode/vs/workbench/api/common/extHost.protocol';
|
|
12
13
|
import { deserializeWebviewMessage, serializeWebviewMessage } from '@codingame/monaco-vscode-api/vscode/vs/workbench/api/common/extHostWebviewMessaging';
|
|
13
|
-
import { SerializableObjectWithBuffers } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/extensions/common/proxyIdentifier';
|
|
14
14
|
|
|
15
15
|
var MainThreadWebviews_1;
|
|
16
16
|
let MainThreadWebviews = class MainThreadWebviews extends Disposable {
|
|
@@ -104,7 +104,7 @@ let MainThreadWebviews = class MainThreadWebviews extends Disposable {
|
|
|
104
104
|
<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
|
|
105
105
|
<meta http-equiv="Content-Security-Policy" content="default-src 'none';">
|
|
106
106
|
</head>
|
|
107
|
-
<body>${( localize(
|
|
107
|
+
<body>${( localize(2503, "An error occurred while loading view: {0}", escape(viewType)))}</body>
|
|
108
108
|
</html>`;
|
|
109
109
|
}
|
|
110
110
|
};
|
|
@@ -79,11 +79,11 @@ let MainThreadWorkspace = class MainThreadWorkspace {
|
|
|
79
79
|
const wantsToDelete = removeCount > 0;
|
|
80
80
|
if (wantsToAdd && !wantsToDelete) {
|
|
81
81
|
if (addCount === 1) {
|
|
82
|
-
message = ( localize(
|
|
82
|
+
message = ( localize(2504, "Extension '{0}' added 1 folder to the workspace", extensionName));
|
|
83
83
|
}
|
|
84
84
|
else {
|
|
85
85
|
message = ( localize(
|
|
86
|
-
|
|
86
|
+
2505,
|
|
87
87
|
"Extension '{0}' added {1} folders to the workspace",
|
|
88
88
|
extensionName,
|
|
89
89
|
addCount
|
|
@@ -92,11 +92,11 @@ let MainThreadWorkspace = class MainThreadWorkspace {
|
|
|
92
92
|
}
|
|
93
93
|
else if (wantsToDelete && !wantsToAdd) {
|
|
94
94
|
if (removeCount === 1) {
|
|
95
|
-
message = ( localize(
|
|
95
|
+
message = ( localize(2506, "Extension '{0}' removed 1 folder from the workspace", extensionName));
|
|
96
96
|
}
|
|
97
97
|
else {
|
|
98
98
|
message = ( localize(
|
|
99
|
-
|
|
99
|
+
2507,
|
|
100
100
|
"Extension '{0}' removed {1} folders from the workspace",
|
|
101
101
|
extensionName,
|
|
102
102
|
removeCount
|
|
@@ -104,7 +104,7 @@ let MainThreadWorkspace = class MainThreadWorkspace {
|
|
|
104
104
|
}
|
|
105
105
|
}
|
|
106
106
|
else {
|
|
107
|
-
message = ( localize(
|
|
107
|
+
message = ( localize(2508, "Extension '{0}' changed folders of the workspace", extensionName));
|
|
108
108
|
}
|
|
109
109
|
return message;
|
|
110
110
|
}
|
|
@@ -49,7 +49,7 @@ let CustomTextEditorModel = CustomTextEditorModel_1 = class CustomTextEditorMode
|
|
|
49
49
|
}));
|
|
50
50
|
this._register(extensionService.onWillStop(e => {
|
|
51
51
|
e.veto(true, ( localize(
|
|
52
|
-
|
|
52
|
+
5803,
|
|
53
53
|
"An extension provided text editor for '{0}' is still open that would close otherwise.",
|
|
54
54
|
this.name
|
|
55
55
|
)));
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { ClassifiedEvent, OmitMetadata, IGDPRProperty, StrictPropertyCheck } from "@codingame/monaco-vscode-api/vscode/vs/platform/telemetry/common/gdprTypings";
|
|
2
|
+
import { ITelemetryData, TelemetryLevel } from "@codingame/monaco-vscode-api/vscode/vs/platform/telemetry/common/telemetry";
|
|
3
|
+
import { ITelemetryService } from "@codingame/monaco-vscode-api/vscode/vs/platform/telemetry/common/telemetry.service";
|
|
4
|
+
import { IDataChannelService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/services/dataChannel/common/dataChannel.service";
|
|
5
|
+
export declare class InterceptingTelemetryService implements ITelemetryService {
|
|
6
|
+
private readonly _baseService;
|
|
7
|
+
private readonly _intercept;
|
|
8
|
+
_serviceBrand: undefined;
|
|
9
|
+
constructor(_baseService: ITelemetryService, _intercept: (eventName: string, data?: ITelemetryData) => void);
|
|
10
|
+
get telemetryLevel(): TelemetryLevel;
|
|
11
|
+
get sessionId(): string;
|
|
12
|
+
get machineId(): string;
|
|
13
|
+
get sqmId(): string;
|
|
14
|
+
get devDeviceId(): string;
|
|
15
|
+
get firstSessionDate(): string;
|
|
16
|
+
get msftInternal(): boolean | undefined;
|
|
17
|
+
get sendErrorTelemetry(): boolean;
|
|
18
|
+
publicLog(eventName: string, data?: ITelemetryData): void;
|
|
19
|
+
publicLog2<E extends ClassifiedEvent<OmitMetadata<T>> = never, T extends IGDPRProperty = never>(eventName: string, data?: StrictPropertyCheck<T, E>): void;
|
|
20
|
+
publicLogError(errorEventName: string, data?: ITelemetryData): void;
|
|
21
|
+
publicLogError2<E extends ClassifiedEvent<OmitMetadata<T>> = never, T extends IGDPRProperty = never>(eventName: string, data?: StrictPropertyCheck<T, E>): void;
|
|
22
|
+
setExperimentProperty(name: string, value: string): void;
|
|
23
|
+
}
|
|
24
|
+
export interface IEditTelemetryData {
|
|
25
|
+
eventName: string;
|
|
26
|
+
data: Record<string, unknown>;
|
|
27
|
+
}
|
|
28
|
+
export declare class DataChannelForwardingTelemetryService extends InterceptingTelemetryService {
|
|
29
|
+
constructor(telemetryService: ITelemetryService, dataChannelService: IDataChannelService);
|
|
30
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
|
|
2
|
+
import { __decorate, __param } from '@codingame/monaco-vscode-api/external/tslib/tslib.es6';
|
|
3
|
+
import { ITelemetryService } from '@codingame/monaco-vscode-api/vscode/vs/platform/telemetry/common/telemetry.service';
|
|
4
|
+
import { IDataChannelService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/dataChannel/common/dataChannel.service';
|
|
5
|
+
|
|
6
|
+
class InterceptingTelemetryService {
|
|
7
|
+
constructor(_baseService, _intercept) {
|
|
8
|
+
this._baseService = _baseService;
|
|
9
|
+
this._intercept = _intercept;
|
|
10
|
+
}
|
|
11
|
+
get telemetryLevel() {
|
|
12
|
+
return this._baseService.telemetryLevel;
|
|
13
|
+
}
|
|
14
|
+
get sessionId() {
|
|
15
|
+
return this._baseService.sessionId;
|
|
16
|
+
}
|
|
17
|
+
get machineId() {
|
|
18
|
+
return this._baseService.machineId;
|
|
19
|
+
}
|
|
20
|
+
get sqmId() {
|
|
21
|
+
return this._baseService.sqmId;
|
|
22
|
+
}
|
|
23
|
+
get devDeviceId() {
|
|
24
|
+
return this._baseService.devDeviceId;
|
|
25
|
+
}
|
|
26
|
+
get firstSessionDate() {
|
|
27
|
+
return this._baseService.firstSessionDate;
|
|
28
|
+
}
|
|
29
|
+
get msftInternal() {
|
|
30
|
+
return this._baseService.msftInternal;
|
|
31
|
+
}
|
|
32
|
+
get sendErrorTelemetry() {
|
|
33
|
+
return this._baseService.sendErrorTelemetry;
|
|
34
|
+
}
|
|
35
|
+
publicLog(eventName, data) {
|
|
36
|
+
this._intercept(eventName, data);
|
|
37
|
+
this._baseService.publicLog(eventName, data);
|
|
38
|
+
}
|
|
39
|
+
publicLog2(eventName, data) {
|
|
40
|
+
this._intercept(eventName, data);
|
|
41
|
+
this._baseService.publicLog2(eventName, data);
|
|
42
|
+
}
|
|
43
|
+
publicLogError(errorEventName, data) {
|
|
44
|
+
this._intercept(errorEventName, data);
|
|
45
|
+
this._baseService.publicLogError(errorEventName, data);
|
|
46
|
+
}
|
|
47
|
+
publicLogError2(eventName, data) {
|
|
48
|
+
this._intercept(eventName, data);
|
|
49
|
+
this._baseService.publicLogError2(eventName, data);
|
|
50
|
+
}
|
|
51
|
+
setExperimentProperty(name, value) {
|
|
52
|
+
this._baseService.setExperimentProperty(name, value);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
let DataChannelForwardingTelemetryService = class DataChannelForwardingTelemetryService extends InterceptingTelemetryService {
|
|
56
|
+
constructor(telemetryService, dataChannelService) {
|
|
57
|
+
super(telemetryService, (eventName, data) => {
|
|
58
|
+
dataChannelService.getDataChannel('editTelemetry').sendData({ eventName, data: data });
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
DataChannelForwardingTelemetryService = ( __decorate([
|
|
63
|
+
( __param(0, ITelemetryService)),
|
|
64
|
+
( __param(1, IDataChannelService))
|
|
65
|
+
], DataChannelForwardingTelemetryService));
|
|
66
|
+
|
|
67
|
+
export { DataChannelForwardingTelemetryService, InterceptingTelemetryService };
|
|
@@ -140,11 +140,11 @@ let ExtensionBisectUi = class ExtensionBisectUi {
|
|
|
140
140
|
}
|
|
141
141
|
_showBisectPrompt() {
|
|
142
142
|
const goodPrompt = {
|
|
143
|
-
label: ( localize(
|
|
143
|
+
label: ( localize(13012, "I can't reproduce")),
|
|
144
144
|
run: () => this._commandService.executeCommand('extension.bisect.next', false)
|
|
145
145
|
};
|
|
146
146
|
const badPrompt = {
|
|
147
|
-
label: ( localize(
|
|
147
|
+
label: ( localize(13013, "I can reproduce")),
|
|
148
148
|
run: () => this._commandService.executeCommand('extension.bisect.next', true)
|
|
149
149
|
};
|
|
150
150
|
const stop = {
|
|
@@ -153,11 +153,11 @@ let ExtensionBisectUi = class ExtensionBisectUi {
|
|
|
153
153
|
};
|
|
154
154
|
const message = this._extensionBisectService.disabledCount === 1
|
|
155
155
|
? ( localize(
|
|
156
|
-
|
|
156
|
+
13014,
|
|
157
157
|
"Extension Bisect is active and has disabled 1 extension. Check if you can still reproduce the problem and proceed by selecting from these options."
|
|
158
158
|
))
|
|
159
159
|
: ( localize(
|
|
160
|
-
|
|
160
|
+
13015,
|
|
161
161
|
"Extension Bisect is active and has disabled {0} extensions. Check if you can still reproduce the problem and proceed by selecting from these options.",
|
|
162
162
|
this._extensionBisectService.disabledCount
|
|
163
163
|
));
|
|
@@ -175,7 +175,7 @@ registerAction2(class extends Action2 {
|
|
|
175
175
|
constructor() {
|
|
176
176
|
super({
|
|
177
177
|
id: 'extension.bisect.start',
|
|
178
|
-
title: ( localize2(
|
|
178
|
+
title: ( localize2(13016, 'Start Extension Bisect')),
|
|
179
179
|
category: Categories.Help,
|
|
180
180
|
f1: true,
|
|
181
181
|
precondition: ( ExtensionBisectUi.ctxIsBisectActive.negate()),
|
|
@@ -195,13 +195,13 @@ registerAction2(class extends Action2 {
|
|
|
195
195
|
const extensionsBisect = accessor.get(IExtensionBisectService);
|
|
196
196
|
const extensions = (await extensionManagement.getInstalled(ExtensionType.User)).filter(ext => extensionEnablementService.isEnabled(ext));
|
|
197
197
|
const res = await dialogService.confirm({
|
|
198
|
-
message: ( localize(
|
|
198
|
+
message: ( localize(13017, "Extension Bisect")),
|
|
199
199
|
detail: ( localize(
|
|
200
|
-
|
|
200
|
+
13018,
|
|
201
201
|
"Extension Bisect will use binary search to find an extension that causes a problem. During the process the window reloads repeatedly (~{0} times). Each time you must confirm if you are still seeing problems.",
|
|
202
202
|
2 + Math.log2(extensions.length) | 0
|
|
203
203
|
)),
|
|
204
|
-
primaryButton: ( localize(
|
|
204
|
+
primaryButton: ( localize(13019, "&&Start Extension Bisect"))
|
|
205
205
|
});
|
|
206
206
|
if (res.confirmed) {
|
|
207
207
|
await extensionsBisect.start(extensions);
|
|
@@ -213,7 +213,7 @@ registerAction2(class extends Action2 {
|
|
|
213
213
|
constructor() {
|
|
214
214
|
super({
|
|
215
215
|
id: 'extension.bisect.next',
|
|
216
|
-
title: ( localize2(
|
|
216
|
+
title: ( localize2(13020, 'Continue Extension Bisect')),
|
|
217
217
|
category: Categories.Help,
|
|
218
218
|
f1: true,
|
|
219
219
|
precondition: ExtensionBisectUi.ctxIsBisectActive
|
|
@@ -247,8 +247,8 @@ registerAction2(class extends Action2 {
|
|
|
247
247
|
return;
|
|
248
248
|
}
|
|
249
249
|
if (done.bad) {
|
|
250
|
-
await dialogService.info(( localize(
|
|
251
|
-
|
|
250
|
+
await dialogService.info(( localize(13021, "Extension Bisect")), ( localize(
|
|
251
|
+
13022,
|
|
252
252
|
"Extension Bisect is done but no extension has been identified. This might be a problem with {0}.",
|
|
253
253
|
productService.nameShort
|
|
254
254
|
)));
|
|
@@ -256,15 +256,15 @@ registerAction2(class extends Action2 {
|
|
|
256
256
|
else {
|
|
257
257
|
const res = await dialogService.confirm({
|
|
258
258
|
type: Severity.Info,
|
|
259
|
-
message: ( localize(
|
|
260
|
-
primaryButton: ( localize(
|
|
261
|
-
cancelButton: ( localize(
|
|
259
|
+
message: ( localize(13021, "Extension Bisect")),
|
|
260
|
+
primaryButton: ( localize(13023, "&&Report Issue & Continue")),
|
|
261
|
+
cancelButton: ( localize(13024, "Continue")),
|
|
262
262
|
detail: ( localize(
|
|
263
|
-
|
|
263
|
+
13025,
|
|
264
264
|
"Extension Bisect is done and has identified {0} as the extension causing the problem.",
|
|
265
265
|
done.id
|
|
266
266
|
)),
|
|
267
|
-
checkbox: { label: ( localize(
|
|
267
|
+
checkbox: { label: ( localize(13026, "Keep this extension disabled")), checked: true }
|
|
268
268
|
});
|
|
269
269
|
if (res.checkboxChecked) {
|
|
270
270
|
await extensionEnablementService.disableExtension({ id: done.id }, undefined);
|
|
@@ -279,28 +279,28 @@ registerAction2(class extends Action2 {
|
|
|
279
279
|
async _checkForBad(dialogService, bisectService) {
|
|
280
280
|
const { result } = await dialogService.prompt({
|
|
281
281
|
type: Severity.Info,
|
|
282
|
-
message: ( localize(
|
|
282
|
+
message: ( localize(13027, "Extension Bisect")),
|
|
283
283
|
detail: ( localize(
|
|
284
|
-
|
|
284
|
+
13028,
|
|
285
285
|
"Extension Bisect is active and has disabled {0} extensions. Check if you can still reproduce the problem and proceed by selecting from these options.",
|
|
286
286
|
bisectService.disabledCount
|
|
287
287
|
)),
|
|
288
288
|
buttons: [
|
|
289
289
|
{
|
|
290
|
-
label: ( localize(
|
|
290
|
+
label: ( localize(13029, "I ca&&n't reproduce")),
|
|
291
291
|
run: () => false
|
|
292
292
|
},
|
|
293
293
|
{
|
|
294
|
-
label: ( localize(
|
|
294
|
+
label: ( localize(13030, "I can &&reproduce")),
|
|
295
295
|
run: () => true
|
|
296
296
|
},
|
|
297
297
|
{
|
|
298
|
-
label: ( localize(
|
|
298
|
+
label: ( localize(13031, "&&Stop Bisect")),
|
|
299
299
|
run: () => undefined
|
|
300
300
|
}
|
|
301
301
|
],
|
|
302
302
|
cancelButton: {
|
|
303
|
-
label: ( localize(
|
|
303
|
+
label: ( localize(13032, "&&Cancel Bisect")),
|
|
304
304
|
run: () => null
|
|
305
305
|
}
|
|
306
306
|
});
|
|
@@ -311,7 +311,7 @@ registerAction2(class extends Action2 {
|
|
|
311
311
|
constructor() {
|
|
312
312
|
super({
|
|
313
313
|
id: 'extension.bisect.stop',
|
|
314
|
-
title: ( localize2(
|
|
314
|
+
title: ( localize2(13033, 'Stop Extension Bisect')),
|
|
315
315
|
category: Categories.Help,
|
|
316
316
|
f1: true,
|
|
317
317
|
precondition: ExtensionBisectUi.ctxIsBisectActive
|
|
@@ -274,7 +274,7 @@ let WebWorkerExtensionHost = class WebWorkerExtensionHost extends Disposable {
|
|
|
274
274
|
logLevel: this._logService.getLevel(),
|
|
275
275
|
loggers: [...this._loggerService.getRegisteredLoggers()],
|
|
276
276
|
logsLocation: this._extensionHostLogsLocation,
|
|
277
|
-
autoStart: (this.startup === ExtensionHostStartup.EagerAutoStart),
|
|
277
|
+
autoStart: (this.startup === ExtensionHostStartup.EagerAutoStart || this.startup === ExtensionHostStartup.LazyAutoStart),
|
|
278
278
|
remote: {
|
|
279
279
|
authority: this._environmentService.remoteAuthority,
|
|
280
280
|
connectionData: null,
|
|
@@ -21,7 +21,7 @@ import { IExtensionHostManager } from "./extensionHostManagers.js";
|
|
|
21
21
|
import { IExtensionManifestPropertiesService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/services/extensions/common/extensionManifestPropertiesService.service";
|
|
22
22
|
import { ExtensionRunningLocation } from "@codingame/monaco-vscode-571c8352-7953-5038-9f09-e03bb6219a0e-common/vscode/vs/workbench/services/extensions/common/extensionRunningLocation";
|
|
23
23
|
import { ExtensionRunningLocationTracker } from "./extensionRunningLocationTracker.js";
|
|
24
|
-
import { ActivationKind, ActivationTimes, ExtensionActivationReason, ExtensionPointContribution, IExtensionHost, IExtensionsStatus, IMessage, IResponsiveStateChangeEvent, IWillActivateEvent, WillStopExtensionHostsEvent } from "@codingame/monaco-vscode-api/vscode/vs/workbench/services/extensions/common/extensions";
|
|
24
|
+
import { ActivationKind, ActivationTimes, ExtensionActivationReason, ExtensionPointContribution, IExtensionHost, IExtensionInspectInfo, IExtensionsStatus, IMessage, IResponsiveStateChangeEvent, IWillActivateEvent, WillStopExtensionHostsEvent } from "@codingame/monaco-vscode-api/vscode/vs/workbench/services/extensions/common/extensions";
|
|
25
25
|
import { IExtensionService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/services/extensions/common/extensions.service";
|
|
26
26
|
import { ExtensionsProposedApi } from "./extensionsProposedApi.js";
|
|
27
27
|
import { IExtensionPoint } from "@codingame/monaco-vscode-api/vscode/vs/workbench/services/extensions/common/extensionsRegistry";
|
|
@@ -114,6 +114,7 @@ export declare abstract class AbstractExtensionService extends Disposable implem
|
|
|
114
114
|
toAdd: IExtension[];
|
|
115
115
|
toRemove: string[];
|
|
116
116
|
}): Promise<void>;
|
|
117
|
+
private _startOnDemandExtensionHosts;
|
|
117
118
|
activateByEvent(activationEvent: string, activationKind?: ActivationKind): Promise<void>;
|
|
118
119
|
private _activateByEvent;
|
|
119
120
|
activateById(extensionId: ExtensionIdentifier, reason: ExtensionActivationReason): Promise<void>;
|
|
@@ -126,10 +127,7 @@ export declare abstract class AbstractExtensionService extends Disposable implem
|
|
|
126
127
|
getExtensionsStatus(): {
|
|
127
128
|
[id: string]: IExtensionsStatus;
|
|
128
129
|
};
|
|
129
|
-
getInspectPorts(extensionHostKind: ExtensionHostKind, tryEnableInspector: boolean): Promise<
|
|
130
|
-
port: number;
|
|
131
|
-
host: string;
|
|
132
|
-
}[]>;
|
|
130
|
+
getInspectPorts(extensionHostKind: ExtensionHostKind, tryEnableInspector: boolean): Promise<IExtensionInspectInfo[]>;
|
|
133
131
|
setRemoteEnvironment(env: {
|
|
134
132
|
[key: string]: string | null;
|
|
135
133
|
}): Promise<void>;
|
|
@@ -181,14 +181,14 @@ let AbstractExtensionService = AbstractExtensionService_1 = class AbstractExtens
|
|
|
181
181
|
}
|
|
182
182
|
}, {
|
|
183
183
|
id: 'join.disconnectRemote',
|
|
184
|
-
label: ( localize(
|
|
184
|
+
label: ( localize(13115, "Disconnect Remote Agent")),
|
|
185
185
|
order: WillShutdownJoinerOrder.Last
|
|
186
186
|
});
|
|
187
187
|
}
|
|
188
188
|
else {
|
|
189
189
|
event.join(this._doStopExtensionHosts(), {
|
|
190
190
|
id: 'join.stopExtensionHosts',
|
|
191
|
-
label: ( localize(
|
|
191
|
+
label: ( localize(13116, "Stopping Extension Hosts")),
|
|
192
192
|
});
|
|
193
193
|
}
|
|
194
194
|
}));
|
|
@@ -259,7 +259,7 @@ let AbstractExtensionService = AbstractExtensionService_1 = class AbstractExtens
|
|
|
259
259
|
this._notificationService.notify({
|
|
260
260
|
severity: Severity.Error,
|
|
261
261
|
message: ( localize(
|
|
262
|
-
|
|
262
|
+
13117,
|
|
263
263
|
"The following extensions contain dependency loops and have been disabled: {0}",
|
|
264
264
|
( result.removedDueToLooping.map(e => `'${e.identifier.value}'`)).join(', ')
|
|
265
265
|
))
|
|
@@ -376,13 +376,7 @@ let AbstractExtensionService = AbstractExtensionService_1 = class AbstractExtens
|
|
|
376
376
|
const lock = await this._registry.acquireLock('_initialize');
|
|
377
377
|
try {
|
|
378
378
|
await this._resolveAndProcessExtensions(lock);
|
|
379
|
-
|
|
380
|
-
for (const extHostManager of this._extensionHostManagers) {
|
|
381
|
-
if (extHostManager.startup !== ExtensionHostStartup.EagerAutoStart) {
|
|
382
|
-
const extensions = this._runningLocations.filterByExtensionHostManager(snapshot.extensions, extHostManager);
|
|
383
|
-
extHostManager.start(snapshot.versionId, snapshot.extensions, ( extensions.map(extension => extension.identifier)));
|
|
384
|
-
}
|
|
385
|
-
}
|
|
379
|
+
this._startOnDemandExtensionHosts();
|
|
386
380
|
}
|
|
387
381
|
finally {
|
|
388
382
|
lock.dispose();
|
|
@@ -440,7 +434,7 @@ let AbstractExtensionService = AbstractExtensionService_1 = class AbstractExtens
|
|
|
440
434
|
this._notificationService.notify({
|
|
441
435
|
severity: Severity.Error,
|
|
442
436
|
message: ( localize(
|
|
443
|
-
|
|
437
|
+
13117,
|
|
444
438
|
"The following extensions contain dependency loops and have been disabled: {0}",
|
|
445
439
|
( result.removedDueToLooping.map(e => `'${e.identifier.value}'`)).join(', ')
|
|
446
440
|
))
|
|
@@ -455,7 +449,7 @@ let AbstractExtensionService = AbstractExtensionService_1 = class AbstractExtens
|
|
|
455
449
|
const extensionHostManager = this.findTestExtensionHost(this._environmentService.extensionTestsLocationURI);
|
|
456
450
|
if (!extensionHostManager) {
|
|
457
451
|
const msg = ( localize(
|
|
458
|
-
|
|
452
|
+
13118,
|
|
459
453
|
"No extension host found that can launch the test runner at {0}.",
|
|
460
454
|
(this._environmentService.extensionTestsLocationURI.toString())
|
|
461
455
|
));
|
|
@@ -625,7 +619,7 @@ let AbstractExtensionService = AbstractExtensionService_1 = class AbstractExtens
|
|
|
625
619
|
vetoReasons.add(reason);
|
|
626
620
|
}
|
|
627
621
|
}).catch(error => {
|
|
628
|
-
vetoReasons.add(( localize(
|
|
622
|
+
vetoReasons.add(( localize(13119, "{0} (Error: {1})", reason, toErrorMessage(error))));
|
|
629
623
|
});
|
|
630
624
|
}
|
|
631
625
|
}
|
|
@@ -640,11 +634,11 @@ let AbstractExtensionService = AbstractExtensionService_1 = class AbstractExtens
|
|
|
640
634
|
this._logService.warn(`Extension host was not stopped because of veto (stop reason: ${reason}, veto reason: ${vetoReasonsArray.join(', ')})`);
|
|
641
635
|
const { confirmed } = await this._dialogService.confirm({
|
|
642
636
|
type: Severity.Warning,
|
|
643
|
-
message: ( localize(
|
|
637
|
+
message: ( localize(13120, "Please confirm restart of extensions.")),
|
|
644
638
|
detail: vetoReasonsArray.length === 1 ?
|
|
645
639
|
vetoReasonsArray[0] :
|
|
646
640
|
vetoReasonsArray.join('\n -'),
|
|
647
|
-
primaryButton: ( localize(
|
|
641
|
+
primaryButton: ( localize(13121, "Restart Anyway"))
|
|
648
642
|
});
|
|
649
643
|
if (confirmed) {
|
|
650
644
|
return true;
|
|
@@ -695,8 +689,8 @@ let AbstractExtensionService = AbstractExtensionService_1 = class AbstractExtens
|
|
|
695
689
|
}
|
|
696
690
|
_doCreateExtensionHostManager(extensionHost, initialActivationEvents) {
|
|
697
691
|
const internalExtensionService = this._acquireInternalAPI(extensionHost);
|
|
698
|
-
if (extensionHost.startup === ExtensionHostStartup.
|
|
699
|
-
return this._instantiationService.createInstance(LazyCreateExtensionHostManager, extensionHost, internalExtensionService);
|
|
692
|
+
if (extensionHost.startup === ExtensionHostStartup.LazyAutoStart) {
|
|
693
|
+
return this._instantiationService.createInstance(LazyCreateExtensionHostManager, extensionHost, initialActivationEvents, internalExtensionService);
|
|
700
694
|
}
|
|
701
695
|
return this._instantiationService.createInstance(ExtensionHostManager, extensionHost, initialActivationEvents, internalExtensionService);
|
|
702
696
|
}
|
|
@@ -741,15 +735,15 @@ let AbstractExtensionService = AbstractExtensionService_1 = class AbstractExtens
|
|
|
741
735
|
this._remoteCrashTracker.registerCrash();
|
|
742
736
|
if (this._remoteCrashTracker.shouldAutomaticallyRestart()) {
|
|
743
737
|
this._logService.info(`Automatically restarting the remote extension host.`);
|
|
744
|
-
this._notificationService.status(( localize(
|
|
738
|
+
this._notificationService.status(( localize(13122, "The remote extension host terminated unexpectedly. Restarting...")), { hideAfter: 5000 });
|
|
745
739
|
this._startExtensionHostsIfNecessary(false, Array.from(( this._allRequestedActivateEvents.keys())));
|
|
746
740
|
}
|
|
747
741
|
else {
|
|
748
742
|
this._notificationService.prompt(Severity.Error, ( localize(
|
|
749
|
-
|
|
743
|
+
13123,
|
|
750
744
|
"Remote Extension host terminated unexpectedly 3 times within the last 5 minutes."
|
|
751
745
|
)), [{
|
|
752
|
-
label: ( localize(
|
|
746
|
+
label: ( localize(13124, "Restart Remote Extension Host")),
|
|
753
747
|
run: () => {
|
|
754
748
|
this._startExtensionHostsIfNecessary(false, Array.from(( this._allRequestedActivateEvents.keys())));
|
|
755
749
|
}
|
|
@@ -781,6 +775,7 @@ let AbstractExtensionService = AbstractExtensionService_1 = class AbstractExtens
|
|
|
781
775
|
const lock = await this._registry.acquireLock('startExtensionHosts');
|
|
782
776
|
try {
|
|
783
777
|
this._startExtensionHostsIfNecessary(false, Array.from(( this._allRequestedActivateEvents.keys())));
|
|
778
|
+
this._startOnDemandExtensionHosts();
|
|
784
779
|
const localProcessExtensionHosts = this._getExtensionHostManagers(ExtensionHostKind.LocalProcess);
|
|
785
780
|
await Promise.all(( localProcessExtensionHosts.map(extHost => extHost.ready())));
|
|
786
781
|
}
|
|
@@ -788,6 +783,15 @@ let AbstractExtensionService = AbstractExtensionService_1 = class AbstractExtens
|
|
|
788
783
|
lock.dispose();
|
|
789
784
|
}
|
|
790
785
|
}
|
|
786
|
+
_startOnDemandExtensionHosts() {
|
|
787
|
+
const snapshot = this._registry.getSnapshot();
|
|
788
|
+
for (const extHostManager of this._extensionHostManagers) {
|
|
789
|
+
if (extHostManager.startup !== ExtensionHostStartup.EagerAutoStart) {
|
|
790
|
+
const extensions = this._runningLocations.filterByExtensionHostManager(snapshot.extensions, extHostManager);
|
|
791
|
+
extHostManager.start(snapshot.versionId, snapshot.extensions, ( extensions.map(extension => extension.identifier)));
|
|
792
|
+
}
|
|
793
|
+
}
|
|
794
|
+
}
|
|
791
795
|
activateByEvent(activationEvent, activationKind = ActivationKind.Normal) {
|
|
792
796
|
if (this._installedExtensionsReady.isOpen()) {
|
|
793
797
|
this._allRequestedActivateEvents.add(activationEvent);
|
|
@@ -871,7 +875,13 @@ let AbstractExtensionService = AbstractExtensionService_1 = class AbstractExtens
|
|
|
871
875
|
return result;
|
|
872
876
|
}
|
|
873
877
|
async getInspectPorts(extensionHostKind, tryEnableInspector) {
|
|
874
|
-
const result = await Promise.all(( this._getExtensionHostManagers(extensionHostKind).map(extHost =>
|
|
878
|
+
const result = await Promise.all(( this._getExtensionHostManagers(extensionHostKind).map(async (extHost) => {
|
|
879
|
+
let portInfo = await extHost.getInspectPort(tryEnableInspector);
|
|
880
|
+
if (portInfo !== undefined) {
|
|
881
|
+
portInfo = { ...portInfo, devtoolsLabel: extHost.friendyName };
|
|
882
|
+
}
|
|
883
|
+
return portInfo;
|
|
884
|
+
})));
|
|
875
885
|
return result.filter(isDefined);
|
|
876
886
|
}
|
|
877
887
|
async setRemoteEnvironment(env) {
|
|
@@ -1240,7 +1250,7 @@ class ActivationFeatureMarkdowneRenderer extends Disposable {
|
|
|
1240
1250
|
}
|
|
1241
1251
|
( Registry.as(Extensions.ExtensionFeaturesRegistry)).registerExtensionFeature({
|
|
1242
1252
|
id: 'activationEvents',
|
|
1243
|
-
label: ( localize(
|
|
1253
|
+
label: ( localize(13125, "Activation Events")),
|
|
1244
1254
|
access: {
|
|
1245
1255
|
canToggle: false
|
|
1246
1256
|
},
|
|
@@ -11,7 +11,7 @@ import { IExtensionHostManager } from "./extensionHostManagers.js";
|
|
|
11
11
|
import { IExtensionDescriptionDelta } from "@codingame/monaco-vscode-api/vscode/vs/workbench/services/extensions/common/extensionHostProtocol";
|
|
12
12
|
import { IResolveAuthorityResult } from "@codingame/monaco-vscode-api/vscode/vs/workbench/services/extensions/common/extensionHostProxy";
|
|
13
13
|
import { ExtensionRunningLocation } from "@codingame/monaco-vscode-571c8352-7953-5038-9f09-e03bb6219a0e-common/vscode/vs/workbench/services/extensions/common/extensionRunningLocation";
|
|
14
|
-
import { ActivationKind, ExtensionActivationReason, ExtensionHostStartup, IExtensionHost, IInternalExtensionService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/services/extensions/common/extensions";
|
|
14
|
+
import { ActivationKind, ExtensionActivationReason, ExtensionHostStartup, IExtensionHost, IExtensionInspectInfo, IInternalExtensionService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/services/extensions/common/extensions";
|
|
15
15
|
import { ResponsiveState } from "@codingame/monaco-vscode-api/vscode/vs/workbench/services/extensions/common/rpcProtocol";
|
|
16
16
|
export declare class ExtensionHostManager extends Disposable implements IExtensionHostManager {
|
|
17
17
|
private readonly _internalExtensionService;
|
|
@@ -50,10 +50,7 @@ export declare class ExtensionHostManager extends Disposable implements IExtensi
|
|
|
50
50
|
activateByEvent(activationEvent: string, activationKind: ActivationKind): Promise<void>;
|
|
51
51
|
activationEventIsDone(activationEvent: string): boolean;
|
|
52
52
|
private _activateByEvent;
|
|
53
|
-
getInspectPort(tryEnableInspector: boolean): Promise<
|
|
54
|
-
port: number;
|
|
55
|
-
host: string;
|
|
56
|
-
} | undefined>;
|
|
53
|
+
getInspectPort(tryEnableInspector: boolean): Promise<IExtensionInspectInfo | undefined>;
|
|
57
54
|
resolveAuthority(remoteAuthority: string, resolveAttempt: number): Promise<IResolveAuthorityResult>;
|
|
58
55
|
getCanonicalURI(remoteAuthority: string, uri: URI): Promise<URI | null>;
|
|
59
56
|
start(extensionRegistryVersionId: number, allExtensions: IExtensionDescription[], myExtensions: ExtensionIdentifier[]): Promise<void>;
|
|
@@ -479,7 +479,7 @@ registerAction2(class MeasureExtHostLatencyAction extends Action2 {
|
|
|
479
479
|
constructor() {
|
|
480
480
|
super({
|
|
481
481
|
id: 'editor.action.measureExtHostLatency',
|
|
482
|
-
title: ( localize2(
|
|
482
|
+
title: ( localize2(13126, "Measure Extension Host Latency")),
|
|
483
483
|
category: Categories.Developer,
|
|
484
484
|
f1: true
|
|
485
485
|
});
|
|
@@ -5,7 +5,7 @@ import { ExtensionHostKind } from "@codingame/monaco-vscode-api/vscode/vs/workbe
|
|
|
5
5
|
import { IExtensionDescriptionDelta } from "@codingame/monaco-vscode-api/vscode/vs/workbench/services/extensions/common/extensionHostProtocol";
|
|
6
6
|
import { IResolveAuthorityResult } from "@codingame/monaco-vscode-api/vscode/vs/workbench/services/extensions/common/extensionHostProxy";
|
|
7
7
|
import { ExtensionRunningLocation } from "@codingame/monaco-vscode-571c8352-7953-5038-9f09-e03bb6219a0e-common/vscode/vs/workbench/services/extensions/common/extensionRunningLocation";
|
|
8
|
-
import { ActivationKind, ExtensionActivationReason, ExtensionHostStartup } from "@codingame/monaco-vscode-api/vscode/vs/workbench/services/extensions/common/extensions";
|
|
8
|
+
import { ActivationKind, ExtensionActivationReason, ExtensionHostStartup, IExtensionInspectInfo } from "@codingame/monaco-vscode-api/vscode/vs/workbench/services/extensions/common/extensions";
|
|
9
9
|
import { ResponsiveState } from "@codingame/monaco-vscode-api/vscode/vs/workbench/services/extensions/common/rpcProtocol";
|
|
10
10
|
export interface IExtensionHostManager {
|
|
11
11
|
readonly pid: number | null;
|
|
@@ -26,10 +26,7 @@ export interface IExtensionHostManager {
|
|
|
26
26
|
activate(extension: ExtensionIdentifier, reason: ExtensionActivationReason): Promise<boolean>;
|
|
27
27
|
activateByEvent(activationEvent: string, activationKind: ActivationKind): Promise<void>;
|
|
28
28
|
activationEventIsDone(activationEvent: string): boolean;
|
|
29
|
-
getInspectPort(tryEnableInspector: boolean): Promise<
|
|
30
|
-
port: number;
|
|
31
|
-
host: string;
|
|
32
|
-
} | undefined>;
|
|
29
|
+
getInspectPort(tryEnableInspector: boolean): Promise<IExtensionInspectInfo | undefined>;
|
|
33
30
|
resolveAuthority(remoteAuthority: string, resolveAttempt: number): Promise<IResolveAuthorityResult>;
|
|
34
31
|
getCanonicalURI(remoteAuthority: string, uri: URI): Promise<URI | null>;
|
|
35
32
|
start(extensionRegistryVersionId: number, allExtensions: readonly IExtensionDescription[], myExtensions: ExtensionIdentifier[]): Promise<void>;
|
|
@@ -106,7 +106,7 @@ class ApiProposalsMarkdowneRenderer extends Disposable {
|
|
|
106
106
|
}
|
|
107
107
|
( Registry.as(Extensions.ExtensionFeaturesRegistry)).registerExtensionFeature({
|
|
108
108
|
id: 'enabledApiProposals',
|
|
109
|
-
label: ( localize(
|
|
109
|
+
label: ( localize(13127, "API Proposals")),
|
|
110
110
|
access: {
|
|
111
111
|
canToggle: false
|
|
112
112
|
},
|
|
@@ -9,7 +9,7 @@ function dedupExtensions(system, user, workspace, development, logService) {
|
|
|
9
9
|
const extension = result.get(systemExtension.identifier);
|
|
10
10
|
if (extension) {
|
|
11
11
|
logService.warn(( localize(
|
|
12
|
-
|
|
12
|
+
13214,
|
|
13
13
|
"Overwriting extension {0} with {1}.",
|
|
14
14
|
extension.extensionLocation.fsPath,
|
|
15
15
|
systemExtension.extensionLocation.fsPath
|
|
@@ -29,7 +29,7 @@ function dedupExtensions(system, user, workspace, development, logService) {
|
|
|
29
29
|
}
|
|
30
30
|
else {
|
|
31
31
|
logService.warn(( localize(
|
|
32
|
-
|
|
32
|
+
13214,
|
|
33
33
|
"Overwriting extension {0} with {1}.",
|
|
34
34
|
extension.extensionLocation.fsPath,
|
|
35
35
|
userExtension.extensionLocation.fsPath
|
|
@@ -46,7 +46,7 @@ function dedupExtensions(system, user, workspace, development, logService) {
|
|
|
46
46
|
const extension = result.get(workspaceExtension.identifier);
|
|
47
47
|
if (extension) {
|
|
48
48
|
logService.warn(( localize(
|
|
49
|
-
|
|
49
|
+
13215,
|
|
50
50
|
"Overwriting {0} with Workspace Extension {1}.",
|
|
51
51
|
extension.extensionLocation.fsPath,
|
|
52
52
|
workspaceExtension.extensionLocation.fsPath
|
|
@@ -56,7 +56,7 @@ function dedupExtensions(system, user, workspace, development, logService) {
|
|
|
56
56
|
});
|
|
57
57
|
development.forEach(developedExtension => {
|
|
58
58
|
logService.info(( localize(
|
|
59
|
-
|
|
59
|
+
13216,
|
|
60
60
|
"Loading development extension at {0}",
|
|
61
61
|
developedExtension.extensionLocation.fsPath
|
|
62
62
|
)));
|