结论:目录里就三类东西——配置声明、压缩的会话记录、明文的用量缓存。锁文件和缓存删了会自己长回来,会话文件删了这一轮就真接不上了。
上期写的是怎么接着上一轮说。这期往磁盘里看:那五百多 KB 都是什么,哪几个能动手删。
本次实测
环境:WSL2(Ubuntu)、Node 22.23.2、dsh 0.2.0-rc.2。沙箱 /tmp/dsh_20261023/,每次调用都套 timeout 280。
动手前先数一遍:~/.dsh 底下 50 个文件、528 KB。结构是四层。
| 路径 | 是什么 | 体积 |
|---|---|---|
profiles/headless/ |
4 个文件:package.json、cordis.yml、cordis.patch.yml、pnpm-workspace.yaml |
约 700 字节 |
.anonymous-user-id |
一个 36 字符的随机串 | 37 字节 |
sessions/<cwd转义>/session-<uuid>/ |
session.v4.jsonl.zstd 加一把 session.lock |
10–44 KB / 会话 |
storages/session_projcache/sessions/*.json |
明文:标题、token 用量、上下文占用 | 4–6 KB / 会话 |
profiles/headless/package.json 里只有一句有用的话:这个 profile 由 @deepseek-ai/dsh-base 和 @deepseek-ai/dsh-headless 两个 bundle 拼起来。剩下三个是空入口,注释写着改 cordis.patch.yml,别改 cordis.yml。
会话目录那层名字是工作目录转义出来的:/tmp/dsh_20261023 变成 --tmp-dsh_20261023--。换个目录跑,就另起一个一级目录,两边互不相通。
会话文件是压缩的。新建一个会话,文件 9,726 字节,zstd -d 解开 27,437 字节,2.8 倍,20 条事件。跑满五轮再看,40,860 字节、117,696 字节、64 条,type 有 18 种:系统提示、用户消息、推理、助手回复、请求头、轮次起止各占一类。
内容比想象的实在。解开能看到完整 system prompt(开头就一句 You are an AI agent powered by DeepSeek Harness.)、我说过的每一句、以及 request/header 里的模型参数:provider: deepseek-official、model: deepseek-flash、maxTokens: 256000、reasoningEffort: high。我顺手搜了 sk- 开头的密钥,0 处,这点算干净。
那份明文缓存比名字直白。打开 json,rows 里有 title、tokenUsage、contextPressure、contextBreakdown 四项,五轮对话累计写在里面:uncachedInputTokens: 6286、outputTokens: 240、cacheReadTokens: 21376,上下文窗口 contextWindow: 1000000,当前压力 pressureTokens: 5674。想核账不用开界面,读这个文件就够。
每轮都往里追加。两个字的闲聊跑一轮,文件从 33,019 涨到 40,860,多出 7,841 字节;再跑一轮,又加 7,958。五轮下来没看到截断。
删除测试分三步,每步都先备份、删完再续跑一轮。
| 删掉什么 | 续跑结果 | 后续 |
|---|---|---|
session.lock(0 字节) |
exit 0,3.3 s,正常答话 | 下一轮自动重建,仍是 0 字节 |
storages/.../session-<uuid>.json |
exit 0,3.8 s,正常答话 | 自动重建,内容照旧 |
整个 session-<uuid>/ 目录 |
exit 1,2.1 s | 报 session "…" does not exist; omit --session-id to start a new Session |
锁和缓存都只是加速用的,删了无痛。真正有分量的只有那份 zstd。
顺带记一个细节:10 月 16 日那次留下的会话文件权限是 600,只有自己能读;同一目录里的锁文件是 664。
一条坑:删了会话,缓存不跟着瘦
现象:把 sessions/--tmp-dsh_20261023--/session-<uuid>/ 整个删掉,续跑如期报错退出,可 storages/session_projcache/sessions/session-<uuid>.json 还在原地,一个五 KB 上下的死文件。删得越多,这种残件攒得越厚,du 一看跟没清一样。
复现:
sh
rm -rf ~/.dsh/sessions/--tmp-xxx--/session-<uuid>/
ls ~/.dsh/storages/session_projcache/sessions/ | grep <uuid> # 文件还在
解法:清一个会话要按 uuid 配对删两处,会话目录加同名 json。批量清更省事:按工作目录整块删 sessions/--<cwd转义>--/,连同缓存里那几条一起处理,不用一个个 uuid 对。
它也不自己回收。我 10 月 6 日那次 eval 的会话,43,896 字节,到今天还在目录里躺着,没有任何清理命令。
一句话总评
4 / 5,只评"目录透明度"这一项。 结构清楚,明文缓存能直接读出标题和 token 用量,解压就能审计;扣分在删会话不连带清缓存,以及目录只涨不收。
测试环境:WSL2(Ubuntu)、Node 22.23.2、dsh 0.2.0-rc.2。文件大小、事件数、耗时、退出码均为本机实测。
文 / 程实
广告


