




























@@ -13,11 +13,19 @@ import type {
1313PluginManifestRegistry,
1414} from "./manifest-registry.js";
1515import type { PluginOrigin } from "./plugin-origin.types.js";
16+import {
17+createPluginRegistryIdNormalizer,
18+type PluginRegistryIdNormalizerOptions,
19+} from "./plugin-registry-id-normalizer.js";
1620import {
1721loadPluginRegistrySnapshot,
1822type LoadPluginRegistryParams,
1923type PluginRegistrySnapshot,
2024} from "./plugin-registry-snapshot.js";
25+export {
26+createPluginRegistryIdNormalizer,
27+type PluginRegistryIdNormalizerOptions,
28+} from "./plugin-registry-id-normalizer.js";
21292230export type PluginLookUpTable = {
2331index: PluginRegistrySnapshot;
@@ -101,23 +109,10 @@ export type ResolveManifestContractPluginIdsByCompatibilityRuntimePathParams =
101109origin?: PluginOrigin;
102110};
103111104-export type PluginRegistryIdNormalizerOptions = {
105-manifestRegistry?: PluginManifestRegistry;
106-lookUpTable?: Pick<PluginLookUpTable, "manifestRegistry">;
107-};
108-109112function normalizeContributionId(value: string): string {
110113return value.trim();
111114}
112115113-function normalizePluginRegistryAlias(value: string): string {
114-return value.trim();
115-}
116-117-function normalizePluginRegistryAliasKey(value: string): string {
118-return normalizePluginRegistryAlias(value).toLowerCase();
119-}
120-121116function sortUnique(values: Iterable<string>): string[] {
122117return [...new Set([...values].map((value) => value.trim()).filter(Boolean))].toSorted(
123118(left, right) => left.localeCompare(right),
@@ -298,54 +293,6 @@ export function loadPluginManifestRegistryForPluginRegistry(
298293});
299294}
300295301-export function createPluginRegistryIdNormalizer(
302-index: PluginRegistrySnapshot,
303-options: PluginRegistryIdNormalizerOptions = {},
304-): (pluginId: string) => string {
305-const aliases = new Map<string, string>();
306-for (const plugin of index.plugins) {
307-const pluginId = normalizePluginRegistryAlias(plugin.pluginId);
308-if (pluginId) {
309-aliases.set(normalizePluginRegistryAliasKey(pluginId), plugin.pluginId);
310-}
311-}
312-const registry =
313-options.lookUpTable?.manifestRegistry ??
314-options.manifestRegistry ??
315-loadPluginManifestRegistryForInstalledIndex({
316- index,
317-includeDisabled: true,
318-});
319-for (const plugin of [...registry.plugins].toSorted((left, right) =>
320-left.id.localeCompare(right.id),
321-)) {
322-const pluginId = normalizePluginRegistryAlias(plugin.id);
323-if (!pluginId) {
324-continue;
325-}
326-aliases.set(normalizePluginRegistryAliasKey(pluginId), plugin.id);
327-for (const alias of [
328-plugin.id,
329- ...listManifestContributionIds(plugin, "providers"),
330- ...listManifestContributionIds(plugin, "channels"),
331- ...listManifestContributionIds(plugin, "setupProviders"),
332- ...listManifestContributionIds(plugin, "cliBackends"),
333- ...listManifestContributionIds(plugin, "modelCatalogProviders"),
334- ...(plugin.legacyPluginIds ?? []),
335-]) {
336-const normalizedAlias = normalizePluginRegistryAlias(alias);
337-const normalizedAliasKey = normalizePluginRegistryAliasKey(alias);
338-if (normalizedAlias && !aliases.has(normalizedAliasKey)) {
339-aliases.set(normalizedAliasKey, pluginId);
340-}
341-}
342-}
343-return (pluginId: string) => {
344-const trimmed = normalizePluginRegistryAlias(pluginId);
345-return aliases.get(normalizePluginRegistryAliasKey(trimmed)) ?? trimmed;
346-};
347-}
348-349296export function normalizePluginsConfigWithRegistry(
350297config: OpenClawConfig["plugins"] | undefined,
351298index: PluginRegistrySnapshot,
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。