
























@@ -1,6 +1,7 @@
11import path from "node:path";
22import { resolveAgentWorkspaceDir, resolveDefaultAgentId } from "../agents/agent-scope.js";
33import { CHANNEL_IDS, normalizeChatChannelId } from "../channels/ids.js";
4+import { listChannelPluginCatalogEntries } from "../channels/plugins/catalog.js";
45import { isPathInside } from "../infra/path-guards.js";
56import { planManifestModelCatalogSuppressions } from "../model-catalog/index.js";
67import { withBundledPluginAllowlistCompat } from "../plugins/bundled-compat.js";
@@ -1041,6 +1042,16 @@ function validateConfigObjectWithPluginsBase(
10411042].toSorted((left, right) => left.localeCompare(right));
10421043};
104310441045+const findInstallableChannelCatalogEntry = (channelId: string) => {
1046+const normalizedChannelId = normalizeLowercaseStringOrEmpty(channelId);
1047+if (!normalizedChannelId) {
1048+return undefined;
1049+}
1050+return listChannelPluginCatalogEntries({ env: opts.env, excludeWorkspace: true }).find(
1051+(entry) => normalizeLowercaseStringOrEmpty(entry.id) === normalizedChannelId,
1052+);
1053+};
1054+10441055const collectKnownWebSearchProviderIds = (): string[] => {
10451056return [
10461057 ...new Set([
@@ -1102,7 +1113,7 @@ function validateConfigObjectWithPluginsBase(
11021113(entry) => entry.provider.id === trimmed,
11031114);
11041115if (installCatalogEntry) {
1105-issues.push({
1116+warnings.push({
11061117 path,
11071118message: `web_search provider is not available: ${trimmed} (install or enable plugin "${installCatalogEntry.pluginId}", then run openclaw doctor --fix)`,
11081119allowedValues: collectKnownWebSearchProviderIds(),
@@ -1249,7 +1260,14 @@ function validateConfigObjectWithPluginsBase(
12491260path: `channels.${trimmed}`,
12501261message: `unknown channel id: ${trimmed}`,
12511262};
1252-if (hasStalePluginEvidenceForUnknownChannel(trimmed)) {
1263+const installCatalogEntry = findInstallableChannelCatalogEntry(trimmed);
1264+if (installCatalogEntry) {
1265+const pluginId = installCatalogEntry.pluginId ?? installCatalogEntry.id;
1266+warnings.push({
1267+path: issue.path,
1268+message: `channel plugin is not available: ${trimmed} (install or enable plugin "${pluginId}", then run openclaw doctor --fix)`,
1269+});
1270+} else if (hasStalePluginEvidenceForUnknownChannel(trimmed)) {
12531271warnings.push({
12541272 ...issue,
12551273message: `${issue.message} (stale channel plugin config ignored; run openclaw doctor --fix to remove stale config, or install the plugin)`,
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。