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 {