/**
 * Shared row <-> domain conversion functions for SQLite store modules.
 *
 * Eliminates duplication across sqlite-data-accessor.ts, task-store.ts,
 * and session-store.ts.
 */
import type { Session, Task } from '@cleocode/contracts';
import type { NewTaskRow, SessionRow, TaskRow } from './tasks-schema.js';
/** Convert a database TaskRow to a domain Task object. */
export declare function rowToTask(row: TaskRow): Task;
/** Convert a domain Task to a database row for insert/upsert.
 *
 * T877 invariant: when a task has a terminal status but no explicit
 * pipelineStage, derive it so the INSERT satisfies the SQLite trigger
 * `trg_tasks_status_pipeline_insert` (status=done requires
 * pipeline_stage IN (contribution, cancelled); status=cancelled requires
 * pipeline_stage=cancelled). This mirrors the runtime behaviour in
 * complete/cancel-ops and means callers never have to think about the
 * invariant — the canonical converter enforces it.
 */
export declare function taskToRow(task: Partial<Task> & {
    id: string;
}): NewTaskRow;
/** Convert a domain Task to a row suitable for archived tasks. */
export declare function archivedTaskToRow(task: Task): NewTaskRow;
/** Convert a SessionRow to a domain Session. */
export declare function rowToSession(row: SessionRow): Session;
//# sourceMappingURL=converters.d.ts.map