import type { StoreAdapter, StoreOps } from "./store.js"; export interface EngineOverAdapterOptions { /** What `insertIfAbsent` and `compareAndSwap` do when the adapter's door omits * the OPTIONAL `RecordStore.atomic` capability (02-store ยง4). * * `degrade` (the default) falls back to the check-then-put each caller used * to hand-roll, so moving a block onto this family never turns a working BYO * adapter into a `not-implemented`. * * `require` refuses instead. For the caller whose atomics carry a security * meaning โ€” a guard's single-use approval transition, where a read-then-write * is not single-use โ€” failing closed here is the same answer the hosted wire * gives, and a degraded write would be a silently weaker one. */ atomics?: "degrade" | "require"; } /** The `engine` family over a bare {@link StoreAdapter}. * * Every block that owns Vendo drawers (automations, guard, apps) reads them * through `ops.engine.*`, but `selectStoreOps` answers `undefined` for a store * with neither its own ops surface nor a SQL handle โ€” and a host constructing a * block DIRECTLY passes only a `StoreAdapter`. This is that store's engine * family: the allowlist gate in front, the adapter's own record door behind. * It lives in core because none of those blocks may import `@vendoai/vendo/store`. * * `records()` is called per verb and never cached: an adapter is free to mint a * fresh handle each time, and fixtures that wrap one to inject a failure depend * on it. */ export declare function engineOverAdapter(store: StoreAdapter, options?: EngineOverAdapterOptions): StoreOps["engine"];