@amaster.ai/dsh-仓库

会话存储镜像 深层空间( dsh): 预测 session/event 流入 MySQL/PostgreSQL/SQLite/SQL 服务器(ai_messages 编号 : ai_chat_histories,与源项目相同的表格),而不取代 dsh 的本地持久性——本地文件保持权威,这是一面镜像.
当 dsh 配置文件需要持久,可查询的会话数据时使用,同时保留运行时本地会话存储作为真理的来源.
安装
dsh plugin --profile my-agent add @amaster.ai/dsh-storage
运行时端点 : @prisma/client (单位:千美元)普里斯玛7加您数据库的驱动适配器 :
| 提供者 | 适配端点 |
|---|---|
mysql | @prisma/adapter-mariadb |
postgresql | @prisma/adapter-pg |
sqlite | @prisma/adapter-libsql |
sqlserver | @prisma/adapter-mssql |
PrismaClient是每个供应商预先生成的,并在包中发运—— 没有 prisma generate 步骤 为消费者服务.
配置
默认禁用 。 通过配置配置配置 cordis.patch.yml数字 :
- insert:
- id: storage-mirror
name: '@amaster.ai/dsh-storage'
config:
enabled: true
database:
enabled: true
provider: mysql # mysql | postgresql | sqlite | sqlserver
url: mysql://user:pass@host:3306/agent
使用运出的方案变量创建或升级表格:
npx prisma db push --schema node_modules/@amaster.ai/dsh-storage/prisma/schema.mysql.prisma --url "mysql://user:pass@host:3306/agent"
# schema.postgresql.prisma / schema.sqlite.prisma / schema.sqlserver.prisma work the same way
只有消息,工具-结果,助理-尝试,转会,标题,以及成功的收缩事件进入镜像队列;不相关的生命周期记录不会触发数据库读取或重试. 失败的初始化重试在会话中共享一秒钟的延迟 。 已排入队列的事件等待到这一延迟,会话冲出/卸载仍会排出命令的工作 。 数据库操作故障继续被记录并吞入;局部DSH持久性仍然具有权威性.
同一助手行的相邻排队工具结果在写入前被合并,每批最多有32个事件,不跳出计时器. 不同消息和被镜像干扰的事件保留了队列顺序. 会话冲出、归档、处置和插件卸下封条并排出较早的批次。 完全结果行不保存在新的持久缓存中 。 这将减少重复读取/写入; 当输入的数据超过数据库时, 队列仍然可以增大 .
数据模型
ai_messages——用户和模范行,有thoughts, (中文(简体) ),tokens, (中文(简体) ),tool_calls, (中文(简体) ),agent_id, (中文(简体) ),metadataJSON列和软去除. A 类tool/result更新匹配的模型行tool_calls以调用 ID 输入; 它不创建type=tool排队.ai_chat_histories——按会场滚动(消息计数,总信使,一/最后消息时间戳).
逻辑信息 ID 载入 metadata.id;信息行使用决定散列 (session_id, message id) 作为他们的主要钥匙,所以重新预测的事件在每一个连接器上都会上升而不是重复. 会话行匹配 session_id 并保留他们的密钥。 一次偏离源项目:否 user_id ——租房骑行 session_id。 。 。 .
对于 user/message 排队, content 保留文本投影,同时 metadata.message 保留收到的原始用户信件,包括 source 并点出内容块。 图像/ 文件块保留任何附件引用、路径、 URL, 或内置信息中实际包含的数据; 此镜像不会获取或重写附件 。 重投影将相同的原始消息写入已存在的行.
这个 tool_calls 阵列保留 dsh 的工具调用块(id, (中文(简体) ), name, (中文(简体) ), arguments); 匹配条目增加结构 result 在失败时 error 身份证明 Live call ID被缓存,恢复的呼叫可以从模型表面解析出它们的消息ID:两条路径都读取了一则消息主键. 旧电话在最多100个ID/工具呼叫候选人的密钥集页面中搜索,在插件中匹配,并在获取下页前被丢弃. 工具结果查询 SQL 不搜索 JSON, 加入表格, 或巢 SELECT 语句 。 复制结果更新同行, 不增加消息计数 。 现有历史 type=tool 排行完好无损.
当助理信件包含 dsh reasoning 块, thoughts 是一组 { content } 按块顺序输入。 如果适配器在信件中提供匹配签名 source.replayState.blocks,该条目也带有 thoughtSignature。完整的模型 source,包括不透明 replayState,在行元数据中保存,用于无损失提供者重放。 后门的 readMessages() 还接受老年 { description } 条目和 JSON 字符串想法,返回为 { content }。 。 。 . subject 并且当上游信息不提供时,没有发明出一个深思熟虑的时间戳.
SQL 服务器注释: Prisma 的 sqlserver 连接器没有 Json 类型,所以它的变体将 JSON 列映射到文本中——后端自动将其序列化(SQL Server's ISJSON 编号 : JSON_VALUE 仍以 JSON 为文本查询).
镜像是无出错的接合: 后端错误被登录 [dsh-storage] 前缀并永不逃入代理循环.
成功本土 compaction/end 事件还写出 utility_compressor 留言。 内容
content 是源兼容的 Content[] 完全存活的 JSON 阵列
对话:摘要加保留尾巴,工具呼叫/结果由ID对等。 系统
提示不包括在内。 在同步数据库之前, 地面被捕获
写入; 失败/ 关闭的收缩让上次的快照完好无损 。 抓图行做
不增加可见信件数。 具有相同角色的相邻消息合并
命令部件, 因为遗留的读取器会跳过保留尾巴.
消费者可以从最新的活性压缩快照中恢复,加上后期消息行.
抓图和新镜像行包括 metadata.sessionCreatedAt 财务报告和审定财务报表 metadata.seq
在同一数据库第二处区分会话的复会时间和消息.
没有此元数据的旧快照保留了创建时间界限 。 镜子
不从不透明的附件ID获取附件或发明可用的路径/URL.
附件、开发者更新、扩展块和非对象工具参数
当遗留下来时,保留为文本部分中标注的 JSON 数据 Content[] 无法代表
他们是本地的。 这种快照保存参考信息,而不是附件字节或a
完整本地会话/工具注册。 附件字节仍然需要它们现有的持久
存储。 一个不变的后遗症读取器仍然基于时间戳;它必须消耗序列
元数据以区分同一数据库中的后期消息.
存档会话
处理会话清除请求时,请拨 await ctx.get('dshStorage').archiveSession(sessionId) 停止活转后 它等待队列的镜像写入, 然后按交易方式指定所有当前, 非删除 ai_messages 行数(history_id IS NULL改为未删除 ai_chat_histories 排队 返回的历史 ID 可以直接从数据库中查询这些行; 没有活动信件返回的第二个呼叫 null。数据库故障拒绝这一明确操作,而不是报告一个成功的明确操作.
存档的卷起仍可查询 。 插件确认活动滚动为没有相关消息的历史行,因此下个预计事件创建了新的滚动而不是覆盖存档的一行. 呼叫者拥有停止/ 替换 dsh 会话表面和任何 A2A 任务状态; 此操作只归档数据库镜像 .
兼容性
Dsh/cordis 版本在 根相配矩阵事件有效载荷搭载预放出 dsh API-检查 TODO(verify) 标记在 src/ 在升级 dsh 之前.
许可证
麻省理工学院