会话快照与分支
wesgine 会话的 Checkpoint(快照)与 Branch(分支)管理:时间旅行与对话分叉。
Checkpoint API
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /sessions/{sid}/checkpoints | 快照列表 |
| POST | /sessions/{sid}/checkpoints | 创建快照 |
| POST | /sessions/{sid}/checkpoints/{cpid}/restore | 回滚到快照 |
| POST | /sessions/{sid}/checkpoints/{cpid}/fork | 从快照分叉 |
| DELETE | /sessions/{sid}/checkpoints/{cpid} | 删除快照 |
Branch API
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /sessions/{sid}/branches | 分支列表 |
| DELETE | /sessions/{sid}/branches/{bid} | 删除分支 |
Restore(回滚)
回滚到指定快照,恢复该时间点的对话历史。
POST /sessions/{sid}/checkpoints/{cpid}/restore
回滚成功返回整段对话历史。
Fork(分叉)
从指定快照创建新分支,不影响原会话。
POST /sessions/{sid}/checkpoints/{cpid}/fork
分叉后新分支拥有独立的对话历史副本。
Actor 边界(INV-SESS-03)
Checkpoint / Branch 的行身份是 (session_id, id):
- SQL 必须同时带
session_id和id - 否则
DELETE /sessions/我的/checkpoints/受害者的会通过归属门然后删掉别人的行
跨 session 行为
| 操作 | 跨 session |
|---|---|
| Restore | 硬失败 ErrCheckpointNotInSession → 404 |
| Fork | 硬失败 |
| Delete | 幂等成功(区分存在性 = 预言机) |
Boot 自动恢复(INV-CKPT-04)
Cell boot 时自动执行:
MarkInterruptedSessions()— 标记中断会话ListOrphanedRuns()→MarkRunTerminated()— 清理孤儿 Run
消费方无需在 PostBoot 调用 MarkInterrupted。
典型使用场景
| 场景 | 操作 |
|---|---|
| 尝试不同方案 | 创建快照 → 尝试 A → 不满意 → 回滚 → 尝试 B |
| 保留重要节点 | 对话到关键决策点 → 创建快照 |
| 分叉探索 | 创建快照 → Fork → 两条独立路线 |
| 清理旧快照 | Delete 过时快照 |
相关文档
- Session 管理 →
session-management.md - Actor 边界 →
actor-boundary.md - 数据韧性 →
data-resilience.md