description: "Pure adjacent Session format planning, lossless JSON snapshots, header-only migration, and physical codec dispatch."
English | 中文
dsh-session-format lets persistence code restore a current Session directly or compose a unique sequence of adjacent whole-artifact migrations. It snapshots every durable input and output as detached lossless JSON, validates exact version progress, and keeps header-only listing separate from body reads. Physical framing, compression, immutable generation naming, exclusive publication, and Cordis lifecycle behavior remain outside this pure library.
Use this library from persistence or format-catalog code that must classify a physical Session header, restore current logical values, or compose released adjacent migrations. It is not a Cordis plugin and has no profile mount row. No runtime invariant companion is published because every operation validates its borrowed artifact before returning and retains no cross-call mutable state.
const catalog = createSessionFormatCatalog({ currentVersion, codecs, encodeCurrentArtifact, migrations, restoreCurrent, restoreCurrentHeader })
const descriptor = catalog.readHeader(physicalHeader)
createSessionFormatCatalog() accepts one frozen decoder per supported version, the current format's encoder, one migration per adjacent version pair, and current artifact and header restorers. readHeader() returns a current, migration-required, unsupported, or malformed descriptor without reading events. Each edge validates its target header before the final current-header restorer runs. Body readers call decodeArtifact() or decodeRecoverableArtifact(), then migrate(); writers call encodeCurrent() only with a validated current artifact. Frozen v0/v1 codec exports retain their format-specific packChunks option without adding that historical control to the current writer or common decoder interface.
The recoverable decoder returns the accepted logical prefix. A codec may drop one malformed or sequence-gapped row and its uncommitted suffix, but a later decoded turn/end makes the original issue fatal.
Nothing directly. Consumers reconstruct model history from the validated current artifact through deriveMessages().
Zero direct tokens.
No direct effect. A migration that changes current history can change the cache identity owned by request reconstruction.