--- summary: "每个代理数据库架构版本、它们的更改以及它们的第一个版本" read_when: - "查找哪个版本首先发布了代理架构版本" - "规划创建者命名空间或参与者身份迁移" title: "代理架构历史记录" --- ## Agent 架构历史 **发布于** 命名包含每个更改的第一个稳定版本标签,或者当尚无稳定版本包含它时命名第一个 beta 标签。多个架构更改可以首先在编写更高版本的版本中一起发布。 `Unreleased` 保留用于稳定版和测试版标签中都没有的更改。计划升级时使用目标版本的历史记录:已安装版本的 `openclaw update --dry-run` 不会显示目标的迁移计划。较旧的构建拒绝较新的模式;回滚需要经过验证的升级前备份及其匹配的版本,而不仅仅是重新安装旧的软件包。 | 版本 | 变更 | 发表于 | | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------ | | 1 | 初始的每个 Agent 存储([#88349](https://github.com/openclaw/openclaw/pull/88349)) | `v2026.6.1` | | 2 | 内存索引标识([#104449](https://github.com/openclaw/openclaw/pull/104449)) | `v2026.8.1` | | 4 | 会话和转录内容移入 SQLite([#98236](https://github.com/openclaw/openclaw/pull/98236)) | `v2026.8.1` | | 5-6 | 终端新鲜度和状态生命周期([#104859](https://github.com/openclaw/openclaw/pull/104859)) | `v2026.8.1` | | 7 | 每个条目的生命周期状态投影([#106151](https://github.com/openclaw/openclaw/pull/106151)) | `v2026.8.1` | | 8 | 每个转录会话的来源信息([#106766](https://github.com/openclaw/openclaw/pull/106766)) | `v2026.8.1` | | 9 | `STRICT` 表([#108663](https://github.com/openclaw/openclaw/pull/108663)) | `v2026.8.1` | | 10 | 物化的活动转录路径([#108851](https://github.com/openclaw/openclaw/pull/108851)) | `v2026.8.1` | | 11 | 持久化投递、对话地址和心跳结果([#109636](https://github.com/openclaw/openclaw/pull/109636), [#95838](https://github.com/openclaw/openclaw/pull/95838), [#109999](https://github.com/openclaw/openclaw/pull/109999)) | `v2026.8.1` | | 12 | 会话拥有的 ACP 父流事件 | `v2026.8.1` | | 13 | 持久化转录重写水印 | `v2026.8.1` | | 14 | 逻辑会话节点、生成窗口和节点拥有的工件外键 | `v2026.8.1` | | 15 | Board 和会话共享表 | `v2026.8.1` | | 16 | 废弃旧版顶层转录媒体字段 | `v2026.8.1` | | 17 | 在移除最后一个写入方和路由臂之后,废弃无租户的每个 Agent 租约表([#121113](https://github.com/openclaw/openclaw/pull/121113), [#121615](https://github.com/openclaw/openclaw/pull/121615)) | `v2026.8.1` | | 18 | 现有会话拥有的聚合中规范化的参与者身份命名空间和显式未知的历史输入时间 ([#130661](https://github.com/openclaw/openclaw/issues/130661)) | `v2026.8.1` | | 19 | 源合格的不可变会话创建者;历史模糊性仍然未知 | `v2026.8.1` | | 20 | 权威的冷记录存档,具有精确的恢复元数据和独立的备份有效负载 | `v2026.9.5` | | 21 | 通过事务节点、窗口和主键失效进行增量存储会话验证 | `v2026.9.5` | | 22 | 用于会话本地删除和协调的精确转录 FTS 行所有权 ([#153834](https://github.com/openclaw/openclaw/pull/153834)) | `v2026.9.6` | | 23 | 选择性转录压缩、二进制内存嵌入和稳定的内存全文索引标识 | `v2026.9.6` | | 24 | 存储的会话热点事实与关键差异、技能和系统提示快照分开 | `v2026.9.7` | | 25 | 会话编写者验证自己的行;脱机导入和修复显式排队准入工作,而不是按写入失效触发器 | `Unreleased` | | 26 | 用于会话维护、转录导航鉴别器和上下文引擎发件箱状态的便携式查询列 | `Unreleased` | | 27 | 通过 SQLite 重建和 PostgreSQL 生成,显式上下文引擎发件箱入队序列保留 FIFO | `Unreleased` | Schema 1 首次出现在 `v2026.5.30-beta.1` 中,也是由扩展稳定版 `v2026.7.35` 编写的。版本 2、4、5-6 和 7 是仅供开发的中间版本,其更改首先随 `v2026.7.2-beta.1` 中的模式 8 一起发布。版本 3 是合并到版本 4 中的未交付的开发步骤。Schema 9 首次出现在 `v2026.7.2-beta.2` 中。 交付的 schema-1 代理数据库包含缓存、身份验证和内存数据,而不是 SQLite 会话表。 [7 月保留策略](/gateway/doctor/config-migrations#retention-policy) 仍支持其升级。包含会话表和架构版本低于 8 的早期开发布局、`session_transcript_files` 缓存以及基于会话密钥的转录本搜索索引将不再迁移。 Doctor 保留这些数据库并在修复之前拒绝。保留状态目录和配置的完整副本,包括共享代理注册。针对该副本运行 `openclaw doctor --fix` 和 OpenClaw `2026.9.7`。如果 Doctor 由于无法验证其所有权而持有商店,请按照其报告的明确代理恢复说明进行操作,然后在升级副本之前重新运行 Doctor。仍然支持 Schema-8 和更高版本的会话迁移。 ### Context-engine 发件箱 FIFO 序列 代理架构 **27** 为 `context_engine_turn_outbox` 提供 `enqueue_sequence INTEGER PRIMARY KEY` 并保持 `advancement_key` 唯一。序列别名SQLite的rowid没有`AUTOINCREMENT`;它对实时行进行排序,而不是历史分配。恢复、挂起会话分组和下一轮读取使用此命名列,而不是时间戳或隐式 rowid。有效负载转换、重试和重复密钥写入保留原始序列。 正向迁移会在模式所有者的独占维护事务中重建现有的发件箱,逐字复制每个旧的 rowid,并重新创建其索引和触发器。被阻止的行和每个有效负载字节都被保留。不存在的可选发件箱将保持不存在。重建与保留的行成比例并记录其经过的时间;现有`(engine_id, created_at)`指数不变。 PostgreSQL生成将序列映射到`bigint GENERATED BY DEFAULT AS IDENTITY`; PostgreSQL 没有先前提供的要迁移的代理架构。 验证后,两个模式标记都会自动前进。更新时Doctor保留其现有的演练和验证的备份要求;没有引入新的更新拒绝。较旧的二进制文件拒绝架构 27,并且回滚需要经过验证的预迁移备份及其匹配的二进制文件。接受的维护者决定保留实时 FIFO 订单,无需额外的分配器、保留策略或配置选项。 ### JSON 谓词列 代理架构 **26** 将查询字段从规范 JSON 提升为 `TEXT` 和 `INTEGER` 列。会话节点记录会话开始时间以及是否存在可选历史引用。转录事件记录导航类型、自定义类型、显示可见性、消息角色以及旧版导航使用的最后一个 type/custom-type 成员;有效性标志保留现有的格式错误的输入路径。上下文引擎转发件箱记录其有效负载状态。共享 TypeScript 派生在每个 JSON 写入的同一语句中填充这些字段。会话参与者使用相同的会话派生。 迁移在其所属代理数据库的事务中对每个现有行进行一次分类,保留规范的 JSON 和压缩的转录字节。 SQLite 分类保留第一个成员 JSON 查找和最后一个成员旧导航语义。可选的发件箱表在首次使用之前一直不存在。新的和隐身的数据库从模式 26 开始。稍后打开重用承认的模式事实;运行时谓词不会回退到 JSON 或重新运行回填。 [ 接受的设计](https://github.com/openclaw/openclaw/issues/169254) 保持谓词类型可移植,并为未来的引擎适配器使用相同的派生。 PostgreSQL 引导程序 DDL 是根据规范模式生成的;支持该数据库的引擎必须在同一版本下提供每次向前迁移。大小限制的 JSON 投影和当前作者权限检查保留了其现有的所有者和语义。 架构 25 及更旧的版本拒绝架构 26。回滚需要使用其匹配的版本恢复经过验证的迁移前备份;切勿降低任一版本标记。更新时医生保留了对旧更新驱动程序的私人演练和验证备份要求。首次升级成本与每个代理数据库中保留的行数以及主机上的数据库数量有关;实施证明记录了这两个测量结果。 ### 会话写入器验证 代理模式 **25** 停用了三个 `entry_valid` 重置触发器以及九个节点、窗口和主密钥会话验证触发器。会话编写器在持久化其序列化行之前验证其并直接写入最终的有效性值。普通写入不会留下挂起的验证标记,并且不需要写入后行重读或有效性更新。 `session_canonical_validation_pending` 仍然是派生准入队列。离线导入、Doctor 修复和主密钥策略更改明确对受影响的密钥进行排队并撤销会话验证收据。网关启动在准备就绪之前应用策略更改;当网关停止时,外部进口和维修需要专门的维护保管。其他进程无法与网关一起写入会话表。实时权限检查仍然由现有的效果和交易所有者保留。 Doctor 会在迁移或完整迁移备份之前保留架构 24 和 25 的备份孤立窗口修复。它验证确切的历史模式,并仅删除没有逻辑节点的窗口,从而在修复备份中保留其原始历史记录。较旧的介质迁移使用与数据库升级程序相同的历史架构所有者。 迁移会在退休触发器之前检查以前的模式,为每个现有节点播种,并清除同一事务中作为两个版本标记的持久会话验证收据。然后,准入会验证导入的行,包括旧挂起表为空的行。无效行仍需要 Doctor 修复。失败的发布会一起回滚触发器停用、挂起的工作、收据更改和架构标记。迁移保留存储的会话和脚本有效负载;保留、权限和持久性不变。 架构 24 和更旧的版本拒绝架构 25。二进制回滚需要使用其匹配的旧版本恢复经过验证的升级前备份,并会丢失以后的写入;不支持手动降低版本标记。已发布的更新程序使用现有的 [ 架构迁移切换 ](/reference/database-schemas/versioning#schema-bumps-and-older-updaters)。 ### 会话热点事实和快照 代理模式 **24** 在 `session_nodes.entry_json` 中保留准确的热点会话事实,并将 `sessionDiffBaseline`、`skillsSnapshot` 和 `systemPromptReport` 移动到 `session_entry_snapshots`,由会话密钥和字段作为键控。现有的索引列仍然是查询投影;它们不会替换存储的值,例如不同的 `interrupted` 状态。完整条目消费者在一份 SQLite 语句中选择热门事实和请求的快照列。列表和常驻投影读者只选择热点事实。公开的全文读物保留了现有的形式。 条目作者保留政策、生命周期和出版物所有权。它仅在与热条目相同的事务中写入更改的快照值。快照表触发器提前节点的 `snapshot_revision`,包括原始 SQL 更改;准备好的突变在重用原始快照之前会比较该修订版。回滚可恢复数据和修订版本。提交的写入器收据使跨句柄和工作线程缓存的热点事实无效;运行时读取器不会探测外部提交。缓存的热点事实是不可变的;内部借用者共享它们,而公共可变读者则接收独立的值。 现有的 startup/Doctor 架构所有者提取有界键控批次中的三个字段,并使用两个架构标记提交表示更改。格式错误或身份不匹配的条目对于 Doctor 修复保持不变。快照 JSON 保留 JavaScript 解析语义,包括超出 SQLite 的 JSON 嵌套限制的值。成绩单字节、待处理输入、进度卡、保留和权限均保持不变。删除逻辑节点级联其快照;在保留记录窗口的同时清除条目也会清除其快照。 Doctor repair/import 和完整条目副本使用者保留所选条目的快照。 这是 [ 材料更改检查点 ](/reference/database-schemas/storage-changes#review-checkpoint-for-material-changes) 下的版本化表示更改。接受的存储拆分和迁移记录在[#160358](https://github.com/openclaw/openclaw/pull/160358)中。使用现有的已验证备份和候选Doctor更新流程,包括[发布的更新程序迁移规则](/reference/database-schemas/versioning#schema-bumps-and-older-updaters)。中断的提取会回滚。较旧的构建拒绝架构 24;回滚需要升级前的数据库备份和匹配的版本,而不是较低版本的标记。释放的 SQLite 页面在现有维护下仍可重复使用。 ### 紧凑型代理负载存储 代理模式 **23** 更改转录本和内存存储表示。 [存储设计](https://github.com/openclaw/openclaw/issues/153618)记录迁移范围和所需证明。共享状态模式仍然是 17。 每个转录事件仅以一种表示形式保留其原始 JSON:身份 `TEXT` 或校验和的 1 级 Zstd `BLOB`。压缩仅适用于从 1 KiB 到 4 MiB 的合格 UTF-8 事件,并且仅当帧及其导航元数据节省至少 64 字节和 10% 时。小型、超大、格式错误和异常的 Unicode 记录保留身份存储。 UTF-16 数据库保留身份存储及其现有的本机字节记帐。元数据包含导航预测、报告选择事实和确切的上下文预算大小。报告重复数据删除和数据库大小统计使用这些事实,而无需解码无关的主体;选定的正文读取重建原始文本。不需要扩展名或新的 SQLite 文件格式。没有 Zstd 的运行时可以写入标识行,但拒绝解码现有的压缩行。 内存块和嵌入缓存使用小端 Float64 向量,保留提供程序的有限数字,而无需更改 Float32 精度。可选的矢量加速器仍然保留派生的 Float32 存储。块保留其逻辑 ID 并获得全文维护触发器使用的稳定整数标识。格式错误的遗留向量保留块文本和出处,并记录现有的 source/vector 重建债务。使用情况汇总还转移到元数据信封以及现有缓存表中的身份或压缩主体;可以重建过时或无效的派生缓存。 转录全文搜索保留其现有内容和 rowid。派生行映射对 session/message 所有权进行索引,因此清理和协调会删除选定的 FTS rowid,而无需扫描全文表。重复的和空的消息 ID 仍然有效。迁移会复制现有的 rowid,而无需重建或重新标记文本。模式 21 和部署的模式 22 都直接迁移到模式 23。模式 22 的惰性 `(session_id, fts_rowid)` 映射可以为空或不完整,因此新的 `(id, session_id, message_id)` 映射是从现有 FTS 内容填充的。在保留其未知或不完整状态为 `needs_rebuild` 后,迁移将停用 `fts_row_count`。干净的映射保持干净;现有的重建声明、游标、活动路径行和会话验证待处理行将被保留。未发布的压缩 schema-22 草案不是受支持的前身。 承认的迁移一次转换一个转录记录或内存向量,根据其原始字节验证每个压缩转录帧,保留行标识和时间戳,并使用两个模式标记提交表替换。每行之后从 SQLite 返回内存验证和转换,因此大型旧嵌入缓存不会在 JavaScript 堆中累积其 JSON 字符串。缓存转换读取 128 个 rowid 的窗口,并在将文本返回到 JavaScript 之前检查 SQLite 内的嵌入字节长度。无效的 JSON 向量和大于 1 MiB 的缓存嵌入将被跳过并按需重建。 Doctor 记录它们的计数和前八个 rowid 作为可恢复的警告;这些派生的缓存条目不会阻止更新。现有事务保留中断迁移的回滚,并且在重新运行时不会重新读取已转换的缓存。重建将丢弃的未知列或依赖项会导致拒绝。早期支持的架构首先运行其先决条件迁移。转换需要临时空间来存储旧表和替换表、journal/WAL 活动以及已验证的备份。释放的页面可以重复使用;较小的有效负载本身不会缩小数据库文件。现有维护拥有物理回收。 升级前停止所有写入程序并进行经过验证的 WAL-aware 备份。支持的更新程序在现有维护所有者的领导下运行候选人的Doctor。 2026.9.2 软件包更新程序在其后核心 Doctor 验证恢复备份覆盖范围并执行实时迁移之前,会在私有副本上进行演练。未经验证的权限或备份覆盖保留拒绝和[手动恢复说明](/install/updating#updating-from-2026.9.2-across-a-schema-bump)。中断的转换会回滚其事务。早期的先决条件迁移已经可以提交;让 writer 停止并使用兼容的版本恢复 Doctor。较旧的构建拒绝架构 23. 回滚需要升级前备份和匹配构建;降低标记无法恢复旧的有效负载表示。 ### Transcript FTS 行所有权 代理架构 **22** 添加了 `session_transcript_fts_rows` 和可为 null 的 `session_transcript_index_state.fts_row_count`。转录投影所有者将每个插入的 FTS rowid 记录在与其 FTS 行相同的事务中。即使不同会话的追加交错,`session_id` 上的索引也会使删除与会话的索引行成比例。这些是派生的搜索事实;原始转录本字节、可见性、保留和同步重建限制保持不变。 迁移会创建一个空映射,并用 `fts_row_count = NULL` 标记现有索引状态 `needs_rebuild = 1`。它不扫描或回填 FTS 内容。在下一次协调时,未知或不完整的所有权在第一次重建期间采用旧的会话过滤删除,并发布与其计数的精确映射。工作线程重建保留有界的删除块,因此旧投影可能需要对每个块进行回退扫描,直到第一次重建完成。后续删除使用精确的 rowid。同步和工人协调、后缀替换、删除和冷恢复保持相同的所有权。映射上没有外键级联:即使在会话窗口被删除之后,删除也需要这些 rowid;投影所有者将其与 FTS 行一起删除。 两个模式版本标记都通过同一事务中的现有维护所有者前进。在运行兼容版本的 `openclaw doctor --fix` 之前,停止编写器并进行经过验证的 WAL-aware 备份。较旧的构建拒绝模式 22,因为它们的写入无法维护行所有权。回滚需要迁移前备份和匹配构建;降低版本标记是不安全的。现有的 [older 更新程序合同 ](/reference/database-schemas/versioning#schema-bumps-and-older-updaters) 适用,包括受支持的 2026.9.2 软件包更新的私人排练和经过验证的备份覆盖范围。 ### 增量存储会话验证 [接受的存储设计](https://github.com/openclaw/openclaw/issues/149323)拥有该投影的失效、认证、迁移和回滚合约。 代理模式 **21** 添加了 `session_canonical_validation_pending`,这是一组需要会话验证的派生会话密钥。所需的触发器标记节点身份、JSON、有效性和沿袭更改、保留窗口关联的更改以及主密钥策略更改。 Node 删除和重命名会清理旧密钥,而不依赖于外键强制执行。该表不存储任何权限授予或复制的会话负载。 现有会话验证器会在同一事务中删除其标记之前验证最终行。回滚将数据和挂起的工作一起恢复。迁移之前打开的连接仍然会触发新的触发器;其较旧的有效性标志无法清除待处理标记。只读检查不会创建或修复投影,并且丢失或漂移的所需定义不算作干净的数据库。 物理数据库所有者在首次进入时需要完整的会话验证证明;导入的空挂起表是不够的。现有的突变工作人员在发布该证明之前播种所有密钥并验证有界批次。普通连接关闭和驱逐会保留它,而物理替换、注册表失效和本机反序列化则会撤销它。没有承认的证明的只读调用者保留完整的验证并且永远不会创建写入器。每个本地读者保留其当前主密钥策略和物理所有者的现有入场合同。已经承认的元数据读取器保留其已建立的原始行解析器行为;新读者、政策变更或业主更换必须再次交叉入场。待定密钥使准入增量,无需缓存会话身份或权限结果。 类型化工作线程读取可以继续针对一个保留请求的现有提交的读取器准入。延续随着其源准入或连接而过期,并保持与物理文件、主密钥策略和就绪状态的绑定。当证据丢失、事务性、更改或撤销时,它不能承认不相关的池化读取或替换严格验证。 网关启动重用同一物理代的有效会话验证收据;它们不会取代完整性检查。需要新鲜证据的商店一次最多可以认证两个,使用与数据库预检相同的磁盘工作绑定。两个执行工作线程分别负责每个数据库的任务。每个任务在验证批次中保留其工作人员,然后在下游维护或其他任务可以继续之前,根据父级的协调关闭请求关闭确切的数据库和租用。不确定的本机终止保留作者许可和清理保管权。拒绝会阻止新的接纳并在启动失败之前耗尽积极的工作;初创公司所有者在返回之前加入其执行人员。普通档案工作保持其全局FIFO;认证保留每个数据库的写入顺序和新的物理所有者检查。 成绩单索引协调在代理数据库之间共享一名工作人员,包括按仪表板标题读取安排的修复。每个任务都保留自己的消息通道、源快照和删除租约。成功的重用遵循读句柄关闭、父写结算和确切的租约释放。本机工作线程发生故障后,恢复会在释放失败任务的租约之前加入终止并接受父级写入。最终网关关闭将关闭准入,耗尽已接受的维修和租赁恢复,然后在共享状态退休之前加入工作人员退出。 20 到 21 的迁移会安装表和触发器,并将每个现有节点标记为待处理,而无需解析、修复或验证会话内容。两个模式版本标记在同一维护事务中前进。早期支持的模式保留其现有的先决条件迁移。为 Doctor 保留格式错误的行,并在迁移中断时停止写入。 较旧的版本拒绝模式 21 并且无法识别其触发器。在迁移之前获取并验证 WAL-aware 备份。回滚会使用其匹配的版本恢复该备份;删除派生对象或降低版本标记不提供受支持的无损降级。 2026.9.2驱动的更新需要候选人的私人演练和验证的恢复备份路径;请参阅 [older updaters](/reference/database-schemas/versioning#schema-bumps-and-older-updaters) 了解支持的迁移和拒绝条件。 ### 冷转录本存储 代理架构 **20** 添加了 `session_transcript_cold_archives`。会话窗口仍然是身份所有者;每个冷行记录转录本生成、不可变的存档名称、压缩的 SHA-256、事件和字节计数、最后一个序列和存档时间。磁盘上的存档使用 `storage: "file"`,没有数据库 blob。支持的备份将经过验证的压缩字节嵌入其私有副本中,形式为 `storage: "sqlite"`。现有的 reset/deletion 档案保留其单独的表和行为。 模式碰撞保护历史语义:老读者会错误地将提取的事件行视为空记录,即使它可以忽略新表。 `PRAGMA user_version` 和 `schema_meta.schema_version` 均通过现有迁移所有者推进。支持的更新程序在维护权限下运行目标构建的 Doctor 阶段;普通活跃读者不得执行此迁移。迁移会创建架构而不提取任何转录本。在设置 `session.maintenance.coldStorage.enabled` 之前,提取将被禁用。 升级前进行备份并验证。如果迁移失败,请让 writer 停止并在重新启动之前使用兼容的版本完成 Doctor。 2026.9.2更新程序遵循考生的私人排练和验证的恢复备份路径;请参阅 [older updaters](/reference/database-schemas/versioning#schema-bumps-and-older-updaters) 了解支持的迁移和拒绝条件。较旧的构建拒绝架构 20。回滚需要升级前备份及其匹配的构建;不要降低版本标记或删除冷归档表。仅恢复冷事件并不会使较新的架构成为受支持的降级。 更新中断后,代理数据库维护租约最多可保持 60 秒有效。如果 Doctor 报告维护租约超时,请停止编写器,让租约到期,然后从兼容安装运行 [`openclaw update repair`](/cli/update/repair-and-recovery#update-repair)。即使模式事务回滚,包也可能已被替换。不要删除租约记录或更改架构标记来绕过恢复。 请参阅 [ 冷转录本存储 ](/reference/session-management-compaction/maintenance#cold-transcript-storage) 用于保留、丢失文件恢复和物理空间回收,以及 [ 冷转录本备份 ](/install/backups#cold-transcript-backups) 用于无需源存档目录的便携式恢复。 ### Creator命名空间迁移 代理模式 **19** 和共享状态模式 **14** 向现有会话和 cron JSON 记录中的人类创建者参与者添加源鉴别器。不添加表、边车或单独的身份分类账。会话节点仍然是不可变的创建者所有者;可变所有者分配和显式共享授予保持不变。 直接由`operator`或`run`创作盖章的历史人类创造者成为`profile`;通道创建变为 `channel`。丢失源的 cron、继承的 spawn 或 Talk、遗留的 `createdBy` 和丢失源的历史记录仍然是 `unknown`。迁移会保留 ID、归属、创建时间、内容和现有沙箱限制。 UUID、配置文件查找、参与者、当前路线或所需的沙箱永远不会提供缺失的创建者权限。从不完整的物理预测中恢复也会产生未知的人类归因。 升级之前,停止网关和所有其他编写器,然后 [ 创建并验证 WAL-aware 备份 ](/cli/backup)。使用新版本运行 `openclaw doctor --fix`。代理迁移保留已停止的写入器维护门,并在 schema-18 参与者迁移后运行,而不重建已迁移的参与者行。存储的数据和两个模式标记都在所属数据库事务中提交。共享状态和代理数据库是单独的事务;如果失败,请在启动 Gateway 之前停止写入并重新运行 Doctor。 旧版本拒绝新版本。对于回滚,停止所有编写器并使用其匹配的旧版本恢复经过验证的升级前备份。不要减少任何一个模式标记:较老的编写者无法维护创建者-源合同。仅从存储的 ID 中无法恢复未知的历史出处。管理员保留共享管理访问权限;分配责任不会恢复隐式创建者授予。 所需的沙箱资源为经过验证的配置文件创建者保留其现有密钥。相反,通道和未知创建者使用通过解析会话身份进行隔离,没有新的持久主体字段。他们旧有的模糊资源没有受到迁移的影响,不会被自动采用或复制;操作员必须在普通保留或清理之前明确恢复所需的文件。请参阅 [ 沙箱范围和恢复 ](/gateway/sandboxing#modes-scope-and-backend)。 ### 参与者身份迁移 代理模式18使用唯一密钥`(session_key, identity_namespace, actor_id)`重建`session_participants`。原始 Actor ID 与其命名空间保持分离。这取代了旧的 `(session_key, actor_type, actor_id)` 密钥;这不是同版本的附加更改。两个模式标记一起前进。不添加伴随表或每输入分类帐。 在升级现有数据之前,请进行经过验证的 WAL-aware 备份并停止网关和其他代理数据库编写器。使用新版本运行 `openclaw doctor --fix`。迁移使用现有的维护租约来拒绝活跃的写入者并隔离新的声明。普通的运行时打开拒绝旧的参与者模式,而不是将其迁移到活跃的读者后面。早期的结构和媒体迁移在参与者融合之前按照历史顺序进行。如果现有配置的、默认布局或注册的数据库仍然无法完成运行时模式准备,包括当实时编写器或未知的表依赖项阻止此迁移时,显式 Doctor 修复将退出非零。就绪性使用与迁移相同的目标发现,无需注册、修剪或创建存储。当所需的数据库架构准备就绪时,存档迁移警告仍然是建议性的。 会员资格和记录的捐款总额得以保留。历史配置文件时间戳是未知的,因为即使存在贡献计数,早期的源升级也可能会污染它们。支持的代理和仅通道观察时间保持不变;未解决的历史通道域保持未解决状态。迁移不会发明丢失的通道行或检查转录本以重建身份。新的观察结果不会将未知的首次输入时间转变为声称的首次时间。 重建、数据复制、版本标记和外键验证以原子方式提交。未知的表形状或数据库本地依赖项将被拒绝。失败的迁移会回滚,而不是留下部分替换表。较旧的建筑垃圾模式 18;不要减少版本标记或恢复旧的唯一密钥。降级恢复需要经过验证的迁移前备份。 正常入场人数仍限于 32 个身份。同店别名修复总和;可重试的跨存储副本保留较大的记录聚合。修复保留了入场界限之上已经保留的历史。重置保留逻辑会话参与,而删除则将其与会话节点一起删除。