个人及伴侣存储
个人 GitHub 连接与发布¶
个人 GitHub 连接状态使用现有的 secret_store_entries 身份范围,以经过认证的规范配置文件作为 scope_id,并使用固定的私有名称 github-connection。它不是通用的身份密钥 API,也不是配置文件偏好。一个受约束的记录同时拥有选择、待处理的设备授权以及刷新恢复。个人管理的 CLI 凭据使用独立的 credentials/github/personal/<opaque-profile-id> 目录,位于旧版系统/代理清理根目录之外。
个人发布使用惰性的、同版本的 github_personal_publication_requests 表。它记录请求方配置文件、所选连接代次和账户、不可变的目标/工作区快照、幂等性以及结果;它不包含令牌。读取状态不会创建该表。现有的系统和代理请求仍保留在其原始表中。
本地共享和个人发布记录使用首次使用的 github_publication_session_lifecycles 配套表,将每个请求绑定到其已接受的会话生命周期修订版。键是发布种类和请求 ID;该绑定与请求在同一事务中提交。显式的 NULL 表示会话在受理时没有修订版。缺少绑定不能授权未完成的发布,也绝不会从当前会话中填充。终端回执历史保持可读。
该配套表使现有的本地请求表定义及其回执摘要保持不变。状态模式 18 向该配套表及仓库发布回执添加了 requester_authority_json,以便共享请求保留其原始请求方权限。历史行保持未绑定;终端回执保持可读。这些可选表需要进行版本升级,因为已发布的模式校验器即使对可空列也会拒绝附加列。有关迁移和回滚,请参阅状态模式 18。
旧版构建会忽略个人请求表和身份范围的凭据行,而不是将个人请求作为 System 执行。重新升级仍会强制实施原始授权过期时间。未完成的个人发布在 Gateway 重启后需要由同一经过认证的所有者重新确认;远程结果对账会复用原始请求标记。
断开连接会移除可用的本地凭据,并保留一个无密钥的断开选择状态,以阻止过期工作。配置文件合并会保留目标状态,包括显式断开;源连接仅在目标无状态时转移,并具有新的选择权限。在旧版构建上执行的配置文件合并所遗留的凭据需要重新连接,而不能通过别名在运行时采用。
个人发布回执在逻辑会话的生命周期内保持存在。归档/重置会保留回执,并使不兼容的未完成工作失效。已分派的 GitHub 操作仍可记录其观察到的结果,但不会获得执行另一操作的权限。永久删除会话会阻止执行,并移除其个人回执和生命周期绑定。没有定时幂等过期,删除本地状态不会撤销已创建的 GitHub 提交或拉取请求。
请参阅已接受的个人 GitHub 所有权与发布设计以及面向操作者的 GitHub 连接指南。
个人模型账户¶
个人模型账户使用现有的 secret_store_entries 身份范围,以规范 Gateway 配置文件为键。一个带版本号的 model-accounts 记录拥有提供商选择,而每条 model-account:<profile-id> 记录拥有一个内联 OAuth 或令牌凭据及其使用状态。每条记录保留现有的 64 KiB 密钥存储限制;连接更多账户或合并配置文件不会将凭据合并到同一大小限制下。这不会增加表、列、索引或模式版本。通用密钥列表/读取方法和配置文件偏好不会暴露这些记录。
在 Gateway 重新验证发起授权后,凭据及其选定链接在一个同步事务中提交。运行时仅加载显式选定的凭据,并将刷新和使用更新路由到同一所有者。共享和代理本地身份验证保存排除保留的个人配置文件命名空间,包括运行时快照和 CLI 镜像。
取消链接会记录显式断开选择,并保留现有会话引脚使用的凭据。经过验证的身份合并仅转移活动源的记录,保留目标的选样和断开状态,同时为引脚会话保留旧凭据 ID。旧版构建在别名上遗留的凭据不会在运行时被采用。兼容的降级会将私有记录保留在旧版共享账户池之外;重新升级可以使用保留的记录,而旧版身份合并遗留的账户需要重新连接。
有关连接、取消、会话计费和取消链接行为,请参阅每用户模型账户。
Apple 配套投递日志¶
配套 Watch 聊天具有独立的应用程序本地存储。它不会更改 Gateway 控制平面或每代理数据库模式,openclaw doctor 也不会迁移它。打开更新的 iPhone 和 Watch 应用程序以使用新的投递协议。有关投递状态和恢复,请参阅 Watch 语音和聊天。
iPhone 现有的 client-state.sqlite 拥有 watch_message_journal。名为 client-state-watch-message-journal-v9 的 GRDB 迁移添加了该表,并向 gateway_routing_identity 添加了可空的 watch_route_generation TEXT 列。该代次在 Forget 和重新配对后发生变化;来自旧配对的迟到回调或排队命令不会成为新工作。受理、已接受的运行身份和终端回执状态共享同一个日志所有者,与通用聊天发件箱分离。
该日志可空的 command_fingerprint BLOB 存储每条已受理命令规范字节的 SHA-256。解除保留此哈希,因此在命令文本被清除后,使用已更改内容或提交时间的相同 ID 无法返回原始结果。该哈希随行过期或被 Forget 移除;旧版导入没有命令指纹。
该迁移由共享的 Apple 客户端存储注册,因此 Mac 客户端也会看到添加的模式;它不处理配套 Watch 投递。
附加式 client-state-watch-message-legacy-receipts-v1 迁移会创建
watch_message_legacy_imports。它存储精确的旧版命令 ID 和已导入内容的 SHA-256 哈希,
绝不存储文本或 Gateway ID。可空的内容哈希记录旧应用的仅 ID 最近消息抑制策略;
它不是匹配正文或成功执行的证明。
每当手机准备其日志时,旧的 Watch UserDefaults 会在一个 SQLite 事务中解码并对账。 导入的行及其哈希回执在清理检查确认两个源 blob 均未改变之前一起提交。 这也会恢复降级后由旧应用写入的消息。无法证明的排队文本会变成 需要审核, 绝不会自动发送。与之前已遗忘 Gateway 关联的冲突 ID 或未见过消息会保留源, 并显示恢复错误,而不是丢弃或重新定向文本。
导入的文本会保留,直到显式丢弃或 Gateway Forget。其仅哈希回执没有定时过期, 并且在这两种操作后都会保留,因此相同的旧快照无法复活已删除的文本。 该存储按旧版 ID 增长,并且只能通过完整初始化重置移除,该重置会在删除客户端状态之前 清除旧的 UserDefaults。新命令及其回复重放则具有不可变的 48 小时期限。 关闭会隐藏已完成卡片,但不改变其回执、确认状态或期限;活动投递不能被丢弃或关闭。
过期副本会在投递状态下次被使用时被修剪,包括打开手机的投递列表。 空闲或挂起的应用不承诺立即按墙钟时间擦除。
Watch 在其自己的 SQLite 日志中拥有出站命令和接收结果。90 秒语音超时不会移除此投递状态 或取消远程运行。两个应用都会在发出应用级准入或终态回执之前提交。永久拒绝明确不是准入, 并且不会创建手机日志行。如果在已接受运行被记录之前分发变得不确定, 恢复会报告不确定性,而不是自动再次执行消息。手机保留其当前 WAL 策略: 这是应用终止恢复,而不是断电持久性声明。
Forget 会在现有不可逆移除事务中删除手机日志行,包括没有路由父级导入的行。
手机会先核算保留的旧版源,如果无法安全完成则拒绝移除。附加式
模式会保留旧读取器的显式路由更新,并且删除触发器会在降级后保持其 Forget 路径有效。
旧应用无法提供新的回执协议。不要移除迁移标记或重置 client-state.sqlite 以降级:
该文件还包含其他用户拥有的客户端状态。
已接受的设计 记录了 模式、迁移、所有权、保留和验证边界。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw