Files
openclaw/src/plugins/plugin-control-plane-context.ts
Peter Steinberger 98e3f729bc refactor: remove dead plugin loader exports (#105937)
* refactor(plugins): trim activation and contract exports

* test(plugins): restore fixture cleanup

* refactor(plugins): trim install and loader exports

* test(plugins): fully reset loader caches

* refactor(plugins): trim metadata and catalog exports

* test(plugins): preserve catalog trust coverage

* refactor(plugins): trim provider and plugin exports

* refactor(plugins): trim runtime and tool exports

* test(plugins): update dead-export consumers

* test(plugins): remove empty dead-export suites

* refactor(plugins): align exports with split registry

* refactor(plugins): trim drifted loader exports

* style(plugins): format test fixtures

* refactor(scripts): use supported plugin APIs

* refactor(plugins): finish dead export cleanup

* chore(deadcode): refresh export baseline

* test(cli): mock production memory state

* chore(deadcode): sync latest export baseline

* fix(tests): keep plugin fixtures inside core

* chore(deadcode): refresh rebased export baseline

* chore(deadcode): sync current ratchets

* fix(plugins): retain reserved slot invariant

* fix(plugins): preserve dead-export invariants

* test(plugins): use neutral catalog query fixture

* test(plugins): satisfy catalog lint

* test(plugins): preserve integrity drift coverage

* fix(ci): register skill experience live proof
2026-07-13 01:29:33 -07:00

88 lines
3.4 KiB
TypeScript

/** Tracks control-plane plugin metadata context during registry and status operations. */
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";
/** Discovery inputs that affect plugin source resolution. */
type PluginDiscoveryContext = {
roots: PluginSourceRoots;
loadPaths: readonly string[];
};
/** Control-plane fingerprint inputs that affect installed plugin activation. */
type PluginControlPlaneContext = {
discovery: PluginDiscoveryContext;
policyFingerprint: string;
inventoryFingerprint?: string;
activationFingerprint?: string;
};
/** Parameters used to resolve plugin discovery roots and load paths. */
type ResolvePluginDiscoveryContextParams = {
config?: OpenClawConfig;
env?: NodeJS.ProcessEnv;
workspaceDir?: string;
loadPaths?: readonly string[];
};
/** Parameters used to resolve the plugin control-plane fingerprint. */
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;
}
/** Resolves plugin discovery roots and load paths for cache/fingerprint callers. */
export function resolvePluginDiscoveryContext(
params: ResolvePluginDiscoveryContextParams = {},
): PluginDiscoveryContext {
return resolvePluginCacheInputs({
env: params.env ?? process.env,
workspaceDir: params.workspaceDir,
loadPaths: [...(params.loadPaths ?? resolveConfiguredPluginLoadPaths(params.config) ?? [])],
});
}
/** Hashes an already resolved plugin discovery context. */
export function fingerprintPluginDiscoveryContext(context: PluginDiscoveryContext): string {
return hashJson(context);
}
/** Resolves all inputs that determine plugin control-plane activation state. */
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 }
: {}),
};
}
/** Resolves a stable fingerprint for plugin control-plane activation state. */
export function resolvePluginControlPlaneFingerprint(
params: ResolvePluginControlPlaneContextParams = {},
): string {
return fingerprintPluginControlPlaneContext(resolvePluginControlPlaneContext(params));
}
function fingerprintPluginControlPlaneContext(context: PluginControlPlaneContext): string {
return hashJson(context);
}