用途:当 Cloudflare Worker 需要 TanStack AI 聊天持久化时,在应用内生成 src/lib/chat-persistence.ts,导出基于请求 D1 绑定的 ChatPersistence 工厂;如需跨隔离的互斥,再提供 Durable Object 锁存储。表写入应用现有 migrations/ 目录,用 wrangler d1 migrations apply 应用,不新建包或迁移运行器。
主要能力:D1 承载 messages、runs、interrupts、metadata 四个存储;Durable Object 承载 LockStore(withLocks,不是存储)。两者不合并为一个对象,分别由两个工厂返回并作为两个中间件接入。
使用方式:先读应用确定 D1 绑定名、env 传递方式、是否用 Drizzle、迁移目录与已有表名(建议 chat_* 前缀)。绑定是每请求的,工厂须在请求处理器内调用,返回类型标注 ChatPersistence。Drizzle 路线按 build-drizzle-adapter 处理;原生 D1 用 d1.prepare(sql).bind(...) 实现四个存储。迁移可用 wrangler d1 migrations apply <database-name>(先 --local 再 --remote);用 Drizzle 时改用 drizzle-kit generate。路由中用 withPersistence(chatPersistence(env.DB)) 接入,threadId 授权须在路由层完成。
限制:runs 的 findActiveRun 必需,listByThread、listReclaimable 可选,未实现须在 skipMethods 声明,否则一致性测试失败;skip 不接受 locks。update 对未知 id 静默无操作;error 与 error_code 需同时写入;sandbox_key、detached_since、cancel_requested、driver_epoch 用 'field' in patch 判断。锁存储需自行测试,一致性套件不覆盖。仅发布为 npm 包时才需 peer-dep @cloudflare/workers-types 并加类型引用。