From 3ceba442b77d51364f77e16064221dd00003fdcc Mon Sep 17 00:00:00 2001 From: Vincent Koc Date: Mon, 13 Apr 2026 17:21:12 +0100 Subject: [PATCH] perf(plugins): isolate manifest registry cache state --- src/plugins/manifest-registry-state.ts | 10 ++++++++++ src/plugins/manifest-registry.ts | 13 +++++++++---- test/setup-openclaw-runtime.ts | 2 +- 3 files changed, 20 insertions(+), 5 deletions(-) create mode 100644 src/plugins/manifest-registry-state.ts diff --git a/src/plugins/manifest-registry-state.ts b/src/plugins/manifest-registry-state.ts new file mode 100644 index 00000000000..3cb9115a5a7 --- /dev/null +++ b/src/plugins/manifest-registry-state.ts @@ -0,0 +1,10 @@ +export type PluginManifestRegistryCacheEntry = { + expiresAt: number; + registry: unknown; +}; + +export const pluginManifestRegistryCache = new Map(); + +export function clearPluginManifestRegistryCache(): void { + pluginManifestRegistryCache.clear(); +} diff --git a/src/plugins/manifest-registry.ts b/src/plugins/manifest-registry.ts index 8f84f0c0961..e46aa114154 100644 --- a/src/plugins/manifest-registry.ts +++ b/src/plugins/manifest-registry.ts @@ -15,6 +15,10 @@ import { } from "./config-policy.js"; import { discoverOpenClawPlugins, type PluginCandidate } from "./discovery.js"; import type { PluginManifestCommandAlias } from "./manifest-command-aliases.js"; +import { + clearPluginManifestRegistryCache, + pluginManifestRegistryCache, +} from "./manifest-registry-state.js"; import type { PluginBundleFormat, PluginConfigUiHint, @@ -117,14 +121,15 @@ export type PluginManifestRegistry = { diagnostics: PluginDiagnostic[]; }; -const registryCache = new Map(); +const registryCache = pluginManifestRegistryCache as Map< + string, + { expiresAt: number; registry: PluginManifestRegistry } +>; // Keep a short cache window to collapse bursty reloads during startup flows. const DEFAULT_MANIFEST_CACHE_MS = 1000; -export function clearPluginManifestRegistryCache(): void { - registryCache.clear(); -} +export { clearPluginManifestRegistryCache } from "./manifest-registry-state.js"; function listContractValues( plugin: PluginManifestRecord, diff --git a/test/setup-openclaw-runtime.ts b/test/setup-openclaw-runtime.ts index 5a402359af7..6a39c39d0d8 100644 --- a/test/setup-openclaw-runtime.ts +++ b/test/setup-openclaw-runtime.ts @@ -16,7 +16,7 @@ import { drainSessionStoreLockQueuesForTest } from "../src/config/sessions/store import { drainFileLockStateForTest, resetFileLockStateForTest } from "../src/infra/file-lock.js"; import type { OutboundSendDeps } from "../src/infra/outbound/deliver.js"; import { clearPluginDiscoveryCache } from "../src/plugins/discovery.js"; -import { clearPluginManifestRegistryCache } from "../src/plugins/manifest-registry.js"; +import { clearPluginManifestRegistryCache } from "../src/plugins/manifest-registry-state.js"; import type { PluginRegistry } from "../src/plugins/registry.js"; import { resetPluginRuntimeStateForTest, setActivePluginRegistry } from "../src/plugins/runtime.js"; import { installSharedTestSetup } from "./setup.shared.js";