


























@@ -458,7 +458,9 @@ export type PluginManifestCapabilityProviderMetadata = {
458458configSignals?: PluginManifestCapabilityProviderConfigSignal[];
459459};
460460461-export type PluginManifestToolMetadata = PluginManifestCapabilityProviderMetadata;
461+export type PluginManifestToolMetadata = PluginManifestCapabilityProviderMetadata & {
462+optional?: boolean;
463+};
462464463465export type PluginManifestProviderAuthChoice = {
464466/** Provider id owned by this manifest entry. */
@@ -715,6 +717,22 @@ function normalizeCapabilityProviderConfigSignals(
715717return signals.length > 0 ? signals : undefined;
716718}
717719720+function normalizeCapabilityProviderMetadataEntry(
721+rawMetadata: Record<string, unknown>,
722+): PluginManifestCapabilityProviderMetadata | undefined {
723+const aliases = normalizeTrimmedStringList(rawMetadata.aliases);
724+const authProviders = normalizeTrimmedStringList(rawMetadata.authProviders);
725+const authSignals = normalizeCapabilityProviderAuthSignals(rawMetadata.authSignals);
726+const configSignals = normalizeCapabilityProviderConfigSignals(rawMetadata.configSignals);
727+const metadata = {
728+ ...(aliases.length > 0 ? { aliases } : {}),
729+ ...(authProviders.length > 0 ? { authProviders } : {}),
730+ ...(authSignals ? { authSignals } : {}),
731+ ...(configSignals ? { configSignals } : {}),
732+} satisfies PluginManifestCapabilityProviderMetadata;
733+return Object.keys(metadata).length > 0 ? metadata : undefined;
734+}
735+718736function normalizeCapabilityProviderMetadata(
719737value: unknown,
720738): Record<string, PluginManifestCapabilityProviderMetadata> | undefined {
@@ -727,18 +745,33 @@ function normalizeCapabilityProviderMetadata(
727745if (!providerId || isBlockedObjectKey(providerId) || !isRecord(rawMetadata)) {
728746continue;
729747}
730-const aliases = normalizeTrimmedStringList(rawMetadata.aliases);
731-const authProviders = normalizeTrimmedStringList(rawMetadata.authProviders);
732-const authSignals = normalizeCapabilityProviderAuthSignals(rawMetadata.authSignals);
733-const configSignals = normalizeCapabilityProviderConfigSignals(rawMetadata.configSignals);
748+const metadata = normalizeCapabilityProviderMetadataEntry(rawMetadata);
749+if (metadata) {
750+normalized[providerId] = metadata;
751+}
752+}
753+return Object.keys(normalized).length > 0 ? normalized : undefined;
754+}
755+756+function normalizePluginToolMetadata(
757+value: unknown,
758+): Record<string, PluginManifestToolMetadata> | undefined {
759+if (!isRecord(value)) {
760+return undefined;
761+}
762+const normalized: Record<string, PluginManifestToolMetadata> = Object.create(null);
763+for (const [rawToolName, rawMetadata] of Object.entries(value)) {
764+const toolName = normalizeOptionalString(rawToolName) ?? "";
765+if (!toolName || isBlockedObjectKey(toolName) || !isRecord(rawMetadata)) {
766+continue;
767+}
768+const providerMetadata = normalizeCapabilityProviderMetadataEntry(rawMetadata);
734769const metadata = {
735- ...(aliases.length > 0 ? { aliases } : {}),
736- ...(authProviders.length > 0 ? { authProviders } : {}),
737- ...(authSignals ? { authSignals } : {}),
738- ...(configSignals ? { configSignals } : {}),
739-} satisfies PluginManifestCapabilityProviderMetadata;
770+ ...providerMetadata,
771+ ...(rawMetadata.optional === true ? { optional: true } : {}),
772+} satisfies PluginManifestToolMetadata;
740773if (Object.keys(metadata).length > 0) {
741-normalized[providerId] = metadata;
774+normalized[toolName] = metadata;
742775}
743776}
744777return Object.keys(normalized).length > 0 ? normalized : undefined;
@@ -1596,7 +1629,7 @@ export function loadPluginManifest(
15961629const musicGenerationProviderMetadata = normalizeCapabilityProviderMetadata(
15971630raw.musicGenerationProviderMetadata,
15981631);
1599-const toolMetadata = normalizeCapabilityProviderMetadata(raw.toolMetadata);
1632+const toolMetadata = normalizePluginToolMetadata(raw.toolMetadata);
16001633const configContracts = normalizeManifestConfigContracts(raw.configContracts);
16011634const channelConfigs = normalizeChannelConfigs(raw.channelConfigs);
16021635此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。