@codingame/monaco-vscode-assignment-service-override 37.3.3 → 37.3.5

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 CHANGED
@@ -6,6 +6,7 @@ import { IConfigurationService } from '@codingame/monaco-vscode-api/vscode/vs/pl
6
6
  import { IEnvironmentService } from '@codingame/monaco-vscode-api/vscode/vs/platform/environment/common/environment.service';
7
7
  import { SyncDescriptor } from '@codingame/monaco-vscode-api/vscode/vs/platform/instantiation/common/descriptors';
8
8
  import { IWorkbenchAssignmentService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/assignment/common/assignmentService.service';
9
+ import './vscode/src/vs/workbench/services/assignment/common/assignmentService.js';
9
10
 
10
11
  let AssignmentService = class AssignmentService {
11
12
  constructor(experiments, treatments, configurationService, environmentService) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codingame/monaco-vscode-assignment-service-override",
3
- "version": "37.3.3",
3
+ "version": "37.3.5",
4
4
  "private": false,
5
5
  "description": "VSCode public API plugged on the monaco editor - assignment service-override",
6
6
  "keywords": [],
@@ -15,7 +15,7 @@
15
15
  },
16
16
  "type": "module",
17
17
  "dependencies": {
18
- "@codingame/monaco-vscode-api": "37.3.3"
18
+ "@codingame/monaco-vscode-api": "37.3.5"
19
19
  },
20
20
  "main": "index.js",
21
21
  "module": "index.js",
@@ -0,0 +1,43 @@
1
+ import { Event } from "@codingame/monaco-vscode-api/vscode/vs/base/common/event";
2
+ import { Disposable } from "@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle";
3
+ import { IStorageService } from "@codingame/monaco-vscode-api/vscode/vs/platform/storage/common/storage.service";
4
+ import type { IAssignmentFilter } from "./assignmentService.js";
5
+ /**
6
+ * Applies the registered {@link IAssignmentFilter assignment filters} to the assignment context
7
+ * and remembers, per filter, which assignment-context ids each filter excluded.
8
+ *
9
+ * The excluded ids are persisted so that they stay filtered out across reloads even before the
10
+ * owning filter has been registered again. Once a filter is registered it becomes authoritative
11
+ * for its own id: the persisted state is repopulated from the ids it currently excludes and any
12
+ * id that is no longer excluded is dropped from storage.
13
+ */
14
+ export declare class AssignmentContextFilter extends Disposable {
15
+ private readonly storageService;
16
+ private static readonly STORAGE_KEY;
17
+ private readonly _filters;
18
+ private readonly _filterDisposables;
19
+ /**
20
+ * Assignment-context ids that were filtered out, keyed by the id of the filter that
21
+ * excluded them. Entries owned by a filter that has not been registered yet are honored
22
+ * across reloads so those ids stay excluded until the filter takes over.
23
+ */
24
+ private _cachedFilteredOutIds;
25
+ /**
26
+ * Ids of filters that have been registered this session. Once a filter is registered it
27
+ * becomes authoritative for its own id and the persisted cache is repopulated from the
28
+ * ids it actually excludes.
29
+ */
30
+ private readonly _registeredFilterIds;
31
+ private readonly _onDidChange;
32
+ /** Fires when a filter is added or an already registered filter changes its exclusions. */
33
+ readonly onDidChange: Event<void>;
34
+ constructor(storageService: IStorageService);
35
+ addFilter(filter: IAssignmentFilter): void;
36
+ /**
37
+ * Removes the excluded assignment-context ids from the given context and persists the
38
+ * reconciled per-filter cache.
39
+ */
40
+ filter(assignmentContext: string): string;
41
+ private _loadFilteredOutIds;
42
+ private _storeFilteredOutIds;
43
+ }
@@ -0,0 +1,135 @@
1
+
2
+ import { Emitter } from '@codingame/monaco-vscode-api/vscode/vs/base/common/event';
3
+ import { Disposable, DisposableStore } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
4
+ import { StorageScope, StorageTarget } from '@codingame/monaco-vscode-api/vscode/vs/platform/storage/common/storage';
5
+
6
+ class AssignmentContextFilter extends Disposable {
7
+ static {
8
+ this.STORAGE_KEY = "workbench.assignment.filteredOutAssignmentContextIds";
9
+ }
10
+ constructor(storageService) {
11
+ super();
12
+ this.storageService = storageService;
13
+ this._filters = [];
14
+ this._filterDisposables = this._register(( new DisposableStore()));
15
+ this._registeredFilterIds = ( new Set());
16
+ this._onDidChange = this._register(( new Emitter()));
17
+ this.onDidChange = this._onDidChange.event;
18
+ this._cachedFilteredOutIds = this._loadFilteredOutIds();
19
+ }
20
+ addFilter(filter) {
21
+ this._filters.push(filter);
22
+ this._registeredFilterIds.add(filter.id);
23
+ if (( this._cachedFilteredOutIds.has(filter.id))) {
24
+ const next = ( new Map(this._cachedFilteredOutIds));
25
+ next.delete(filter.id);
26
+ this._storeFilteredOutIds(next);
27
+ }
28
+ this._filterDisposables.add(filter.onDidChange(() => this._onDidChange.fire()));
29
+ this._onDidChange.fire();
30
+ }
31
+ filter(assignmentContext) {
32
+ const assignments = assignmentContext.split(";");
33
+ const freshFilteredOut = ( new Map());
34
+ const filteredAssignments = assignments.filter(assignment => {
35
+ let excluded = false;
36
+ for (const filter of this._filters) {
37
+ if (filter.exclude(assignment)) {
38
+ let set = freshFilteredOut.get(filter.id);
39
+ if (!set) {
40
+ set = ( new Set());
41
+ freshFilteredOut.set(filter.id, set);
42
+ }
43
+ set.add(assignment);
44
+ excluded = true;
45
+ }
46
+ }
47
+ if (excluded) {
48
+ return false;
49
+ }
50
+ for (const [filterId, ids] of this._cachedFilteredOutIds) {
51
+ if (!( this._registeredFilterIds.has(filterId)) && ( ids.has(assignment))) {
52
+ return false;
53
+ }
54
+ }
55
+ return true;
56
+ });
57
+ const next = ( new Map());
58
+ for (const [filterId, ids] of this._cachedFilteredOutIds) {
59
+ if (!( this._registeredFilterIds.has(filterId))) {
60
+ next.set(filterId, ids);
61
+ }
62
+ }
63
+ for (const [filterId, ids] of freshFilteredOut) {
64
+ next.set(filterId, ids);
65
+ }
66
+ this._storeFilteredOutIds(next);
67
+ return filteredAssignments.join(";");
68
+ }
69
+ _loadFilteredOutIds() {
70
+ const result = ( new Map());
71
+ const raw = this.storageService.get(AssignmentContextFilter.STORAGE_KEY, StorageScope.APPLICATION);
72
+ if (!raw) {
73
+ return result;
74
+ }
75
+ try {
76
+ const parsed = JSON.parse(raw);
77
+ if (parsed && typeof parsed === "object") {
78
+ for (const [filterId, ids] of Object.entries(parsed)) {
79
+ if (Array.isArray(ids)) {
80
+ const set = ( new Set(ids.filter(id => typeof id === "string")));
81
+ if (set.size > 0) {
82
+ result.set(filterId, set);
83
+ }
84
+ }
85
+ }
86
+ }
87
+ } catch {}
88
+ return result;
89
+ }
90
+ _storeFilteredOutIds(next) {
91
+ const normalized = ( new Map());
92
+ for (const [filterId, ids] of next) {
93
+ if (ids.size > 0) {
94
+ normalized.set(filterId, ids);
95
+ }
96
+ }
97
+ if (areCachesEqual(normalized, this._cachedFilteredOutIds)) {
98
+ return;
99
+ }
100
+ this._cachedFilteredOutIds = normalized;
101
+ if (normalized.size === 0) {
102
+ this.storageService.remove(AssignmentContextFilter.STORAGE_KEY, StorageScope.APPLICATION);
103
+ } else {
104
+ const serializable = {};
105
+ for (const [filterId, ids] of normalized) {
106
+ serializable[filterId] = Array.from(ids);
107
+ }
108
+ this.storageService.store(
109
+ AssignmentContextFilter.STORAGE_KEY,
110
+ JSON.stringify(serializable),
111
+ StorageScope.APPLICATION,
112
+ StorageTarget.MACHINE
113
+ );
114
+ }
115
+ }
116
+ }
117
+ function areCachesEqual(a, b) {
118
+ if (a.size !== b.size) {
119
+ return false;
120
+ }
121
+ for (const [filterId, ids] of a) {
122
+ const other = b.get(filterId);
123
+ if (!other || other.size !== ids.size) {
124
+ return false;
125
+ }
126
+ for (const id of ids) {
127
+ if (!( other.has(id))) {
128
+ return false;
129
+ }
130
+ }
131
+ }
132
+ return true;
133
+ }
134
+
135
+ export { AssignmentContextFilter };
@@ -0,0 +1,97 @@
1
+ import type { IExperimentationFilterProvider } from "tas-client";
2
+ import { Disposable } from "@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle";
3
+ import { IDefaultAccountService } from "@codingame/monaco-vscode-api/vscode/vs/platform/defaultAccount/common/defaultAccount.service";
4
+ import { ILogService } from "@codingame/monaco-vscode-api/vscode/vs/platform/log/common/log.service";
5
+ import { IStorageService } from "@codingame/monaco-vscode-api/vscode/vs/platform/storage/common/storage.service";
6
+ import { IChatEntitlementService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/services/chat/common/chatEntitlementService.service";
7
+ import { IExtensionService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/services/extensions/common/extensions.service";
8
+ export declare enum ExtensionsFilter {
9
+ /**
10
+ * Version of the github.copilot extension.
11
+ */
12
+ CopilotExtensionVersion = "X-Copilot-RelatedPluginVersion-githubcopilot",
13
+ /**
14
+ * Version of the github.copilot-chat extension.
15
+ */
16
+ CopilotChatExtensionVersion = "X-Copilot-RelatedPluginVersion-githubcopilotchat",
17
+ /**
18
+ * Version of the completions version.
19
+ */
20
+ CompletionsVersionInCopilotChat = "X-VSCode-CompletionsInChatExtensionVersion",
21
+ /**
22
+ * SKU of the copilot entitlement.
23
+ */
24
+ CopilotSku = "X-GitHub-Copilot-SKU",
25
+ /**
26
+ * The internal org of the user.
27
+ */
28
+ MicrosoftInternalOrg = "X-Microsoft-Internal-Org",
29
+ /**
30
+ * The tracking ID of the user from Copilot entitlement API.
31
+ */
32
+ CopilotTrackingId = "X-Copilot-CopilotTrackingId",
33
+ /**
34
+ * Whether the `sn` flag is set to `'1'` in the copilot token.
35
+ */
36
+ CopilotIsSn = "X-GitHub-Copilot-IsSn",
37
+ /**
38
+ * Whether the `fcv1` flag is set to `'1'` in the copilot token.
39
+ */
40
+ CopilotIsFcv1 = "X-GitHub-Copilot-IsFcv1"
41
+ }
42
+ export declare class CopilotAssignmentFilterProvider extends Disposable implements IExperimentationFilterProvider {
43
+ private readonly _extensionService;
44
+ private readonly _logService;
45
+ private readonly _storageService;
46
+ private readonly _chatEntitlementService;
47
+ private readonly _defaultAccountService;
48
+ private copilotChatExtensionVersion;
49
+ private copilotExtensionVersion;
50
+ private copilotCompletionsVersion;
51
+ private copilotInternalOrg;
52
+ private copilotSku;
53
+ private copilotTrackingId;
54
+ private copilotIsSn;
55
+ private copilotIsFcv1;
56
+ private readonly _onDidChangeFilters;
57
+ readonly onDidChangeFilters: import("@codingame/monaco-vscode-api/vscode/vs/base/common/event").Event<void>;
58
+ constructor(_extensionService: IExtensionService, _logService: ILogService, _storageService: IStorageService, _chatEntitlementService: IChatEntitlementService, _defaultAccountService: IDefaultAccountService);
59
+ private updateExtensionVersions;
60
+ private updateCopilotEntitlementInfo;
61
+ private updateCopilotTokenInfo;
62
+ /**
63
+ * Returns a version string that can be parsed by the TAS client.
64
+ * The tas client cannot handle suffixes lke "-insider"
65
+ * Ref: https://github.com/microsoft/tas-client/blob/30340d5e1da37c2789049fcf45928b954680606f/vscode-tas-client/src/vscode-tas-client/VSCodeFilterProvider.ts#L35
66
+ *
67
+ * @param version Version string to be trimmed.
68
+ */
69
+ private static trimVersionSuffix;
70
+ getFilterValue(filter: string): string | null;
71
+ getFilters(): Map<string, string | null>;
72
+ }
73
+ /**
74
+ * userParam names for the new TAS assignments API (POST /api/v1/assignments) that carry
75
+ * the GitHub account signals available in core. Hex org/business ids are not yet parsed
76
+ * in core, so they are intentionally omitted here.
77
+ */
78
+ export declare enum GitHubAssignmentsFilter {
79
+ CopilotTrackingId = "copilottrackingid",
80
+ IsGhOrMsftStaff = "github_core_isghormsftstaff",
81
+ GhMsftOrExternal = "github_core_ghmsftorexternal"
82
+ }
83
+ /**
84
+ * Emits the core-available GitHub account filters for the new TAS assignments API using
85
+ * the new userParam key names.
86
+ */
87
+ export declare class GitHubCoreAssignmentsFilterProvider extends Disposable implements IExperimentationFilterProvider {
88
+ private readonly _chatEntitlementService;
89
+ private copilotTrackingId;
90
+ private internalOrg;
91
+ private readonly _onDidChangeFilters;
92
+ readonly onDidChangeFilters: import("@codingame/monaco-vscode-api/vscode/vs/base/common/event").Event<void>;
93
+ constructor(_chatEntitlementService: IChatEntitlementService);
94
+ private update;
95
+ getFilterValue(filter: string): string | null;
96
+ getFilters(): Map<string, string | null>;
97
+ }
@@ -0,0 +1,38 @@
1
+
2
+ import '@codingame/monaco-vscode-api/vscode/vs/base/common/event';
3
+ import '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
4
+ import '@codingame/monaco-vscode-api/vscode/vs/platform/assignment/common/assignment';
5
+ import '@codingame/monaco-vscode-api/vscode/vs/platform/instantiation/common/instantiation';
6
+ import '@codingame/monaco-vscode-api/vscode/vs/platform/extensions/common/extensions';
7
+ import '@codingame/monaco-vscode-api/vscode/vs/platform/storage/common/storage';
8
+
9
+ var ExtensionsFilter;
10
+ (function(ExtensionsFilter) {
11
+ ExtensionsFilter["CopilotExtensionVersion"] = "X-Copilot-RelatedPluginVersion-githubcopilot";
12
+ ExtensionsFilter["CopilotChatExtensionVersion"] = "X-Copilot-RelatedPluginVersion-githubcopilotchat";
13
+ ExtensionsFilter["CompletionsVersionInCopilotChat"] = "X-VSCode-CompletionsInChatExtensionVersion";
14
+ ExtensionsFilter["CopilotSku"] = "X-GitHub-Copilot-SKU";
15
+ ExtensionsFilter["MicrosoftInternalOrg"] = "X-Microsoft-Internal-Org";
16
+ ExtensionsFilter["CopilotTrackingId"] = "X-Copilot-CopilotTrackingId";
17
+ ExtensionsFilter["CopilotIsSn"] = "X-GitHub-Copilot-IsSn";
18
+ ExtensionsFilter["CopilotIsFcv1"] = "X-GitHub-Copilot-IsFcv1";
19
+ })(ExtensionsFilter || (ExtensionsFilter = {}));
20
+ var StorageVersionKeys;
21
+ (function(StorageVersionKeys) {
22
+ StorageVersionKeys["CopilotExtensionVersion"] = "extensionsAssignmentFilterProvider.copilotExtensionVersion";
23
+ StorageVersionKeys["CopilotChatExtensionVersion"] = "extensionsAssignmentFilterProvider.copilotChatExtensionVersion";
24
+ StorageVersionKeys["CompletionsVersion"] = "extensionsAssignmentFilterProvider.copilotCompletionsVersion";
25
+ StorageVersionKeys["CopilotSku"] = "extensionsAssignmentFilterProvider.copilotSku";
26
+ StorageVersionKeys["CopilotInternalOrg"] = "extensionsAssignmentFilterProvider.copilotInternalOrg";
27
+ StorageVersionKeys["CopilotTrackingId"] = "extensionsAssignmentFilterProvider.copilotTrackingId";
28
+ StorageVersionKeys["CopilotIsSn"] = "extensionsAssignmentFilterProvider.copilotIsSn";
29
+ StorageVersionKeys["CopilotIsFcv1"] = "extensionsAssignmentFilterProvider.copilotIsFcv1";
30
+ })(StorageVersionKeys || (StorageVersionKeys = {}));
31
+ var GitHubAssignmentsFilter;
32
+ (function(GitHubAssignmentsFilter) {
33
+ GitHubAssignmentsFilter["CopilotTrackingId"] = "copilottrackingid";
34
+ GitHubAssignmentsFilter["IsGhOrMsftStaff"] = "github_core_isghormsftstaff";
35
+ GitHubAssignmentsFilter["GhMsftOrExternal"] = "github_core_ghmsftorexternal";
36
+ })(GitHubAssignmentsFilter || (GitHubAssignmentsFilter = {}));
37
+
38
+ export { ExtensionsFilter, GitHubAssignmentsFilter };
@@ -0,0 +1,83 @@
1
+ import { IInstantiationService } from "@codingame/monaco-vscode-api/vscode/vs/platform/instantiation/common/instantiation";
2
+ import { ITelemetryService } from "@codingame/monaco-vscode-api/vscode/vs/platform/telemetry/common/telemetry.service";
3
+ import { IStorageService } from "@codingame/monaco-vscode-api/vscode/vs/platform/storage/common/storage.service";
4
+ import { ITelemetryData } from "@codingame/monaco-vscode-api/vscode/vs/base/common/actions";
5
+ import { IConfigurationService } from "@codingame/monaco-vscode-api/vscode/vs/platform/configuration/common/configuration.service";
6
+ import { IProductService } from "@codingame/monaco-vscode-api/vscode/vs/platform/product/common/productService.service";
7
+ import { IAssignmentService } from "@codingame/monaco-vscode-api/vscode/vs/platform/assignment/common/assignment";
8
+ import { IWorkbenchEnvironmentService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/services/environment/common/environmentService.service";
9
+ import { IRequestService } from "@codingame/monaco-vscode-api/vscode/vs/platform/request/common/request.service";
10
+ import { IDefaultAccountService } from "@codingame/monaco-vscode-api/vscode/vs/platform/defaultAccount/common/defaultAccount.service";
11
+ import { Disposable } from "@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle";
12
+ import { Event } from "@codingame/monaco-vscode-api/vscode/vs/base/common/event";
13
+ export interface IAssignmentFilter {
14
+ /**
15
+ * Stable identifier for this filter. Used to persist and reconcile the set of
16
+ * assignment-context ids this filter has excluded, independently of other filters.
17
+ */
18
+ readonly id: string;
19
+ exclude(assignment: string): boolean;
20
+ onDidChange: Event<void>;
21
+ }
22
+ /**
23
+ * Resolves a treatment value preferring the `/vscode/`-scoped key emitted by the new TAS
24
+ * assignments endpoint over the bare key used by the legacy endpoint, so the new endpoint wins
25
+ * when both assign a treatment (matching the behavior once tas-client strips the scope itself).
26
+ * Falls back to the bare key for treatments served only by the legacy endpoint.
27
+ *
28
+ * Exported for testing.
29
+ */
30
+ export declare function resolveScopedTreatment<T extends string | number | boolean>(read: (name: string) => T | undefined, name: string): T | undefined;
31
+ /**
32
+ * Builds the telemetry payload for a tas-client feature query. The queried-feature name is marked
33
+ * trusted so the telemetry cleaner does not redact a `/vscode/`-scoped name as a `user-file-path`.
34
+ *
35
+ * Exported for testing.
36
+ */
37
+ export declare function toExperimentTelemetryData(props: Map<string, string>): ITelemetryData;
38
+ export declare class WorkbenchAssignmentService extends Disposable implements IAssignmentService {
39
+ private readonly telemetryService;
40
+ private readonly configurationService;
41
+ private readonly productService;
42
+ private readonly environmentService;
43
+ private readonly instantiationService;
44
+ private readonly defaultAccountService;
45
+ private readonly requestService;
46
+ readonly _serviceBrand: undefined;
47
+ private tasClient;
48
+ private readonly tasSetupDisposables;
49
+ private assignmentsEndpoint;
50
+ private networkInitialized;
51
+ private setupGeneration;
52
+ /** Revokes the current setup's storage/telemetry/fetch wrappers, neutralizing a superseded in-flight client. */
53
+ private revokeCurrentSetup;
54
+ private readonly overrideInitDelay;
55
+ private readonly contextFilter;
56
+ private readonly telemetry;
57
+ private readonly keyValueStorage;
58
+ private readonly experimentsEnabled;
59
+ private readonly _onDidRefetchAssignments;
60
+ readonly onDidRefetchAssignments: Event<void>;
61
+ constructor(telemetryService: ITelemetryService, storageService: IStorageService, configurationService: IConfigurationService, productService: IProductService, environmentService: IWorkbenchEnvironmentService, instantiationService: IInstantiationService, defaultAccountService: IDefaultAccountService, requestService: IRequestService);
62
+ getTreatment<T extends string | number | boolean>(name: string): Promise<T | undefined>;
63
+ private doGetTreatment;
64
+ /**
65
+ * Resolves the new TAS assignments API URL from the account entitlements `exp` endpoint,
66
+ * or `undefined` when no account/endpoint is available.
67
+ */
68
+ private getAssignmentsEndpoint;
69
+ /** Recreates the TAS client when the resolved assignments endpoint has changed. */
70
+ private recreateTasClientIfEndpointChanged;
71
+ /**
72
+ * Transport for the new assignments endpoint, backed by the main-process request service
73
+ * (avoids renderer CORS). Shape matches tas-client's injectable `assignmentsFetch`.
74
+ */
75
+ private readonly assignmentsFetch;
76
+ private setupTASClient;
77
+ private logFetchLatency;
78
+ private refetchAssignments;
79
+ getCurrentExperiments(): Promise<string[] | undefined>;
80
+ addTelemetryAssignmentFilter(filter: IAssignmentFilter): void;
81
+ /** Stops a TAS client's auto-polling once it resolves. Safe to call with `undefined`. */
82
+ private static disposeTasClient;
83
+ }
@@ -0,0 +1,39 @@
1
+
2
+ import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
3
+ import '@codingame/monaco-vscode-api/vscode/vs/platform/instantiation/common/instantiation';
4
+ import '@codingame/monaco-vscode-api/vscode/vs/workbench/common/memento';
5
+ import '@codingame/monaco-vscode-api/vscode/vs/base/common/errors';
6
+ import '@codingame/monaco-vscode-api/vscode/vs/base/common/network';
7
+ import '@codingame/monaco-vscode-api/vscode/vs/base/common/platform';
8
+ import '@codingame/monaco-vscode-api/vscode/vs/base/common/process';
9
+ import '@codingame/monaco-vscode-api/vscode/vs/base/common/uuid';
10
+ import '@codingame/monaco-vscode-api/vscode/vs/platform/telemetry/common/telemetry';
11
+ import '@codingame/monaco-vscode-api/vscode/vs/platform/storage/common/storage';
12
+ import '@codingame/monaco-vscode-api/vscode/vs/platform/instantiation/common/extensions';
13
+ import '@codingame/monaco-vscode-api/vscode/vs/platform/assignment/common/assignment';
14
+ import { Registry } from '@codingame/monaco-vscode-api/vscode/vs/platform/registry/common/platform';
15
+ import { workbenchConfigurationNodeBase } from '@codingame/monaco-vscode-api/vscode/vs/workbench/common/configuration';
16
+ import { Extensions, ConfigurationScope } from '@codingame/monaco-vscode-api/vscode/vs/platform/configuration/common/configurationRegistry';
17
+ import '@codingame/monaco-vscode-api/vscode/vs/platform/request/common/request';
18
+ import '@codingame/monaco-vscode-api/vscode/vs/base/common/cancellation';
19
+ import '@codingame/monaco-vscode-api/vscode/vs/base/common/async';
20
+ import '@codingame/monaco-vscode-api/vscode/vs/base/common/stopwatch';
21
+ import './assignmentFilters.js';
22
+ import './assignmentContextFilter.js';
23
+ import '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
24
+ import '@codingame/monaco-vscode-api/vscode/vs/base/common/event';
25
+
26
+ const registry = ( Registry.as(Extensions.Configuration));
27
+ registry.registerConfiguration({
28
+ ...workbenchConfigurationNodeBase,
29
+ "properties": {
30
+ "workbench.enableExperiments": {
31
+ "type": "boolean",
32
+ "description": ( localize(21675, "Fetches experiments to run from a Microsoft online service.")),
33
+ "default": true,
34
+ "scope": ConfigurationScope.APPLICATION,
35
+ "restricted": true,
36
+ "tags": ["usesOnlineServices"]
37
+ }
38
+ }
39
+ });