mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-07 23:31:07 +00:00
95 lines
3.0 KiB
TypeScript
95 lines
3.0 KiB
TypeScript
import {
|
|
closeTaskRegistrySqliteStore,
|
|
deleteTaskAndDeliveryStateFromSqlite,
|
|
deleteTaskDeliveryStateFromSqlite,
|
|
deleteTaskRegistryRecordFromSqlite,
|
|
loadTaskRegistryStateFromSqlite,
|
|
saveTaskRegistryStateToSqlite,
|
|
upsertTaskWithDeliveryStateToSqlite,
|
|
upsertTaskDeliveryStateToSqlite,
|
|
upsertTaskRegistryRecordToSqlite,
|
|
} from "./task-registry.store.sqlite.js";
|
|
import type { TaskDeliveryState, TaskRecord } from "./task-registry.types.js";
|
|
|
|
export type TaskRegistryStoreSnapshot = {
|
|
tasks: Map<string, TaskRecord>;
|
|
deliveryStates: Map<string, TaskDeliveryState>;
|
|
};
|
|
|
|
export type TaskRegistryStore = {
|
|
loadSnapshot: () => TaskRegistryStoreSnapshot;
|
|
saveSnapshot: (snapshot: TaskRegistryStoreSnapshot) => void;
|
|
upsertTaskWithDeliveryState?: (params: {
|
|
task: TaskRecord;
|
|
deliveryState?: TaskDeliveryState;
|
|
}) => void;
|
|
upsertTask?: (task: TaskRecord) => void;
|
|
deleteTaskWithDeliveryState?: (taskId: string) => void;
|
|
deleteTask?: (taskId: string) => void;
|
|
upsertDeliveryState?: (state: TaskDeliveryState) => void;
|
|
deleteDeliveryState?: (taskId: string) => void;
|
|
close?: () => void;
|
|
};
|
|
|
|
export type TaskRegistryObserverEvent =
|
|
| {
|
|
kind: "restored";
|
|
tasks: TaskRecord[];
|
|
}
|
|
| {
|
|
kind: "upserted";
|
|
task: TaskRecord;
|
|
previous?: TaskRecord;
|
|
}
|
|
| {
|
|
kind: "deleted";
|
|
taskId: string;
|
|
previous: TaskRecord;
|
|
};
|
|
|
|
export type TaskRegistryObservers = {
|
|
// Observers are incremental/best-effort only. Snapshot persistence belongs to TaskRegistryStore.
|
|
onEvent?: (event: TaskRegistryObserverEvent) => void;
|
|
};
|
|
|
|
const defaultTaskRegistryStore: TaskRegistryStore = {
|
|
loadSnapshot: loadTaskRegistryStateFromSqlite,
|
|
saveSnapshot: saveTaskRegistryStateToSqlite,
|
|
upsertTaskWithDeliveryState: upsertTaskWithDeliveryStateToSqlite,
|
|
upsertTask: upsertTaskRegistryRecordToSqlite,
|
|
deleteTaskWithDeliveryState: deleteTaskAndDeliveryStateFromSqlite,
|
|
deleteTask: deleteTaskRegistryRecordFromSqlite,
|
|
upsertDeliveryState: upsertTaskDeliveryStateToSqlite,
|
|
deleteDeliveryState: deleteTaskDeliveryStateFromSqlite,
|
|
close: closeTaskRegistrySqliteStore,
|
|
};
|
|
|
|
let configuredTaskRegistryStore: TaskRegistryStore = defaultTaskRegistryStore;
|
|
let configuredTaskRegistryObservers: TaskRegistryObservers | null = null;
|
|
|
|
export function getTaskRegistryStore(): TaskRegistryStore {
|
|
return configuredTaskRegistryStore;
|
|
}
|
|
|
|
export function getTaskRegistryObservers(): TaskRegistryObservers | null {
|
|
return configuredTaskRegistryObservers;
|
|
}
|
|
|
|
export function configureTaskRegistryRuntime(params: {
|
|
store?: TaskRegistryStore;
|
|
observers?: TaskRegistryObservers | null;
|
|
}) {
|
|
if (params.store) {
|
|
configuredTaskRegistryStore = params.store;
|
|
}
|
|
if ("observers" in params) {
|
|
configuredTaskRegistryObservers = params.observers ?? null;
|
|
}
|
|
}
|
|
|
|
export function resetTaskRegistryRuntimeForTests() {
|
|
configuredTaskRegistryStore.close?.();
|
|
configuredTaskRegistryStore = defaultTaskRegistryStore;
|
|
configuredTaskRegistryObservers = null;
|
|
}
|