DeepSeek Harness 会话同步与跨设备续接
DeepSeek Harness(客户端标识 dsh)是接入列表里技术形态最特别的一个:它的会话不是普通的 JSONL,而是分代(generation)事件日志。
会话存在哪里
| 项 | 值 |
|---|---|
| 根目录 | <DSH_HOME>,未设置时是 ~/.dsh |
| 会话路径 | sessions/--<工作目录 slug>--/<session-<uuid>>/session.vN.jsonl[.zstd] |
| 当前代 | 适配器发布当前代 v3(每行一个 zstd 帧),同时把上一代冻结保留在旁边 |
| 依赖 | 读写都需要 zstandard(install-deps 脚本已包含) |
接入同步
- 在接入帮助页选择 DeepSeek Harness → 下载客户端包(服务端地址已自动预填)。
- 解压后首次运行
install-deps.bat(Windows)或./install-deps.sh(macOS / Linux)—— DSH 的依赖脚本会额外装上zstandard。 - 用页面给出的注册命令接入(工作区 API Key 已自动填入),客户端以
HERMES_SYNC_AGENT=dsh启动。 - 重启 DSH(桌面版请确认 MCP 注册行已生效,见下)。
首次启动增量拉取;远端为空时自动推送本地数据完成配对;之后每 5 分钟同步一次。
桌面版注册的坑(值得单独说)
DSH 桌面版把同步客户端注册为 cordis.patch.yml 里的一行 @deepseek-ai/dsh-mcp-client(桌面 profile 名为 desktop)。这一行必须把 cwd 设成一个真实存在的目录:
- 插件的 stdio 配置默认把
cwd设为空字符串,空字符串会直接交给spawn(),Node 抛ENOENT; - 而默认的
failOnStartupError: false会吞掉这个启动错误 —— 桌面版照常启动,但同步静默地从未运行(既没有 MCP 子进程,也没有mcp__hermes-sync__*工具)。
判断方法很简单:看桌面版的工具列表里有没有同步工具。排查时可以把 failOnStartupError 临时设为 true,让启动错误直接显形。cwd 填客户端的解压目录即可。
同步行为与注意点
- 同步端负责完整的分代日志:文件头、
turn/start/step/start帧、连续序号都由写入方保证,所以同步下来的会话 DSH 能直接读。 - 工作区信息由 DSH 自己从会话头重建,不需要你额外配置。
- 不要手工改这些文件:分代日志的完整性一旦破坏,DSH 会拒绝把它当作会话读取。
跨设备与跨 Agent
两台机器各自接入同一工作区,sessions/ 下的会话就是同一份。DSH 上聊到一半的推理过程,可以换台机器继续,也可以交给别的 Agent 接手 —— 走的是同一个会话池。
相关
- 支持的 Agent
- 接入帮助(登录后可用)
- 技术细节:SUPPORTED_AGENTS.md