import type { Result } from "@openclaw/normalization-core/result"; import type { SqliteWorkerCommand } from "../infra/sqlite-worker-contract.js"; import type { PluginStateComparisonLimits, PluginStatePreparedComparison, } from "./plugin-state-store.comparison.js"; import type { PluginStateSequencedJournalParams } from "./plugin-state-store.journal.js"; import type { PluginStateRegisterEntryParams } from "./plugin-state-store.kernel.js"; import type { PluginStateKeyRangeParams } from "./plugin-state-store.reads.js"; import type { PluginStateCompareResult, PluginStateEntry, PluginStateObservation, PluginStateStoreErrorCode, PluginStateStoreOperation, } from "./plugin-state-store.types.js"; import type { PluginStateWorkerFailure } from "./plugin-state-worker-errors.js"; type Namespace = { pluginId: string; namespace: string }; type Key = Namespace & { key: string }; type Register = Omit & { maxPluginEntries: number }; export type PluginStateWorkerOperations = { "pluginState.appendJournal": { input: PluginStateSequencedJournalParams; output: Result; }; "pluginState.entriesInKeyRange": { input: PluginStateKeyRangeParams; output: Result[], PluginStateWorkerFailure>; }; "pluginState.observe": { input: Key; output: Result, PluginStateWorkerFailure>; }; "pluginState.compareUpdate": { input: PluginStatePreparedComparison & PluginStateComparisonLimits & { operation: "update" }; output: Result, PluginStateWorkerFailure>; }; "pluginState.compareDelete": { input: PluginStatePreparedComparison & PluginStateComparisonLimits & { operation: "delete" }; output: Result, PluginStateWorkerFailure>; }; "pluginState.register": { input: Register; output: Result }; "pluginState.registerIfAbsent": { input: Register; output: Result; }; "pluginState.deleteIfEqual": { input: Key & { expected: string | number | boolean | null }; output: Result; }; "pluginState.lookup": { input: Key; output: Result }; "pluginState.lookupMany": { input: Namespace & { keys: readonly string[] }; output: Result>, PluginStateWorkerFailure>; }; "pluginState.consume": { input: Key; output: Result }; "pluginState.delete": { input: Key; output: Result }; "pluginState.entries": { input: Namespace; output: Result[], PluginStateWorkerFailure>; }; "pluginState.count": { input: Namespace; output: Result }; "pluginState.clear": { input: Namespace; output: Result }; }; export const pluginStateWorkerOperations = { "pluginState.appendJournal": { operation: "register", code: "PLUGIN_STATE_WRITE_FAILED", message: "Failed to register sequenced plugin state journal entry.", }, "pluginState.entriesInKeyRange": { operation: "entries", code: "PLUGIN_STATE_READ_FAILED", message: "Failed to list plugin state entries by key range.", }, "pluginState.observe": { operation: "lookup", code: "PLUGIN_STATE_READ_FAILED", message: "Failed to observe plugin state entry.", }, "pluginState.compareUpdate": { operation: "register", code: "PLUGIN_STATE_WRITE_FAILED", message: "Failed to update plugin state entry.", }, "pluginState.compareDelete": { operation: "delete", code: "PLUGIN_STATE_WRITE_FAILED", message: "Failed to conditionally delete plugin state entry.", }, "pluginState.register": { operation: "register", code: "PLUGIN_STATE_WRITE_FAILED", message: "Failed to register plugin state entry.", }, "pluginState.registerIfAbsent": { operation: "register", code: "PLUGIN_STATE_WRITE_FAILED", message: "Failed to register plugin state entry.", }, "pluginState.deleteIfEqual": { operation: "delete", code: "PLUGIN_STATE_WRITE_FAILED", message: "Failed to conditionally delete plugin state entry.", }, "pluginState.lookup": { operation: "lookup", code: "PLUGIN_STATE_READ_FAILED", message: "Failed to read plugin state entry.", }, "pluginState.lookupMany": { operation: "lookup", code: "PLUGIN_STATE_READ_FAILED", message: "Failed to read plugin state entries.", }, "pluginState.consume": { operation: "consume", code: "PLUGIN_STATE_READ_FAILED", message: "Failed to consume plugin state entry.", }, "pluginState.delete": { operation: "delete", code: "PLUGIN_STATE_WRITE_FAILED", message: "Failed to delete plugin state entry.", }, "pluginState.entries": { operation: "entries", code: "PLUGIN_STATE_READ_FAILED", message: "Failed to list plugin state entries.", }, "pluginState.count": { operation: "count", code: "PLUGIN_STATE_READ_FAILED", message: "Failed to count plugin state entries.", }, "pluginState.clear": { operation: "clear", code: "PLUGIN_STATE_WRITE_FAILED", message: "Failed to clear plugin state namespace.", }, } as const satisfies Record< keyof PluginStateWorkerOperations, { operation: PluginStateStoreOperation; code: PluginStateStoreErrorCode; message: string; } >; /** Selects the plugin-state branch of the shared actor's typed command union. */ export function isPluginStateWorkerCommand(command: { type: string; input: unknown; }): command is SqliteWorkerCommand { return Object.hasOwn(pluginStateWorkerOperations, command.type); }