























@@ -1,17 +1,33 @@
11import type { OpenClawConfig } from "../../config/types.openclaw.js";
2-import { planManifestModelCatalogRows } from "../../model-catalog/index.js";
2+import {
3+normalizeModelCatalogProviderId,
4+planManifestModelCatalogRows,
5+} from "../../model-catalog/index.js";
36import type { NormalizedModelCatalogRow } from "../../model-catalog/index.js";
4-import { loadPluginManifestRegistry } from "../../plugins/manifest-registry.js";
7+import { loadPluginManifestRegistryForInstalledIndex } from "../../plugins/manifest-registry-installed.js";
8+import {
9+getPluginRecord,
10+isPluginEnabled,
11+loadPluginRegistrySnapshot,
12+resolvePluginContributionOwners,
13+type PluginRegistrySnapshot,
14+} from "../../plugins/plugin-registry.js";
5156-export function loadStaticManifestCatalogRowsForList(params: {
16+function loadStaticManifestCatalogRowsForPluginIds(params: {
717cfg: OpenClawConfig;
8-providerFilter: string;
918env?: NodeJS.ProcessEnv;
19+index: PluginRegistrySnapshot;
20+pluginIds: readonly string[];
21+providerFilter: string;
1022}): readonly NormalizedModelCatalogRow[] {
11-const registry = loadPluginManifestRegistry({
23+if (params.pluginIds.length === 0) {
24+return [];
25+}
26+const registry = loadPluginManifestRegistryForInstalledIndex({
27+index: params.index,
1228config: params.cfg,
1329env: params.env,
14-cache: true,
30+pluginIds: params.pluginIds,
1531});
1632const plan = planManifestModelCatalogRows({
1733 registry,
@@ -25,3 +41,78 @@ export function loadStaticManifestCatalogRowsForList(params: {
2541}
2642return plan.rows.filter((row) => staticProviders.has(row.provider));
2743}
44+45+function resolveConventionModelCatalogPluginIds(params: {
46+cfg: OpenClawConfig;
47+index: PluginRegistrySnapshot;
48+providerFilter: string;
49+}): readonly string[] {
50+const record = getPluginRecord({
51+index: params.index,
52+pluginId: params.providerFilter,
53+});
54+if (
55+!record ||
56+!isPluginEnabled({
57+index: params.index,
58+pluginId: record.pluginId,
59+config: params.cfg,
60+})
61+) {
62+return [];
63+}
64+return [record.pluginId];
65+}
66+67+function resolveDeclaredModelCatalogPluginIds(params: {
68+cfg: OpenClawConfig;
69+index: PluginRegistrySnapshot;
70+providerFilter: string;
71+}): readonly string[] {
72+return resolvePluginContributionOwners({
73+index: params.index,
74+config: params.cfg,
75+contribution: "modelCatalogProviders",
76+matches: params.providerFilter,
77+});
78+}
79+80+export function loadStaticManifestCatalogRowsForList(params: {
81+cfg: OpenClawConfig;
82+providerFilter: string;
83+env?: NodeJS.ProcessEnv;
84+}): readonly NormalizedModelCatalogRow[] {
85+const providerFilter = normalizeModelCatalogProviderId(params.providerFilter);
86+if (!providerFilter) {
87+return [];
88+}
89+const index = loadPluginRegistrySnapshot({
90+config: params.cfg,
91+env: params.env,
92+});
93+const conventionRows = loadStaticManifestCatalogRowsForPluginIds({
94+cfg: params.cfg,
95+env: params.env,
96+ index,
97+pluginIds: resolveConventionModelCatalogPluginIds({
98+cfg: params.cfg,
99+ index,
100+ providerFilter,
101+}),
102+ providerFilter,
103+});
104+if (conventionRows.length > 0) {
105+return conventionRows;
106+}
107+return loadStaticManifestCatalogRowsForPluginIds({
108+cfg: params.cfg,
109+env: params.env,
110+ index,
111+pluginIds: resolveDeclaredModelCatalogPluginIds({
112+cfg: params.cfg,
113+ index,
114+ providerFilter,
115+}),
116+ providerFilter,
117+});
118+}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。