import type { CanonSession } from './canonPull.js';
/** Where an archived session's bytes live: git blob ids in the store (part order), plus the events sidecar. */
export interface ArchivedSessionRef {
store: string;
/** Repo path of the logical session under archive/ (e.g. archive/2026-08/canon/claude-code/
/.jsonl). */
path: string;
blobs: string[];
sidecarBlob?: string;
/** False when any of the session's blobs is not in the local object store (partial clone) — never fetched here. */
local: boolean;
}
/** Sizes of the blobs present locally (missing ones absent from the map) — one batch call, no fetch. */
export declare function localBlobSizes(store: string, shas: string[]): Map;
/**
* Archived canonical sessions (HEAD `archive//canon/…`) whose logical path is NOT live — a live copy
* always wins. A session archived in more than one month bucket resolves to the newest bucket. Same grouping and
* uuid rules as discoverCanonSessions (parts-aware, events sidecars excluded, empty mains skipped).
*/
export declare function discoverArchivedCanonSessions(store: string, live: Iterable, opts?: {
home?: string;
}): CanonSession[];
/** Stream a session's JSONL lines — disk parts for a live session, git blobs for an archived one. */
export declare function sessionLines(s: CanonSession): AsyncGenerator;
/** Stream the events sidecar's lines (nothing when the session has none). */
export declare function sidecarLines(s: CanonSession): AsyncGenerator;
//# sourceMappingURL=canonArchiveRead.d.ts.map