# `CMDCMemoryPg`
[🔗](https://github.com/tupleyun/cmdc_memory_pg/blob/v0.1.0/lib/cmdc_memory_pg.ex#L1)

CMDC PostgreSQL backend — Checkpoint + EpisodicMemory 持久化。

v0.1.0 **严控范围二件套**：

1. **`CMDCMemoryPg.CheckpointBackend`** — 实现 `CMDC.Checkpoint.Backend` 4 callback,
   存储 Agent 会话快照到 `cmdc_checkpoints` 表
2. **`CMDCMemoryPg.EpisodicMemoryBackend`** — 实现 `CMDC.Memory` 5 callback,
   按 user_id namespace 存储情景记忆到 `cmdc_episodic_memories` 表

> **v0.1 明示不含**：pgvector 检索 / 3-tier Memory（Working / Semantic / Procedural）/
> Composite 路由 / KV jsonb backend / Cloak encryption 强制集成。这些留 v0.2+
> 实施。

## 安装

    defp deps do
      [
        {:cmdc, "~> 0.5"},
        {:cmdc_memory_pg, "~> 0.1"}
      ]
    end

## 配置

    # config/runtime.exs
    config :cmdc_memory_pg, CMDCMemoryPg.Repo,
      database: "cmdc_prod",
      username: System.fetch_env!("PGUSER"),
      password: System.fetch_env!("PGPASSWORD"),
      hostname: System.get_env("PGHOST", "localhost"),
      port: String.to_integer(System.get_env("PGPORT", "5432")),
      pool_size: 10

    # 启动应用 supervisor
    def start(_type, _args) do
      children = [
        CMDCMemoryPg.Repo
      ]

      Supervisor.start_link(children, strategy: :one_for_one)
    end

    # 启动后跑 migration
    $ mix ecto.migrate

    # 设为 CMDC.Checkpoint 默认 backend
    config :cmdc, :checkpoint_backend, CMDCMemoryPg.CheckpointBackend

## 与 Cloak 集成（可选 encryption at rest）

    def save(session_id, snapshot, opts) do
      sanitized = CMDC.Checkpoint.Snapshot.redact(snapshot, &MyApp.Vault.encrypt/1)
      # ... 写入 PG
    end

详见 `CMDCMemoryPg.CheckpointBackend` moduledoc。

# `version`

```elixir
@spec version() :: String.t()
```

返回 cmdc_memory_pg 当前版本号。

---

*Consult [api-reference.md](api-reference.md) for complete listing*
