Files
moltbot/src/plugins/plugin-control-plane-context.ts
2026-05-02 07:04:54 +01:00

86 lines
2.9 KiB
TypeScript

import type { OpenClawConfig } from "../config/types.openclaw.js";
import { hashJson } from "./installed-plugin-index-hash.js";
import { resolveInstalledPluginIndexPolicyHash } from "./installed-plugin-index-policy.js";
import type { InstalledPluginIndex } from "./installed-plugin-index.js";
import { resolveInstalledManifestRegistryIndexFingerprint } from "./manifest-registry-installed.js";
import { resolvePluginCacheInputs, type PluginSourceRoots } from "./roots.js";
export type PluginDiscoveryContext = {
roots: PluginSourceRoots;
loadPaths: readonly string[];
};
export type PluginControlPlaneContext = {
discovery: PluginDiscoveryContext;
policyFingerprint: string;
inventoryFingerprint?: string;
activationFingerprint?: string;
};
export type ResolvePluginDiscoveryContextParams = {
config?: OpenClawConfig;
env?: NodeJS.ProcessEnv;
workspaceDir?: string;
loadPaths?: readonly string[];
};
export type ResolvePluginControlPlaneContextParams = ResolvePluginDiscoveryContextParams & {
activationFingerprint?: string;
index?: InstalledPluginIndex;
inventoryFingerprint?: string;
policyHash?: string;
};
function resolveConfiguredPluginLoadPaths(
config: OpenClawConfig | undefined,
): readonly string[] | undefined {
const paths = config?.plugins?.load?.paths;
return Array.isArray(paths) ? paths : undefined;
}
export function resolvePluginDiscoveryContext(
params: ResolvePluginDiscoveryContextParams = {},
): PluginDiscoveryContext {
return resolvePluginCacheInputs({
env: params.env ?? process.env,
workspaceDir: params.workspaceDir,
loadPaths: [...(params.loadPaths ?? resolveConfiguredPluginLoadPaths(params.config) ?? [])],
});
}
export function resolvePluginDiscoveryFingerprint(
params: ResolvePluginDiscoveryContextParams = {},
): string {
return fingerprintPluginDiscoveryContext(resolvePluginDiscoveryContext(params));
}
export function fingerprintPluginDiscoveryContext(context: PluginDiscoveryContext): string {
return hashJson(context);
}
export function resolvePluginControlPlaneContext(
params: ResolvePluginControlPlaneContextParams = {},
): PluginControlPlaneContext {
const inventoryFingerprint =
params.inventoryFingerprint ??
(params.index ? resolveInstalledManifestRegistryIndexFingerprint(params.index) : undefined);
return {
discovery: resolvePluginDiscoveryContext(params),
policyFingerprint: params.policyHash ?? resolveInstalledPluginIndexPolicyHash(params.config),
...(inventoryFingerprint ? { inventoryFingerprint } : {}),
...(params.activationFingerprint
? { activationFingerprint: params.activationFingerprint }
: {}),
};
}
export function resolvePluginControlPlaneFingerprint(
params: ResolvePluginControlPlaneContextParams = {},
): string {
return fingerprintPluginControlPlaneContext(resolvePluginControlPlaneContext(params));
}
function fingerprintPluginControlPlaneContext(context: PluginControlPlaneContext): string {
return hashJson(context);
}