1
>
/*---------------------------------------------------------------------------------------------
agentPluginServiceImpl.ts
2
>
* Copyright (c) Microsoft Corporation. All rights reserved.
3
>
* Licensed under the MIT License. See License.txt in the project root for license information.
4
>
*--------------------------------------------------------------------------------------------*/
5
>
6
>
import { RunOnceScheduler } from '../../../../../base/common/async.js';
7
>
import { Event } from '../../../../../base/common/event.js';
8
>
import { Iterable } from '../../../../../base/common/iterator.js';
9
>
import { parse as parseJSONC } from '../../../../../base/common/json.js';
10
>
import { untildify } from '../../../../../base/common/labels.js';
11
>
import { Disposable, DisposableStore } from '../../../../../base/common/lifecycle.js';
12
>
import { equals } from '../../../../../base/common/objects.js';
13
>
import { autorun, derived, derivedOpts, IObservable, IReader, ISettableObservable, ITransaction, observableFromEvent, ObservablePromise, observableSignal, observableValue, transaction } from '../../../../../base/common/observable.js';
14
>
import {
15
>
posix,
16
>
win32
17
>
} from '../../../../../base/common/path.js';
18
>
import {
19
>
basename, isEqual, isEqualOrParent, joinPath
20
>
} from '../../../../../base/common/resources.js';
21
>
import { hasKey } from '../../../../../base/common/types.js';
22
>
import { URI } from '../../../../../base/common/uri.js';
23
>
import { ICommandService } from '../../../../../platform/commands/common/commands.js';
24
>
import { ConfigurationTarget, getConfigValueInTarget, IConfigurationService } from '../../../../../platform/configuration/common/configuration.js';
25
>
import { IFileService } from '../../../../../platform/files/common/files.js';
26
>
import { IInstantiationService } from '../../../../../platform/instantiation/common/instantiation.js';
27
>
import { ContextKeyExpr, ContextKeyExpression, IContextKeyService } from '../../../../../platform/contextkey/common/contextkey.js';
28
>
import { ILogService } from '../../../../../platform/log/common/log.js';
29
>
import { observableConfigValue } from '../../../../../platform/observable/common/platformObservableUtils.js';
30
>
import { IStorageService } from '../../../../../platform/storage/common/storage.js';
31
>
import { IWorkspaceContextService } from '../../../../../platform/workspace/common/workspace.js';
32
>
import { localize } from '../../../../../nls.js';
33
>
import { IDialogService } from '../../../../../platform/dialogs/common/dialogs.js';
34
>
import { ExtensionIdentifier, IExtensionManifest } from '../../../../../platform/extensions/common/extensions.js';
35
>
import { SyncDescriptor } from '../../../../../platform/instantiation/common/descriptors.js';
36
>
import { Registry } from '../../../../../platform/registry/common/platform.js';
37
>
import {
38
>
resolvePluginComponentDirs,
39
>
getPluginManifestComponent,
40
>
readPluginSkills,
41
>
readMarkdownComponents,
42
>
readPluginManifest,
43
>
readPluginMcpServers,
44
>
parseMcpServerDefinitionMap,
45
>
detectPluginFormat,
46
>
type PluginComponent,
47
>
type IPluginFormatConfig,
48
>
type IParsedHookGroup,
49
>
} from '../../../../../platform/agentPlugins/common/pluginParsers.js';
50
>
import { Extensions, IExtensionFeaturesRegistry, IExtensionFeatureTableRenderer, IRenderedData, IRowData, ITableData } from '../../../../services/extensionManagement/common/extensionFeatures.js';
51
>
import * as extensionsRegistry from '../../../../services/extensions/common/extensionsRegistry.js';
52
>
import { IPathService } from '../../../../services/path/common/pathService.js';
53
>
import { ChatConfiguration } from '../constants.js';
54
>
import { ContributionEnablementState, EnablementModel, IEnablementModel } from '../enablement.js';
55
>
import { HookType } from '../promptSyntax/hookTypes.js';
56
>
import { AgentPluginCollisionEnablementModel, getAgentPluginPolicyId, getCanonicalAgentPluginCollisionGroups, getSortedAgentPlugins, IDiscoveredAgentPlugins, isAgentPluginBlockedByPolicy } from './agentPluginEnablement.js';
57
>
import { IAgentPluginRepositoryService } from './agentPluginRepositoryService.js';
58
>
import { AgentPluginDiscoveryPriority, agentPluginDiscoveryRegistry, IAgentPlugin, IAgentPluginDiscovery, IAgentPluginHook, IAgentPluginInstruction, IAgentPluginService } from './agentPluginService.js';
59
>
import { IMarketplacePlugin, IPluginMarketplaceService } from './pluginMarketplaceService.js';
60
>
61
>
// Re-export shared helpers so existing consumers (including tests) continue to work.
62
>
export { shellQuotePluginRootInCommand, resolveMcpServersMap, convertBareEnvVarsToVsCodeSyntax } from '../../../../../platform/agentPlugins/common/pluginParsers.js';
63
>
64
>
/**
65
>
* Converts platform-layer parsed hook groups to the workbench's {@link IAgentPluginHook} type.
66
>
* The canonical type strings from the platform layer map directly to {@link HookType} enum values.
67
>
*/
68
function toAgentPluginHooks(groups: readonly IParsedHookGroup[]): IAgentPluginHook[] {
69
return groups