# 本机磁盘历史缓存 已打开的远端会话会在后台保存到本机磁盘。退出 DSH、重启本机或暂时无法连接 SSH 后,仍可阅读上次保存的历史。缓存没有自动过期或自动删除规则;最近会话的 RAM 保活是独立的性能优化,不控制磁盘副本的寿命。 ## 使用 - 侧栏下方的 **本机历史缓存 / Local history cache** 显示占用空间。打开后可按主机、项目筛选,阅读已保存副本,勾选一条或多条会话后清除。 - 从侧栏打开已保存的远端会话时,原聊天区域先显示本机只读历史,再连接远端并恢复原生聊天界面。远端不可达时,本机历史仍可阅读。 - 缓存读取与远端页面加载并行;远端面板先出现也不会丢弃同一会话尚未返回的缓存。只读副本覆盖在仍正常初始化的远端页面之上,实时界面准备好后再替换。返回本机、切换会话后的旧读取不能覆盖当前页面。 - 用户明确打开会话时,会提升共享目录读取的排队优先级,并预留两个交互等候位置。目录读取仍最多全局并行两个、每台主机一个;尚未发出的交互读取排队超时后,最多再等一轮,已经发出的操作不重放。 - 重连失败会在缓存上方显示具体原因;目录排队失败不会直接宣称主机不可用。纯工具调用显示工具名称,参数折叠展示;原始事件中的回放状态、用量和流片段不进入消息正文,无法识别的正文可下载原始记录查看。 - Web 客户端原生聊天就绪后立即接管,不再等待 iframe 的所有图片、字体等资源完成 `load`。核心脚本失败会尽早报告,缓存中提供“恢复实时聊天”入口。已就绪的会话不会为此重新加载。 - 切换 SSH 通道时,一次受中断的目录读取可以在当前通道继续;前台目录的临时连接中断最多重读一次。认证拒绝、内容校验失败、用户写入和命令不重试。仅带内容哈希的核心 JS/CSS 在旧通道断开且尚未向浏览器发送字节时,可在替代通道重取一次;部分响应直接失败,不拼接新旧文件。 - 达到 **512 MiB、100 条会话或有副本保存满 30 天**,界面会主动提示检查缓存。可以选择清除,或推迟 7 天提醒;提醒不会自动删除数据。 - 清除只影响本机副本。远端会话、模型配置和任务均不改动;下一次明确打开会话时可以重新同步。已在后台派发的旧读取不能把清除的副本立即写回来。 首次打开会话后,每批最多保存 500 条事件;每批落盘后才继续下一批。未完成时显示“完整历史仍在同步”。断线或重启后,从磁盘中最后保存的事件序号继续,不从头下载。没有打开过的会话不会自动整批下载。 `.39` 使用远端当前事件序号校验本机副本。序号相同时不传历史正文,也不重新读取或改写整个本机历史文件;有新增时,先在远端筛出本机缺少的事件,gzip 压缩后经已验证的 SSH 通道传回。读取程序使用现有远端 Node 和 DSH 只读接口,不安装远端插件、不改模型设置,也不重启服务。每次读取只派发一次;中断的读取结束后,下一轮按磁盘游标重新计算缺少的范围。 助手回复、工具结果、标题修改也会推进事件序号,不能只看列表的“最近用户发言时间”。明确打开时校验;侧栏连接且正常轮询时,已缓存运行中会话每 5 秒、其他会话每 30 秒允许一次后台校验,最多并行读取两批。没有本机 UI 轮询时不承诺持续同步;下次打开会补差。 旧版已完整的副本直接复用;旧版未完成的末尾副本先补齐缺失的前段,再进入增量模式。不会删除旧文件来重新下载。 本机副本保存聊天文字和事件记录,包括工具调用/结果;图片、文件等附件的二进制内容仍由远端提供。只读预览使用文字节点,不执行历史中的 HTML 或脚本。原生聊天恢复仍需获取远端当前尾页和实时状态,本机缓存不会伪造当前运行状态或重新执行历史命令。 ## 保存与边界 数据位于本机 DSH Home 的 `remote-workspaces/history/`,目录权限 `0700`、文件权限 `0600`。键包含主机身份、远端工作区身份和会话身份,避免不同主机的同名会话混用。文件先写入临时文件并同步到磁盘,再原子替换;损坏或权限不安全的源文件保留并报告错误,不覆盖用户资料。 这里只保存用户要求的会话历史,不复制 SSH 凭据、模型认证配置、浏览器 Cookie 或连接票据。历史本身可能包含用户消息和命令输出,应按本机私有资料管理。 ## 已完成验证(2026-10-22) - 73 个测试文件、645 项测试通过;typecheck、build、产物检查通过。 - DSH `0.2.1-rc.2`、真实生成密钥 SSH、隔离 HOME:1,100 条生成的测试消息,1,104 条事件,额外读取两页历史后完整落盘。 - 控制进程重启后,不启动 SSH 就能读取完整本机副本。 - 清除选中的副本后其他副本保留,远端历史游标未变化;再次明确打开可重新同步。 - 原生桌面重新启动后,在 SSH 未连接时从缓存管理入口阅读磁盘历史;关闭测试 SSH 服务后,从统一侧栏打开会话仍在原聊天区域显示保存的历史。 - 持久化多年后仍保留、提醒及推迟、跨主机隔离、损坏/权限/路径处理、清除和后台写入竞态均有回归测试。 测试消息是明确生成的隔离数据,不代表模型回答效果。此功能随 `0.3.24-jay.35` 发行;发布状态和安装包验收见 [发行记录](verification.md)。 ## `.39` 增量验收 - 真实生成密钥 SSH + DSH `0.2.1-rc.2`:1,100 条生成消息,完整保存;无变化返回 0 条历史记录,修改标题新增 1 个事件后只返回该事件。 - 此 fixture 历史返回正文首次为 16,255 字节(未压缩 JSON 336,889 字节),无变化为 109 字节,新增 1 个事件为 257 字节。统计包括 gzip/base64 与历史分帧,不含 SSH 协议、发送读取脚本和其他 UI 请求;不是全连接流量或公网耗时。 - 故障注入:保存首批 500 条后断开;重建控制进程,从第 500 条继续,已保存的 0–499 不再传输。 - 覆盖同时间戳新增事件、空差异不读整份本地文件、旧副本接续、异常游标/断档保留旧副本、两批并发上限与清除后的在途/排队读取。 - `scripts/history-delta-smoke.mjs` 对安装包实际运行上述历史同步、控制进程重启、离线磁盘读取、选择清除与远端 PID 保留;不调用模型 API。 原生聊天窗口的实时状态仍由远端提供;本节的“只传差异”指本机磁盘历史同步,不表示插件可以离线执行远端任务。