




















@@ -11,6 +11,8 @@ import { normalizeOptionalLowercaseString } from "../shared/string-coerce.js";
1111import { hasExplicitChannelConfig } from "./channel-presence-policy.js";
1212import { resolveEffectivePluginActivationState } from "./config-state.js";
1313import type { InstalledPluginIndexRecord } from "./installed-plugin-index.js";
14+import { loadPluginManifestRegistryForInstalledIndex } from "./manifest-registry-installed.js";
15+import type { PluginManifestRegistry } from "./manifest-registry.js";
1416import {
1517createPluginRegistryIdNormalizer,
1618loadPluginRegistrySnapshot,
@@ -93,13 +95,21 @@ function shouldConsiderForGatewayStartup(params: {
93959496function hasConfiguredStartupChannel(params: {
9597plugin: InstalledPluginIndexRecord;
98+manifestRegistry: PluginManifestRegistry;
9699configuredChannelIds: ReadonlySet<string>;
97100}): boolean {
98-return params.plugin.contributions.channels.some((channelId) =>
101+return listManifestChannelIds(params.manifestRegistry, params.plugin.pluginId).some((channelId) =>
99102params.configuredChannelIds.has(channelId),
100103);
101104}
102105106+function listManifestChannelIds(
107+manifestRegistry: PluginManifestRegistry,
108+pluginId: string,
109+): readonly string[] {
110+return manifestRegistry.plugins.find((plugin) => plugin.id === pluginId)?.channels ?? [];
111+}
112+103113function canStartConfiguredChannelPlugin(params: {
104114plugin: InstalledPluginIndexRecord;
105115config: OpenClawConfig;
@@ -108,6 +118,7 @@ function canStartConfiguredChannelPlugin(params: {
108118plugins: ReturnType<typeof normalizePluginsConfigWithRegistry>;
109119rootConfig?: OpenClawConfig;
110120};
121+manifestRegistry: PluginManifestRegistry;
111122}): boolean {
112123if (!params.pluginsConfig.enabled) {
113124return false;
@@ -120,7 +131,7 @@ function canStartConfiguredChannelPlugin(params: {
120131}
121132const explicitBundledChannelConfig =
122133params.plugin.origin === "bundled" &&
123-params.plugin.contributions.channels.some((channelId) =>
134+listManifestChannelIds(params.manifestRegistry, params.plugin.pluginId).some((channelId) =>
124135hasExplicitChannelConfig({
125136config: params.activationSource.rootConfig ?? params.config,
126137 channelId,
@@ -157,9 +168,16 @@ export function resolveChannelPluginIds(params: {
157168workspaceDir: params.workspaceDir,
158169env: params.env,
159170});
160-return index.plugins
161-.filter((plugin) => plugin.contributions.channels.length > 0)
162-.map((plugin) => plugin.pluginId);
171+const manifestRegistry = loadPluginManifestRegistryForInstalledIndex({
172+ index,
173+config: params.config,
174+workspaceDir: params.workspaceDir,
175+env: params.env,
176+includeDisabled: true,
177+});
178+return manifestRegistry.plugins
179+.filter((plugin) => plugin.channels.length > 0)
180+.map((plugin) => plugin.id);
163181}
164182165183export function resolveConfiguredDeferredChannelPluginIds(params: {
@@ -177,20 +195,28 @@ export function resolveConfiguredDeferredChannelPluginIds(params: {
177195env: params.env,
178196});
179197const pluginsConfig = normalizePluginsConfigWithRegistry(params.config.plugins, index);
198+const manifestRegistry = loadPluginManifestRegistryForInstalledIndex({
199+ index,
200+config: params.config,
201+workspaceDir: params.workspaceDir,
202+env: params.env,
203+includeDisabled: true,
204+});
180205const activationSource = {
181206plugins: pluginsConfig,
182207rootConfig: params.config,
183208};
184209return index.plugins
185210.filter(
186211(plugin) =>
187-hasConfiguredStartupChannel({ plugin, configuredChannelIds }) &&
212+hasConfiguredStartupChannel({ plugin, manifestRegistry, configuredChannelIds }) &&
188213plugin.startup.deferConfiguredChannelFullLoadUntilAfterListen &&
189214canStartConfiguredChannelPlugin({
190215 plugin,
191216config: params.config,
192217 pluginsConfig,
193218 activationSource,
219+ manifestRegistry,
194220}),
195221)
196222.map((plugin) => plugin.pluginId);
@@ -209,6 +235,13 @@ export function resolveGatewayStartupPluginIds(params: {
209235env: params.env,
210236});
211237const pluginsConfig = normalizePluginsConfigWithRegistry(params.config.plugins, index);
238+const manifestRegistry = loadPluginManifestRegistryForInstalledIndex({
239+ index,
240+config: params.config,
241+workspaceDir: params.workspaceDir,
242+env: params.env,
243+includeDisabled: true,
244+});
212245// Startup must classify allowlist exceptions against the raw config snapshot,
213246// not the auto-enabled effective snapshot, or configured-only channels can be
214247// misclassified as explicit enablement.
@@ -227,12 +260,13 @@ export function resolveGatewayStartupPluginIds(params: {
227260);
228261return index.plugins
229262.filter((plugin) => {
230-if (hasConfiguredStartupChannel({ plugin, configuredChannelIds })) {
263+if (hasConfiguredStartupChannel({ plugin, manifestRegistry, configuredChannelIds })) {
231264return canStartConfiguredChannelPlugin({
232265 plugin,
233266config: params.config,
234267 pluginsConfig,
235268 activationSource,
269+ manifestRegistry,
236270});
237271}
238272if (
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。