yoi/crates/session-store
Hare a9340a8817 feat: live auto-fork の marker 形式を確定(seq 比較 + forked_from 記録)
方針: 末尾 entry-count 比較で検知し、元 Segment は immutable のまま
(terminal marker を書き戻さない)。fork lineage は新 Segment の
SegmentStart.forked_from に前向きに記録するため、log だけから辿れる。
過去 fork と対称で、nested fork も marker 位置の調停が不要。

- session-store ensure_head_or_fork に at_turn_index 引数を追加し
  新 Segment へ forked_from を記録
- pod ensure_segment_head の auto-fork も同様に forked_from を記録
  (at_turn_index = writer の現 turn_count)
- fork_at の doc に「元 Segment を mutate しない」invariant を明記
- test: nested past-fork が祖先を不変に保つ / Pod 並行 writer drift で
  auto-fork し forked_from を記録 / 元 Segment に marker が書かれない
2026-05-20 06:42:09 +09:00
..
src feat: live auto-fork の marker 形式を確定(seq 比較 + forked_from 記録) 2026-05-20 06:42:09 +09:00
tests feat: live auto-fork の marker 形式を確定(seq 比較 + forked_from 記録) 2026-05-20 06:42:09 +09:00
Cargo.toml update: entry hash chain と session_head mutex を撤廃 2026-05-20 04:31:37 +09:00
README.md session-storeとして分離 2026-04-12 06:31:34 +09:00

llm-worker-persistence

Worker のセッション永続化を提供するクレート。追記専用の JSONL ログとして状態遷移を記録し、ログの再生によってセッションを完全に復元する。大きなツール出力は Blob ストアに分離保存する。

公開型

セッション

  • Session<C, St> — Worker をラップした永続化セッション(run(), resume(), fork(), fork_at()
  • SessionId — UUID v7 によるセッション識別子
  • SessionConfig — 永続化設定(イベントトレース記録の有無)

ストア

  • Store トレイト — 永続化バックエンド抽象(append, read_all, list_sessions
  • FsStore — ファイルシステム上の JSONL ストア実装
  • BlobStore トレイト — Blob ストレージ抽象(store, load
  • FsBlobStore — ファイルシステム上の Blob ストア実装
  • BlobOutputProcessor — ToolOutputProcessor 実装(小さい出力はインライン、大きい出力は Blob 保存)

ログ

  • LogEntry — セッションログのエントリ型(SessionStart, UserInput, AssistantItems, TurnEnd など)
  • RestoredState — ログ再生で復元された状態
  • collect_state() — ログエントリ列から状態を復元する関数

ツール

  • InspectTool — Blob 内容を取得する組み込みツール(行範囲・配列スライス・キー指定セレクタ対応)