From 6bef8deda9902563b8521ebd4aee11007d11ecf5 Mon Sep 17 00:00:00 2001 From: Vincent Koc Date: Tue, 24 Mar 2026 11:09:34 -0700 Subject: [PATCH] refactor(plugins): make command registry lazy --- src/plugins/command-registry-state.ts | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/plugins/command-registry-state.ts b/src/plugins/command-registry-state.ts index 386b23cd37e..068497e18f9 100644 --- a/src/plugins/command-registry-state.ts +++ b/src/plugins/command-registry-state.ts @@ -14,19 +14,27 @@ type PluginCommandState = { const PLUGIN_COMMAND_STATE_KEY = Symbol.for("openclaw.pluginCommandsState"); -const state = resolveGlobalSingleton(PLUGIN_COMMAND_STATE_KEY, () => ({ - pluginCommands: new Map(), - registryLocked: false, -})); +const getState = () => + resolveGlobalSingleton(PLUGIN_COMMAND_STATE_KEY, () => ({ + pluginCommands: new Map(), + registryLocked: false, + })); -export const pluginCommands = state.pluginCommands; +const getPluginCommandMap = () => getState().pluginCommands; + +export const pluginCommands = new Proxy(new Map(), { + get(_target, property) { + const value = Reflect.get(getPluginCommandMap(), property, getPluginCommandMap()); + return typeof value === "function" ? value.bind(getPluginCommandMap()) : value; + }, +}) as Map; export function isPluginCommandRegistryLocked(): boolean { - return state.registryLocked; + return getState().registryLocked; } export function setPluginCommandRegistryLocked(locked: boolean): void { - state.registryLocked = locked; + getState().registryLocked = locked; } export function clearPluginCommands(): void {