import type { DatabaseAdapter } from "./db.js";
export interface CodexSessionIndexWarning {
    code: "CODEX_SESSION_INDEX_LINE_SKIPPED" | "CODEX_SESSION_INDEX_READ_FAILED";
    message_code: "CODEX_SESSION_INDEX_LINE_SKIPPED" | "CODEX_SESSION_INDEX_READ_FAILED";
    severity: "warning";
    details?: {
        count: number;
    };
}
export interface CodexSessionIndexLine {
    line?: string;
    tooLarge?: true;
}
export interface CodexSessionIndexReader {
    statFile?: (absolutePath: string) => Promise<{
        isFile(): boolean;
    }>;
    readLines?: (absolutePath: string) => AsyncIterable<CodexSessionIndexLine>;
}
export interface CodexSessionIndexReadResult {
    threadNames: Map<string, string>;
    warnings: CodexSessionIndexWarning[];
    complete: boolean;
}
export declare class CodexSessionIndexSyncError extends Error {
    readonly code = "CODEX_SESSION_INDEX_SYNC_FAILED";
    constructor();
}
export declare function normalizeCodexThreadName(value: unknown): string | null;
export declare function readCodexSessionIndex(absolutePath: string, reader?: CodexSessionIndexReader): Promise<CodexSessionIndexReadResult>;
export declare function synchronizeCodexSessionIndex(db: DatabaseAdapter, hmacSalt: string, absolutePath: string, reader?: CodexSessionIndexReader): Promise<{
    updated: number;
    warnings: CodexSessionIndexWarning[];
}>;
