



























@@ -349,6 +349,40 @@ function listManifestToolNamesForAvailability(params: {
349349return listManifestToolNamesForAllowlist(params);
350350}
351351352+function isManifestToolNameAvailable(params: {
353+plugin: PluginManifestRecord;
354+toolName: string;
355+config: PluginLoadOptions["config"];
356+env: NodeJS.ProcessEnv;
357+hasAuthForProvider?: (providerId: string) => boolean;
358+}): boolean {
359+return hasManifestToolAvailability({
360+plugin: params.plugin,
361+toolNames: [params.toolName],
362+config: params.config,
363+env: params.env,
364+hasAuthForProvider: params.hasAuthForProvider,
365+});
366+}
367+368+function filterManifestToolNamesForAvailability(params: {
369+plugin: PluginManifestRecord;
370+toolNames: readonly string[];
371+config: PluginLoadOptions["config"];
372+env: NodeJS.ProcessEnv;
373+hasAuthForProvider?: (providerId: string) => boolean;
374+}): string[] {
375+return params.toolNames.filter((toolName) =>
376+isManifestToolNameAvailable({
377+plugin: params.plugin,
378+ toolName,
379+config: params.config,
380+env: params.env,
381+hasAuthForProvider: params.hasAuthForProvider,
382+}),
383+);
384+}
385+352386function resolvePluginToolRuntimePluginIds(params: {
353387config: PluginLoadOptions["config"];
354388availabilityConfig?: PluginLoadOptions["config"];
@@ -546,21 +580,20 @@ function resolveCachedPluginTools(params: {
546580continue;
547581}
548582const contractToolNames = plugin.contracts?.tools ?? [];
549-const availableToolNames = listManifestToolNamesForAvailability({
583+const allowedToolNames = listManifestToolNamesForAvailability({
550584 plugin,
551585toolNames: contractToolNames,
552586pluginId: plugin.id,
553587allowlist: params.allowlist,
554588});
555-if (
556-!hasManifestToolAvailability({
557- plugin,
558-toolNames: availableToolNames,
559-config: params.availabilityConfig,
560-env: params.env,
561-hasAuthForProvider: params.hasAuthForProvider,
562-})
563-) {
589+const availableToolNames = filterManifestToolNamesForAvailability({
590+ plugin,
591+toolNames: allowedToolNames,
592+config: params.availabilityConfig,
593+env: params.env,
594+hasAuthForProvider: params.hasAuthForProvider,
595+});
596+if (availableToolNames.length === 0) {
564597continue;
565598}
566599if (params.existingNormalized.has(normalizeToolName(plugin.id))) {
@@ -904,10 +937,25 @@ export function resolvePluginTools(params: {
904937blockedPlugins.add(entry.pluginId);
905938continue;
906939}
940+const manifestPlugin = manifestPluginsById.get(entry.pluginId);
907941const declaredNames = entry.names ?? [];
942+const availabilityNames =
943+declaredNames.length > 0 ? declaredNames : (entry.declaredNames ?? []);
944+const allowlistNames = manifestPlugin
945+ ? filterManifestToolNamesForAvailability({
946+plugin: manifestPlugin,
947+toolNames: availabilityNames,
948+config: params.context.runtimeConfig ?? context.config,
949+ env,
950+hasAuthForProvider: params.hasAuthForProvider,
951+})
952+ : declaredNames;
953+if (manifestPlugin && availabilityNames.length > 0 && allowlistNames.length === 0) {
954+continue;
955+}
908956if (
909957!pluginToolNamesMatchAllowlist({
910-names: declaredNames,
958+names: allowlistNames,
911959pluginId: entry.pluginId,
912960optional: entry.optional,
913961 allowlist,
@@ -936,15 +984,26 @@ export function resolvePluginTools(params: {
936984continue;
937985}
938986const listRaw: unknown[] = Array.isArray(resolved) ? resolved : [resolved];
939-const list = entry.optional
987+const availableList = manifestPlugin
940988 ? listRaw.filter((tool) =>
989+isManifestToolNameAvailable({
990+plugin: manifestPlugin,
991+toolName: readPluginToolName(tool),
992+config: params.context.runtimeConfig ?? context.config,
993+ env,
994+hasAuthForProvider: params.hasAuthForProvider,
995+}),
996+)
997+ : listRaw;
998+const list = entry.optional
999+ ? availableList.filter((tool) =>
9411000isOptionalToolAllowed({
9421001toolName: readPluginToolName(tool),
9431002pluginId: entry.pluginId,
9441003 allowlist,
9451004}),
9461005)
947- : listRaw;
1006+ : availableList;
9481007if (list.length === 0) {
9491008continue;
9501009}
@@ -1003,7 +1062,6 @@ export function resolvePluginTools(params: {
10031062pluginId: entry.pluginId,
10041063optional: entry.optional,
10051064});
1006-const manifestPlugin = manifestPluginsById.get(entry.pluginId);
10071065if (manifestPlugin) {
10081066const capturedDescriptors = capturedDescriptorsByPluginId.get(entry.pluginId) ?? [];
10091067capturedDescriptors.push(
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。