会话快照与分支

wesgine 支持对会话创建快照(Checkpoint)和从快照分支(Branch),实现对话的时间旅行和平行探索。


快照(Checkpoint)

创建快照

POST /cells/{id}/sessions/{sid}/checkpoints

在当前会话位置创建一个快照点,保存完整的对话历史。

列出快照

GET /cells/{id}/sessions/{sid}/checkpoints

回滚

POST /cells/{id}/sessions/{sid}/checkpoints/{cpid}/restore

将会话恢复到快照时的状态,后续消息被丢弃。

删除快照

DELETE /cells/{id}/sessions/{sid}/checkpoints/{cpid}

分支(Branch)

从快照分支

POST /cells/{id}/sessions/{sid}/checkpoints/{cpid}/fork

从快照点创建一个新分支,保留原会话不变。

列出分支

GET /cells/{id}/sessions/{sid}/branches

删除分支

DELETE /cells/{id}/sessions/{sid}/branches/{bid}

Actor 边界(INV-SESS-03)

行身份

checkpoint / branch 的行由 (session_id, id) 决定:

WHERE id = ? AND session_id = ?

仅 WHERE id = ? → 跨 actor 读整段对话。

跨 session 操作

DELETE /sessions/我的/checkpoints/受害者的

会通过一个回答正确的门("这个会话是你的"),然后删掉别人的行。

所以 SQL 和方法签名都必须带 session。

删除与读取的差异

操作不属于你
Restore / Fork硬失败(ErrCheckpointNotInSession → 404)
Delete幂等成功(不给存在性预言机)

区分"不存在"与"存在但不是你的"= 存在性预言机。


使用场景

场景操作
探索不同方案创建快照 → Fork → 分别尝试
撤销错误操作Restore 到之前的快照
保留关键节点在重要决策前创建快照
对比结果多个分支各自执行,比较产出

相关文档