SuperAPI AI 工具集

ai-persistence/build-drizzle-adapter

智能体与模型

查看项目

更新于 10-16 09:42

技能介绍

该技能用于在已运行 Drizzle ORM 的应用中实现 TanStack AI 聊天持久化。交付物是应用内的一个文件 src/lib/chat-persistence.ts,其中导出基于应用现有 Drizzle db 构建的 ChatPersistence;同时在应用现有的 schema 文件中新增四张表,并通过应用现有的 drizzle-kit 设置生成迁移。技能明确要求:不要创建包、第二个 db 实例、迁移运行器或 drizzle.config.ts,这些应用应当已经具备。

主要能力与产出 该技能会:读取 Store Reference(docs/persistence/store-reference.md)了解存储契约与不变量,并参考 ai-persistence/stores 的形状规则;随后在应用现有 schema 文件末尾追加四张表:chat_threads、chat_runs、chat_interrupts、chat_metadata;再写入 chat-persistence.ts,实现 MessageStore、RunStore、InterruptStore、MetadataStore。所有 store 与 @tanstack/ai-persistence 的参考内存后端(memory.ts)保持一致,由共享一致性测试套件证明。

使用方式与前置步骤 第一步是编写任何代码前先阅读应用:从 drizzle.config.ts 的 dialect: 或 drizzle-orm/*-core 导入判断方言(sqlite-core、pg-core、mysql-core);从 drizzle.config.ts 的 schema: glob 找 schema 文件,向其追加而非新建文件;从 src/db/index.ts、src/db.ts、src/server/db.ts 找 db 句柄,判断是模块单例(export const db)还是工厂(getDb());从 drizzle.config.ts 的 out: 与 migrations/ 或 drizzle/ 日志判断迁移流程;从现有表推断命名约定(表前缀、变量大小写、snake_case 列名);从 tsconfig.json 的 paths 判断导入别名。技能要求匹配应用既有风格。不要自创迁移路径,应把表加入其 schema 文件,然后让用户运行自己的命令(npx drizzle-kit generate 再 migrate/push,或 D1 用 wrangler d1 migrations apply)。

表结构与方言差异 SQLite 下 JSON 载荷使用 text({ mode: 'json' }),时间戳为 integer epoch ms。Postgres 用 jsonb()、bigint({ mode: 'number' })、boolean(),driverEpoch 用 integer(),其余用 text(),(namespace, key) 复合主键不变。MySQL 用 json()、bigint({ mode: 'number' })、boolean(),主键列用 varchar(..., { length: 255 }),onConflictDoUpdate 改为 onDuplicateKeyUpdate,(status, detachedSince)、(threadId, startedAt)、(parentRunId, startedAt) 索引保持不变。

.store 实现与幂等性 chat-persistence.ts 实现全部 store。RunRecord.error 是结构化的 RunError({ message: string, code?: string }),因此用两列 error 与 errorCode,它们总是一起更新,避免旧 code 残留。createOrResume 幂等:已存在 runId 原样返回,插入用 onConflictDoNothing 并重新读取。update 对未知 runId 是空操作,不抛错不插入。四个持久字段 sandboxKey、detachedSince、cancelRequested、driverEpoch 使用 'field' in patch 而非 !== undefined,以便重新附着时显式传 undefined 能写入 NULL。InterruptStore 的 create 为插入即缺席,重复 create 不会把已解决的中断改回 pending,所有列表按 requestedAt 升序。

适用场景与限制 适用于已使用 Drizzle ORM 且需要 TanStack AI 聊天持久化的应用,尤其是需要消息转录、运行记录、中断、元数据存储以及子代理运行重建、可回收运行扫描的场景。限制:技能不创建独立包或第二个数据库实例,迁移由应用自身工具链执行;未提供关于收费、价格、平台或效果的信息。