Files
openclaw/src/plugins/installed-plugin-index-registry.ts
Peter Steinberger ed8f50f240 refactor: simplify plugin dependency handling
Simplify plugin installation and runtime loading around package-manager-owned dependencies, with Jiti reserved for local/TS fallback paths.

Also scans npm plugin install roots so hoisted transitive dependencies are covered by dependency denylist and node_modules symlink checks.
2026-05-01 21:32:22 +01:00

46 lines
1.6 KiB
TypeScript

import { normalizePluginsConfig } from "./config-state.js";
import { discoverOpenClawPlugins, type PluginCandidate } from "./discovery.js";
import { loadInstalledPluginIndexInstallRecordsSync } from "./installed-plugin-index-record-reader.js";
import type { LoadInstalledPluginIndexParams } from "./installed-plugin-index-types.js";
import { loadPluginManifestRegistry, type PluginManifestRegistry } from "./manifest-registry.js";
export function resolveInstalledPluginIndexRegistry(params: LoadInstalledPluginIndexParams): {
registry: PluginManifestRegistry;
candidates: readonly PluginCandidate[];
} {
if (params.candidates) {
return {
candidates: params.candidates,
registry: loadPluginManifestRegistry({
config: params.config,
workspaceDir: params.workspaceDir,
env: params.env,
candidates: params.candidates,
diagnostics: params.diagnostics,
installRecords: params.installRecords,
}),
};
}
const normalized = normalizePluginsConfig(params.config?.plugins);
const installRecords =
params.installRecords ?? loadInstalledPluginIndexInstallRecordsSync({ env: params.env });
const discovery = discoverOpenClawPlugins({
workspaceDir: params.workspaceDir,
extraPaths: normalized.loadPaths,
env: params.env,
installRecords,
});
return {
candidates: discovery.candidates,
registry: loadPluginManifestRegistry({
config: params.config,
workspaceDir: params.workspaceDir,
env: params.env,
candidates: discovery.candidates,
diagnostics: discovery.diagnostics,
installRecords,
}),
};
}