CMDC.Checkpoint (cmdc v0.5.3)

Copy Markdown View Source

会话快照(checkpoint)一等公民 API。

让 Agent 在 BEAM 重启、Gateway 滚动升级、用户跨设备恢复等场景下 能保留完整对话上下文继续推进。

设计

Quick Start

iex> {:ok, snap} = CMDC.Checkpoint.save(session_id, agent_state)
iex> {:ok, ^snap} = CMDC.Checkpoint.load(session_id)

与 ACP / Steering 的关系

  • cmdc_acp 的会话恢复(Zed 切换 thread)= CMDC.Checkpoint.load/2
  • 10A Steering 的 :max_steering_queue 队列在 snapshot 中序列化
  • Plugin.Builtin.HumanApproval:session_start 重建 pending approval 队列(不可序列化字段策略)

Summary

Types

Backend 实现模块或 {module, opts} 元组。

存储/读取/列表/删除统一选项。

会话标识符(通常是 Agent.State.session_id)。

Functions

删除指定会话的快照。

列出指定会话所有快照(按 saved_at 倒序)。

加载最新一份会话快照。

保存 Agent 状态快照。

Types

backend()

@type backend() :: module() | {module(), keyword()}

Backend 实现模块或 {module, opts} 元组。

opts()

@type opts() :: keyword()

存储/读取/列表/删除统一选项。

session_id()

@type session_id() :: String.t()

会话标识符(通常是 Agent.State.session_id)。

Functions

delete(session_id, opts \\ [])

@spec delete(session_id(), opts()) :: :ok | {:error, term()}

删除指定会话的快照。

选项

  • :checkpoint_id — 仅删除指定 checkpoint(默认删除该 session 全部快照)
  • :backend — 覆盖默认 backend

list(session_id, opts \\ [])

@spec list(session_id(), opts()) ::
  {:ok, [CMDC.Checkpoint.Snapshot.t()]} | {:error, term()}

列出指定会话所有快照(按 saved_at 倒序)。

load(session_id, opts \\ [])

@spec load(session_id(), opts()) ::
  {:ok, CMDC.Checkpoint.Snapshot.t()} | {:error, :not_found | term()}

加载最新一份会话快照。

选项

  • :backend — 覆盖默认 backend
  • :checkpoint_id — 加载指定 checkpoint(默认加载最新)

save(session_id, state, opts \\ [])

保存 Agent 状态快照。

参数

  • session_id — 会话 ID
  • state — Agent 内部状态 struct 或任意可序列化 map
  • opts
    • :backend — 覆盖默认 backend(Application.get_env(:cmdc, :checkpoint_backend, ETS)
    • :label — 可选标签(如 "after_plan_approved"),方便回溯
    • :metadata — 用户附加 map

返回 {:ok, Snapshot.t()} 含生成的 :checkpoint_id:saved_at

Examples

iex> {:ok, snap} = CMDC.Checkpoint.save("sess-1", state, label: "before_compact")
iex> snap.session_id
"sess-1"