@reinsjs / store-sqlite
SQLite-backed EventLog, BlobStore 和 MemoryStore 用于 缰绳。一个SQL层,由运行时提供的驱动程序:Node 22.13+ node:sqlite,包子船 bun:sqlite。主入口没有 node:* 导入,只需要一个对象 exec(sql) 和 prepare(sql).
pnpm add @reinsjs/store-sqlite
// Node
import { sqliteStores } from "@reinsjs/store-sqlite"
import { openSqlite } from "@reinsjs/store-sqlite/node"
const store = sqliteStores(openSqlite("./agent.db")) // WAL on by default; ":memory:" for tests
// Bun
import { Database } from "bun:sqlite"
const store = sqliteStores(new Database("./agent.db"))
sqliteStores(db, { memoryTable }) 如果缺少表,则创建表并返回 { log, blobs, memory }准备好了 createAgent({ store }).
布局
| 表格 | 键控的 | 笔记 |
|---|---|---|
reins_events | session_id, seq | 扩展; seq 每个会话必须是连续的(存储强制它并抛出 seq_conflict) |
reins_blobs | session_id, id | 泄漏的工具结果和其他大的有效载荷 |
reins_memory (可配置) | path | 模型的内存文件; memoryTable 让每个角色或租户拥有自己的表 |
根据表名进行验证 ^[A-Za-z_][A-Za-z0-9_]{0,62}$ 在组装任何SQL之前-标识符不能绑定为参数,因此此白名单是注入保护。只有内存表是可重命名的;事件和blob由 session_id 故意的。
fork(from, atSeq, to) 逐字复制会话前缀(id和 seq 保存)在一条语句中转换为空会话。
验证
传入一致性套件 @reinsjs/core/testing。发布的 dist 使 node:sqlite 协议前缀(tup的默认值将把它剥离为一个裸 sqlite,仅在运行时失败 pnpm check:dist 警卫)。
Cloudflare Workers不是这个包的目标;持久对象SQLite将是一个单独的存储。
文档
docs/系统全景图_模块盘点/store.md 和 docs/archive/implementation-plans/2026-09-08-技术方案v1.0.md §5 -中文,在库根。
MIT©2026 newate Limited