mirror of https://github.com/openclaw/openclaw.git
95 lines
2.9 KiB
TypeScript
95 lines
2.9 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 TaskRegistryHookEvent =
|
|
| {
|
|
kind: "restored";
|
|
tasks: TaskRecord[];
|
|
}
|
|
| {
|
|
kind: "upserted";
|
|
task: TaskRecord;
|
|
previous?: TaskRecord;
|
|
}
|
|
| {
|
|
kind: "deleted";
|
|
taskId: string;
|
|
previous: TaskRecord;
|
|
};
|
|
|
|
export type TaskRegistryHooks = {
|
|
// Hooks are incremental/observational. Snapshot persistence belongs to TaskRegistryStore.
|
|
onEvent?: (event: TaskRegistryHookEvent) => 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 configuredTaskRegistryHooks: TaskRegistryHooks | null = null;
|
|
|
|
export function getTaskRegistryStore(): TaskRegistryStore {
|
|
return configuredTaskRegistryStore;
|
|
}
|
|
|
|
export function getTaskRegistryHooks(): TaskRegistryHooks | null {
|
|
return configuredTaskRegistryHooks;
|
|
}
|
|
|
|
export function configureTaskRegistryRuntime(params: {
|
|
store?: TaskRegistryStore;
|
|
hooks?: TaskRegistryHooks | null;
|
|
}) {
|
|
if (params.store) {
|
|
configuredTaskRegistryStore = params.store;
|
|
}
|
|
if ("hooks" in params) {
|
|
configuredTaskRegistryHooks = params.hooks ?? null;
|
|
}
|
|
}
|
|
|
|
export function resetTaskRegistryRuntimeForTests() {
|
|
configuredTaskRegistryStore.close?.();
|
|
configuredTaskRegistryStore = defaultTaskRegistryStore;
|
|
configuredTaskRegistryHooks = null;
|
|
}
|