mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-08 06:10:42 +00:00
86 lines
2.9 KiB
TypeScript
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);
|
|
}
|