方針: 末尾 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 が書かれない |
||
|---|---|---|
| .. | ||
| src | ||
| tests | ||
| Cargo.toml | ||
| README.md | ||
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 内容を取得する組み込みツール(行範囲・配列スライス・キー指定セレクタ対応)