dsh-session-mover:安全迁移 DSH 会话

前言

DeepSeek Harness(DSH)的会话日志采用多帧 zstd 存储,第 1 个帧必须只包含 header 那一行,其余每帧独立可解码。DSH 用 assertZstdHeaderFrame 校验,不满足就抛 SessionPersistenceCorruptionError,同时会静默跳过这条日志——表现为迁移完成后,对话在侧边栏里彻底消失,但文件其实完好。

手工改 header 时容易踩两个坑:一是把整份日志一次性重压,会把「头部帧 + 上千个事件帧」塌缩成单个帧,正好触发校验;二是硬编码日志文件名,v0 叫 session.jsonl.zstd,vN(N>0) 叫 session.vN.jsonl.zstd,硬编码 v0 名字的实现,在较新的 DSH 上会一个会话都定位不到。

这是什么

dsh-session-mover 是一个 DSH 工作流插件,由维护者 yvban 开发。它把 DSH 会话从一个工作区安全搬到另一个工作区,保留可续聊的完整历史,通过帧级 zstd header rewrite 和字节级验证实现。

核心功能

1. 迁移会话

在设置 → 会话迁移里选目标工作区、选会话、点一下,就把会话搬过去,归属即时更新、无需重启。

2. 按标题认会话

列表显示会话标题(与侧边栏同源),并标出它当前属于哪个分组;支持按标题 / 路径 / ID 过滤。

3. 帧级改写

只重压第 1 帧(header,写入新 cwd),body 帧字节原样保留。

4. 字节级校验

帧数不变 + 每个 body 帧逐字节比对 + 头部 id/cwd 核对;不做全量解压,大日志也不吃内存。

5. 整目录备份

迁移前把整个会话目录 + manifest.json 备份到 <DSH_HOME>/storages/session-mover-backup/<id>/<时间戳>/。

6. 拒绝覆盖

目标工作区已有同 id 会话时直接拒绝,不动原会话。

7. 事务性

先写临时文件并校验,通过后才 rename;任何一步失败都会清掉半成品。

8. 归属热更新

通过官方实体 API(WorkspaceEntity.attachSession / detachSession)更新分组,无需重启。

9. 帧结构修复

已经被「整份重压」搞坏、在界面里消失的会话,可以就地修复(修复前自动备份)。

安装与启用

# 有 git(标准写法)
dsh plugin --profile <你的 profile> add github:yvban/dsh-session-mover#main

# 没有 git:pnpm 解析 github: 依赖需要 git,可以改用归档 tarball 的 URL
dsh plugin --profile <你的 profile> add https://github.com/yvban/dsh-session-mover/archive/refs/heads/main.tar.gz

<你的 profile> 通常是 web;桌面版是 desktop。如果 PATH 里没有 dsh,用应用自带的 CLI:

& '<DSH 安装目录>\resources\runtime\cli\bin\dsh.cmd' plugin --profile desktop add github:yvban/dsh-session-mover#main

装完重启 DSH(客户端面板在启动时加载),然后打开设置 → 会话迁移。

典型用法

  1. 目标工作区:下拉里选一个已注册的工作区。
  2. 选中会话:列表按创建时间倒序,每行显示标题 / 当前分组 / 原始 cwd / 体积 / 会话 ID。
    - 打开中 的会话不能迁移(日志被写句柄占着)。
    - 标了 帧结构异常 的会话先用「修复帧结构」,修完重启 DSH 就会重新出现。
  3. 迁移选中会话:完成后归属即时生效,不用重启。

适用场景与注意

适合需要在多个工作区之间整理会话、修复被损坏的会话日志、保持会话归属与日志内容一致的场景。

插件以当前 dsh 进程权限运行,安装前应检查源码与许可证。迁移不会改动 defaultWorkspaceId,也不会动别的会话。热更新归属只用到一个非公开方法 workspaceRegistry.indexHeader(),若该方法在某版本不存在,插件会自动退回「直写 workspace.json」并提示需要重启;再不行就只搬文件,重启后手动把会话拖进目标分组。

短结尾

dsh-session-mover 通过帧级改写和字节级校验,解决了 DSH 会话迁移中会话静默消失的问题,适合需要安全整理工作区会话的开发者。插件目录:https://www.skillhub.cn/plugins/yvban/dsh-session-mover;源码:https://github.com/yvban/dsh-session-mover

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜