会话快照与分支
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 到之前的快照 |
| 保留关键节点 | 在重要决策前创建快照 |
| 对比结果 | 多个分支各自执行,比较产出 |
相关文档
- Session 管理 →
session-management.md - Actor 边界 →
actor-boundary.md - Run 生命周期 →
run-lifecycle.md