Files
deepseek-harness/website/zh-CN/api/harness/session-persistence.md
T
lintianle 2cde2a9032 Merge origin/master into feat/website-docs
Conflict resolution notes:
- package.json/run-gates: both sides' new doc-sync gates kept (master's
  scoped-events/readme gates + this branch's website-api/website-yaml);
  js-yaml devDeps deduped (master added them independently).
- pnpm-workspace/knip: website AND python/sdk-runtime entries kept.
- doc-typecheck/verify-type-equiv: master's condensed headers kept, website
  glob retained in both scan scopes.
- vendor/cordis/src/fiber.ts: master's lifecycle-hardening code taken; this
  branch's richer FiberState JSDoc reapplied on top. vendor/README.md logs
  both local modifications (hardening = 6, JSDoc enrichment = 7).
- pnpm-lock: regenerated from master's side (pnpm install).

Post-merge sync the gates forced (the system working as designed):
- verify-website-yaml caught 4 stale plugin names from master's package
  reorg (dsh-stdio-agent -> dsh-stdio-demo, dsh-acp-agent -> dsh-acp-demo);
  8 references fixed across guide/ and develop/.
- gen-website-api picked up master's 6 new services automatically
  (ctx.approval/permission/sandbox/sessionQuery/skills/tasks -> 6 new pages
  + sidebar); api/index.md hub updated to list them.
- AGENTS.md budget ceiling 1370 -> 1400: the website rows (layout line + two
  command lines) and master's own growth collided with the old ceiling; all
  three website rows are load-bearing (new top-level dir, new CI command).
2026-07-16 21:36:43 +08:00

2.9 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.create(meta)

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)

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)

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()

abstract list(): Promise<SessionHeader[]>

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

Returns one header per materialized session.

Source