openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
101 lines (100 loc) • 3.69 kB
JavaScript
import { t as createLazyImportLoader } from "./lazy-promise-BONnzNfb.js";
import { r as copyProviderCatalogResultProjection } from "./registry-CYsBNH12.js";
import { o as normalizeProviderId } from "./model-selection-normalize-roKDxQ9_.js";
import "./model-selection-CA_65iXi.js";
import "./manifest-contribution-ids-SDxxvWhJ.js";
//#region src/plugins/provider-discovery.ts
const DISCOVERY_ORDER = [
"simple",
"profile",
"paired",
"late"
];
const DANGEROUS_PROVIDER_KEYS = new Set([
"__proto__",
"prototype",
"constructor"
]);
const providerRuntimeLoader = createLazyImportLoader(() => import("./plugins/provider-discovery.runtime.js"));
function loadProviderRuntime() {
return providerRuntimeLoader.load();
}
function resolveProviderCatalogHook(provider) {
return provider.catalog ?? provider.discovery;
}
function resolveProviderCatalogOrderHook(provider) {
return resolveProviderCatalogHook(provider) ?? provider.staticCatalog;
}
function createProviderConfigRecord() {
return Object.create(null);
}
function isSafeProviderConfigKey(value) {
return value !== "" && !DANGEROUS_PROVIDER_KEYS.has(value);
}
/** Loads provider runtime discovery and filters to providers that can produce catalog order entries. */
async function resolveRuntimePluginDiscoveryProviders(params) {
return (await loadProviderRuntime()).resolvePluginDiscoveryProvidersRuntime(params).filter((provider) => resolveProviderCatalogOrderHook(provider));
}
/** Groups plugin providers into stable discovery phases for catalog probing. */
function groupPluginDiscoveryProvidersByOrder(providers) {
const grouped = {
simple: [],
profile: [],
paired: [],
late: []
};
for (const provider of providers) grouped[resolveProviderCatalogOrderHook(provider)?.order ?? "late"].push(provider);
for (const order of DISCOVERY_ORDER) grouped[order].sort((a, b) => a.label.localeCompare(b.label));
return grouped;
}
/** Normalizes a plugin discovery response into safe provider-config keys. */
function normalizePluginDiscoveryResult(params) {
const result = params.result;
if (!result) return {};
const projection = copyProviderCatalogResultProjection(result);
if (projection.kind === "provider") {
const normalized = createProviderConfigRecord();
for (const providerId of [
params.provider.id,
...params.provider.aliases ?? [],
...params.provider.hookAliases ?? []
]) {
const normalizedKey = normalizeProviderId(providerId);
if (!isSafeProviderConfigKey(normalizedKey)) continue;
normalized[normalizedKey] = projection.provider;
}
return normalized;
}
const normalized = createProviderConfigRecord();
if (projection.kind !== "providers") return normalized;
for (const [key, value] of projection.providers) {
const normalizedKey = normalizeProviderId(key);
if (!isSafeProviderConfigKey(normalizedKey) || !value) continue;
normalized[normalizedKey] = value;
}
return normalized;
}
function runProviderCatalog(params) {
return resolveProviderCatalogHook(params.provider)?.run({
config: params.config,
agentDir: params.agentDir,
workspaceDir: params.workspaceDir,
env: params.env,
resolveProviderApiKey: params.resolveProviderApiKey,
resolveProviderAuth: params.resolveProviderAuth
});
}
function runProviderStaticCatalog(params) {
return params.provider.staticCatalog?.run({
config: {},
env: {},
resolveProviderApiKey: () => ({ apiKey: void 0 }),
resolveProviderAuth: () => ({
apiKey: void 0,
mode: "none",
source: "none"
})
});
}
//#endregion
export { runProviderStaticCatalog as a, runProviderCatalog as i, normalizePluginDiscoveryResult as n, resolveRuntimePluginDiscoveryProviders as r, groupPluginDiscoveryProvidersByOrder as t };