DSH Toolbox

DSH 存储结构参考

DSH 往磁盘上写了什么。基于真机实测(0.2.1-rc.2)。负载、列表条目、标题在磁盘上是三样东西;把它们当成一件,就会看到「文件都在、列表是空的」。

实测时间 2026-11-13,DSH 0.2.1-rc.2,Windows。

会话格式对照

v4legacy
文件名session.v4.jsonl.zstdsession.jsonl.zstd
由谁产生DSH 0.2.x 网页版 / CLI / TUI旧桌面版运行时
帧结构多帧、追加写多帧、追加写
能否并存同一个会话目录里可以两个文件都在
实测最大单文件 22,832,359 字节单文件 21,360,396 字节

两种格式都是「可独立解压的 zstd 帧」顺序追加而成。任何工具都应该把它们当不透明字节处理。

目录布局

工作区目录名是「绝对路径的 slug」,不是 workspace id。两台机器路径不同,同一个工作区会得到两个不同的目录名。

~/.dsh                          DSH 数据根(网页版 / CLI / TUI)
├─ sessions/
│  └─ --C-Users-you-my~0020project--/  "C:\Users\you\my project" 的 slug
│     └─ session-<uuid>/         一个会话一个目录,目录名原样使用
│        ├─ session.v4.jsonl.zstd
│        └─ session.jsonl.zstd   旧格式,可能与 v4 并存
└─ storages/
   ├─ workspace.json             工作区 + 会话列表
   ├─ session_projcache.json     标题与逐回合统计(聚合)
   ├─ session_projcache/sessions/<id>.json   同样的数据,逐会话一份
   └─ schedule.json              设备本地提醒(不要同步)

路径 slug 规则

由绝对路径推导:去掉冒号,反斜杠换成连字符,空格编码为 ~0020,两端各加两个连字符。C:\Users\you\my project → --C-Users-you-my~0020project--

workspace.json(unit 版本 2)

这个文件决定「会话在不在列表里」。只同步会话负载而不同步它,会话就是不可见的。

字段含义合并规则
global.workspaceIds已注册的工作区并集
global.archivedSessionIds被隐藏的会话并集(幂等)
global.pinnedSessionIds置顶会话并集
tables.workspaces.<id>.path本机绝对路径保留本地值,永不采用远端
tables.workspaces.<id>.title显示名本地有值就用本地
tables.workspaces.<id>.sessionIds有序会话列表并集
tables.workspaces.<id>.createdAt / updatedAt时间戳取小 / 取大

session_projcache.json(unit 版本 3)

标题、回合数与 token 用量在这里,不在 workspace.json。DSH 同时保存聚合表与逐会话文件,两者的记录都算「有标题」。行结构是 {ver, seq, val},合并时先比 ver,再比 seq。

字段含义
tables.sessions.<id>.identity.cwd该会话工作区的绝对路径(把会话映射到工作区的权威依据)
tables.sessions.<id>.rows.title显示标题;null 表示无标题
tables.sessions.<id>.rows.sessionStatsturns、steps、llmMs、decodeTokens 等
tables.sessions.<id>.rows.tokenUsage累计与最后一回合的 token 分桶

现象 → 原因

现象原因
会话文件在,DSH 列表里没有该 session id 不在 tables.workspaces.<id>.sessionIds 里
会话在列表里,但没有标题该 id 没有 projcache 记录(聚合或逐会话都算)
点开条目是空的索引里的 id 在磁盘上没有对应的负载目录
会话显示的是旧状态两种格式并存,DSH 只读其中一个,另一个变旧
归档了还占空间归档只是隐藏,并不删除
同步「成功」了但列表是空的只同步了 sessions/,没有同步 storages/

怎么检查你自己的安装

会话索引体检在本机跑完这些检查:选一个 DSH 数据根目录,得到不一致的 id 清单和每条的一行修法。

打开会话索引体检 →