/** * DiskArchiveBackend — reference filesystem-backed {@link ArchiveBackend}. * * Convention #8 (atomic writes): every file lands via write-tmp-rename; the * final `archive.json` marker is written LAST so a crash mid-bundle leaves * the directory visible but UN-marked, and `restore` treats such a bundle * as missing. This mirrors the Phase 5 materializer's "marker-last" * invariant. * * Layout: * * {rootDir}/archive/{arc_}/ * subsession.json # Identity + metadata * summary.json # SessionSummaryRef (optional — present iff input.summaryRef) * messages.jsonl # One SessionMessage per line (append-style, serialized once) * workspace.json # WorkspaceRef (optional — present iff input.workspace) * archive.json # Marker — final write; presence = bundle committed * * Workspace directory contents are NOT archived — we persist the * {@link WorkspaceRef} only. The pattern doc §12.3 explicitly allows this: * the ref is the re-hydration handle; the worktree itself is disposed at * archive time via the caller's {@link WorkspaceBackendDriver}, not copied * into the archive bundle. This is a Phase 8 interpretation — see the * roadmap deliverable report for rationale (tar bundling deferred). * * See session-hierarchy.md §12.3. */ import type { ArchiveBackendRef } from '../../types/retention/archive-backend-ref.js'; import type { ArchiveBackend, ArchiveInput, ArchiveOutput } from './backend.js'; /** * Raised when {@link DiskArchiveBackend.restore} cannot resolve the supplied * ref — either the directory is missing, or the `archive.json` marker is * absent (crash-mid-write signal). */ export declare class ArchiveNotFoundError extends Error { readonly details: { archiveRef: ArchiveBackendRef; reason: 'missing' | 'incomplete'; }; constructor(details: { archiveRef: ArchiveBackendRef; reason: 'missing' | 'incomplete'; }); } /** * Config for {@link DiskArchiveBackend}. `rootDir` is absolute — bundles land * under `{rootDir}/archive/`. */ export interface DiskArchiveBackendConfig { readonly rootDir: string; } export declare class DiskArchiveBackend implements ArchiveBackend { readonly kind = "disk"; private readonly rootDir; constructor(config: DiskArchiveBackendConfig); store(input: ArchiveInput): Promise; restore(archiveRef: ArchiveBackendRef): Promise; } //# sourceMappingURL=disk-backend.d.ts.map