UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

116 lines (115 loc) • 6.16 kB
import { n as getPluginRuntimeLoadContextState, t as bindPluginRuntimeLoadContextState } from "./load-context-state-Dj3BDflJ.mjs"; import { t as createSubsystemLogger } from "./subsystem-BlrgtxyM.mjs"; import { n as isDeeplyFrozenPlainData } from "./immutable-data-MyNs7ITg.mjs"; import { l as normalizePluginsConfig } from "./config-state-1t-kMQI9.mjs"; import { n as hashStableJson } from "./installed-plugin-index-hash-BCqTz5pR.mjs"; import { t as resolvePluginControlPlaneFingerprint } from "./plugin-control-plane-context-BhsvNWYe.mjs"; import { t as buildDeclaredProviderOwnerIndex } from "./provider-owner-index-DC0jvNkI.mjs"; import "./logging-DHIsSt2S.mjs"; import { createHash } from "node:crypto"; //#region src/plugins/loader-registration-config.ts /** Configuration consumed during registration, independent of activation and load scope. */ function resolvePluginRegistrationConfigKey(params) { const { runtimeEntries, sourceEntries } = params; const inputs = [.../* @__PURE__ */ new Set([...Object.keys(runtimeEntries), ...Object.keys(sourceEntries)])].toSorted().flatMap((pluginId) => { const { enabled: _enabled, ...runtime } = runtimeEntries[pluginId] ?? {}; const sourceConfig = sourceEntries[pluginId]?.config; const registration = { ...runtime, sourceConfig }; return Object.values(registration).some((value) => value !== void 0) ? [[pluginId, registration]] : []; }); return createHash("sha256").update(JSON.stringify(inputs)).digest("hex"); } //#endregion //#region src/plugins/runtime/load-context.ts const log = createSubsystemLogger("plugins"); const immutableActivationValueHashes = /* @__PURE__ */ new WeakMap(); function activationValueFingerprint(value) { const immutable = value !== null && typeof value === "object" && isDeeplyFrozenPlainData(value); const cached = immutable ? immutableActivationValueHashes.get(value) : void 0; if (cached !== void 0) return cached; const fingerprint = hashStableJson(value); if (immutable) immutableActivationValueHashes.set(value, fingerprint); return fingerprint; } function activationConfigFingerprint(config) { return hashStableJson(Object.fromEntries(Object.entries(config).map(([key, value]) => [key, activationValueFingerprint(value)]))); } function activationInputFingerprint(config, env) { return hashStableJson({ config: activationConfigFingerprint(config), env }); } function activationResultFingerprint(context) { return hashStableJson({ config: activationConfigFingerprint(context.config), activationSourceConfig: activationConfigFingerprint(context.activationSourceConfig), autoEnabledReasons: context.autoEnabledReasons, env: context.env }); } function setPluginRuntimeLoadContext(registry, context, registrationConfigKey, loaderCacheIdentity) { const previous = getPluginRuntimeLoadContextState(registry); const capturedIdentity = previous?.loaderCacheIdentity ?? loaderCacheIdentity; const bound = { ...context, activationInputFingerprint: activationInputFingerprint(context.rawConfig, context.env), activationResultFingerprint: activationResultFingerprint(context), ...capturedIdentity ? { loaderCacheIdentity: capturedIdentity } : {}, registrationConfigKey: previous?.registrationConfigKey ?? registrationConfigKey ?? resolvePluginRegistrationConfigKey({ runtimeEntries: normalizePluginsConfig(context.config.plugins).entries, sourceEntries: normalizePluginsConfig(context.activationSourceConfig.plugins).entries }), declaredProviderOwners: context.metadataSnapshot && context.metadataSnapshot.manifestRegistry === context.manifestRegistry ? context.metadataSnapshot.declaredProviderOwners : buildDeclaredProviderOwnerIndex(context.manifestRegistry?.plugins ?? []), controlPlaneFingerprint: resolvePluginControlPlaneFingerprint({ config: context.rawConfig, env: context.env, workspaceDir: context.workspaceDir }) }; bindPluginRuntimeLoadContextState(registry, bound); } /** Reads load facts carried by an exact lifecycle-owned registry. */ const getPluginRuntimeLoadContext = (registry) => getPluginRuntimeLoadContextState(registry); /** Reuses activation decisions only within the exact metadata generation and unchanged inputs. */ function getReusablePluginRuntimeActivation(registry, params) { const context = getPluginRuntimeLoadContext(registry); if (!context || context.metadataSnapshot !== params.metadataSnapshot || context.workspaceDir !== params.workspaceDir || context.activationResultFingerprint !== activationResultFingerprint(context)) return; const inputFingerprint = activationInputFingerprint(params.config, params.env); if (inputFingerprint !== context.activationInputFingerprint && inputFingerprint !== activationInputFingerprint(context.config, context.env) && inputFingerprint !== activationInputFingerprint(context.activationSourceConfig, context.env)) return; return { config: context.config, activationSourceConfig: context.activationSourceConfig, autoEnabledReasons: context.autoEnabledReasons }; } /** Creates the default plugin runtime loader logger. */ function createPluginRuntimeLoaderLogger() { return { info: (message) => log.info(message), warn: (message) => log.warn(message), error: (message) => log.error(message), debug: (message) => log.debug(message) }; } /** Projects explicit runtime load fields from prepared contexts or resolved values. */ function buildPluginRuntimeLoadOptions(values, overrides) { return { config: values.config, activationSourceConfig: values.activationSourceConfig, autoEnabledReasons: values.autoEnabledReasons, workspaceDir: values.workspaceDir, env: values.env, logger: values.logger, manifestRegistry: values.manifestRegistry, installRecords: values.installRecords, preferBuiltPluginArtifacts: values.preferBuiltPluginArtifacts, expectedSourceDigests: values.expectedSourceDigests, ...overrides }; } //#endregion export { getReusablePluginRuntimeActivation as a, getPluginRuntimeLoadContext as i, buildPluginRuntimeLoadOptions as n, setPluginRuntimeLoadContext as o, createPluginRuntimeLoaderLogger as r, resolvePluginRegistrationConfigKey as s, activationConfigFingerprint as t };