






















11// Registers music generation provider runtimes by normalized provider id.
2-import { normalizeProviderId } from "../agents/model-selection.js";
32import type { OpenClawConfig } from "../config/types.js";
4-import { isBlockedObjectKey } from "../infra/prototype-keys.js";
53import { resolvePluginCapabilityProviders } from "../plugins/capability-provider-runtime.js";
4+import {
5+buildCapabilityProviderMaps,
6+normalizeCapabilityProviderId,
7+} from "../plugins/provider-registry-shared.js";
68import type { MusicGenerationProviderPlugin } from "../plugins/types.js";
79810/**
@@ -12,20 +14,6 @@ import type { MusicGenerationProviderPlugin } from "../plugins/types.js";
1214 * rejecting unsafe object keys before they reach Maps or config-derived lookups.
1315 */
1416const BUILTIN_MUSIC_GENERATION_PROVIDERS: readonly MusicGenerationProviderPlugin[] = [];
15-const UNSAFE_PROVIDER_IDS = new Set(["__proto__", "constructor", "prototype"]);
16-17-function normalizeMusicGenerationProviderId(id: string | undefined): string | undefined {
18-const normalized = normalizeProviderId(id ?? "");
19-if (!normalized || isBlockedObjectKey(normalized)) {
20-return undefined;
21-}
22-return normalized;
23-}
24-25-function isSafeMusicGenerationProviderId(id: string | undefined): id is string {
26-// Keep prototype-pollution sentinel names out even after normal provider-id normalization.
27-return Boolean(id && !UNSAFE_PROVIDER_IDS.has(id));
28-}
29173018function resolvePluginMusicGenerationProviders(
3119cfg?: OpenClawConfig,
@@ -40,31 +28,10 @@ function buildProviderMaps(cfg?: OpenClawConfig): {
4028canonical: Map<string, MusicGenerationProviderPlugin>;
4129aliases: Map<string, MusicGenerationProviderPlugin>;
4230} {
43-const canonical = new Map<string, MusicGenerationProviderPlugin>();
44-const aliases = new Map<string, MusicGenerationProviderPlugin>();
45-const register = (provider: MusicGenerationProviderPlugin) => {
46-const id = normalizeMusicGenerationProviderId(provider.id);
47-if (!isSafeMusicGenerationProviderId(id)) {
48-return;
49-}
50-canonical.set(id, provider);
51-aliases.set(id, provider);
52-for (const alias of provider.aliases ?? []) {
53-const normalizedAlias = normalizeMusicGenerationProviderId(alias);
54-if (isSafeMusicGenerationProviderId(normalizedAlias)) {
55-aliases.set(normalizedAlias, provider);
56-}
57-}
58-};
59-60-for (const provider of BUILTIN_MUSIC_GENERATION_PROVIDERS) {
61-register(provider);
62-}
63-for (const provider of resolvePluginMusicGenerationProviders(cfg)) {
64-register(provider);
65-}
66-67-return { canonical, aliases };
31+return buildCapabilityProviderMaps(
32+[...BUILTIN_MUSIC_GENERATION_PROVIDERS, ...resolvePluginMusicGenerationProviders(cfg)],
33+normalizeCapabilityProviderId,
34+);
6835}
69367037/** List canonical music generation providers available for the current config. */
@@ -79,7 +46,7 @@ export function getMusicGenerationProvider(
7946providerId: string | undefined,
8047cfg?: OpenClawConfig,
8148): MusicGenerationProviderPlugin | undefined {
82-const normalized = normalizeMusicGenerationProviderId(providerId);
49+const normalized = normalizeCapabilityProviderId(providerId);
8350if (!normalized) {
8451return undefined;
8552}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。