Files
deepseek-harness/website/zh-CN/api/harness/session-persistence.md
2026-07-19 14:14:02 +08:00

5.2 KiB

ctx.sessionPersistence

SessionPersistence (abstract seam) — provided by @deepseek-ai/dsh-session-persistence.

Durable append-only session storage. Implementations preserve contiguous, losslessly JSON-serializable events; append resolves only after durability, and load balances a complete interrupted tail without rewriting committed events.

Source

ctx.sessionPersistence.locate(meta)

/**
 * Resolve this backend's independent local artifact for a session without
 * reading, creating, flushing, or otherwise materializing it. Backends such
 * as SQLite that do not own one artifact per session return `undefined`.
 * @param meta - the immutable session header whose artifact is requested.
 * @returns the backend-specific absolute location, when one exists.
 */
abstract locate(meta: SessionHeader): SessionLocation | undefined

Resolve this backend's independent local artifact for a session without reading, creating, flushing, or otherwise materializing it. Backends such as SQLite that do not own one artifact per session return undefined.

  • meta — the immutable session header whose artifact is requested.

Returns the backend-specific absolute location, when one exists.

Source

ctx.sessionPersistence.create(meta)

/**
 * Register a new session's metadata. A backend MAY defer the physical write
 * until the first {@link append} (lazy materialization), in which case a
 * created-but-never-appended session is absent from {@link list}
 * — abandoned sessions leave nothing behind.
 * @param meta - the immutable header (id, version, cwd, lineage) to record.
 */
abstract create(meta: SessionHeader): Promise<void>

Register a new session's metadata. A backend MAY defer the physical write until the first append (lazy materialization), in which case a created-but-never-appended session is absent from list — abandoned sessions leave nothing behind.

  • meta — the immutable header (id, version, cwd, lineage) to record.

Source

ctx.sessionPersistence.append(id, events)

/**
 * Durably persist a batch of events (called from the write-behind drain at
 * the `session/flush` checkpoint). Honors the append-only and contiguous-seq
 * contracts: the first event's `seq` MUST equal the stored next-seq (after
 * `load` has durably closed any interrupted turn). Rejects non-JSON-
 * serializable `event.data` with an error naming the offending event type.
 * @param id - the session the batch belongs to.
 * @param events - the contiguous batch to persist, in seq order.
 */
abstract append(id: SessionId, events: readonly SessionEvent[]): Promise<void>

Durably persist a batch of events (called from the write-behind drain at the session/flush checkpoint). Honors the append-only and contiguous-seq contracts: the first event's seq MUST equal the stored next-seq (after load has durably closed any interrupted turn). Rejects non-JSON- serializable event.data with an error naming the offending event type.

  • id — the session the batch belongs to.
  • events — the contiguous batch to persist, in seq order.

Source

ctx.sessionPersistence.load(id)

/**
 * Load a header and balanced contiguous log. A complete interrupted final
 * turn is preserved and durably closed with missing tool errors plus any open
 * step and turn boundaries; only a torn final record is discarded. Unknown
 * versions and corruption in the committed prefix reject.
 * @param id - the persisted session to reload.
 * @returns the header and a log ending on a balanced `turn/end`.
 */
abstract load(id: SessionId): Promise<{ meta: SessionHeader; events: SessionEvent[] }>

Load a header and balanced contiguous log. A complete interrupted final turn is preserved and durably closed with missing tool errors plus any open step and turn boundaries; only a torn final record is discarded. Unknown versions and corruption in the committed prefix reject.

  • id — the persisted session to reload.

Returns the header and a log ending on a balanced turn/end.

Source

ctx.sessionPersistence.list()

/**
 * Lightweight listing from metadata, without a full-log parse.
 * @returns one header per materialized session.
 */
abstract list(): Promise<SessionHeader[]>

Lightweight listing from metadata, without a full-log parse.

Returns one header per materialized session.

Source