import { type WorkspaceFs } from "@oscharko-dev/keiko-workspace";
export interface ContainedJsonArtifactStore<T> {
    readonly record: (runId: string, value: T) => string;
    readonly load: (runId: string) => T | undefined;
    readonly delete: (runId: string) => boolean;
    readonly location: (runId: string) => string;
}
export interface ContainedJsonArtifactStoreOptions<T> {
    readonly fs?: WorkspaceFs;
    readonly randomSuffix?: () => string;
    /** Validates + narrows a parsed JSON value; return `undefined` to reject a corrupt artifact. */
    readonly parse: (value: unknown) => T | undefined;
}
/**
 * Build a node-backed contained JSON artifact store for one `suffix` (e.g. `.candidates.json`).
 * `record` overwrites in place (companions are mutable, unlike the write-once manifest): it writes
 * a fresh atomic temp and renames over any existing file.
 */
export declare function createNodeContainedJsonArtifactStore<T>(evidenceDir: string, suffix: string, options: ContainedJsonArtifactStoreOptions<T>): ContainedJsonArtifactStore<T>;
//# sourceMappingURL=companionStore.d.ts.map