删除 / 清理 DeepSeek Harness 会话
DSH 的一个会话落在三层目录里:$DSH_HOME/sessions/--<项目>--/<session-id>/session.v4.jsonl.zstd。项目目录名是从工作目录转写来的可读名——空格变成 ~0020,所以 C:\Users\you\my project 会写成 --C-Users-you-my~0020project--——没有工作目录的会话落在 _no-cwd/ 下。删旧会话本质还是删文件,但 workspace.json 里的条目不会自己消失。
选 $DSH_HOME 里的 sessions 目录(默认 ~/.dsh)。工具在本地读文件名、大小和日期,然后给出备份命令和删除命令。
整个过程不上传。浏览器自己删不掉东西——真正执行的是你粘贴的那两条命令。
| 文件 | 大小 | 修改时间 |
|---|
这个目录里没有 .zstd 或 session.jsonl 文件。要选装这些文件的那一层,不是 profile 目录。
确认端口没被占用
开工前先把占着端口的进程停掉,再确认没有回应。下面两条命令都应该什么都不打印。
# macOS / Linux
lsof -i:3080
# Windows
netstat -ano | findstr 3080先备份,再删
先把整个 sessions 目录复制一份。对话内容只有这一份。
# macOS / Linux
cp -a ~/.dsh/sessions ~/dsh-backup/
# Windows PowerShell
Copy-Item -Recurse "$env:USERPROFILE\.dsh\sessions" "$env:USERPROFILE\dsh-backup\sessions"复制完成后再执行。这些命令只删你选中的文件,别的都不动。
# macOS / Linux——把 <项目> 与 <会话 id> 换成表里的值
rm -rf ~/.dsh/sessions/--<项目>--/<会话 id>/
# Windows PowerShell
Remove-Item -Recurse "$env:USERPROFILE\.dsh\sessions\--<项目>--\<会话 id>"删了文件,workspace.json 里的条目还在。删完跑一次会话索引体检,看差在哪;要消掉这个差,只有从备份把文件还原回来。
想要一键清整个文件夹?
现在只能一个个点。如果有一键版能省你时间,告诉我们一声,够人数我们就做。留一句就行,页面依然不读取你的文件。
归档还是删除
归档不等于删除。它只是把会话从各个视图里藏起来,日志和占用一点没变,而且当前界面没有取消归档的入口。要把磁盘空间真正拿回来,只能删文件。
一个会话为什么会涨到几十 MB
DSH 的会话是事件溯源的追加日志:每条消息、每次工具调用、每个工具结果、每次审批都追加成一帧,给模型看的对话历史是从这份日志推导出来的,不是另存一份。日志不原地重写,所以文件只会变大。
帧是分别做 zstd 压缩的,所以 22 MB 的会话可能只有几千帧。体积通常来自工具输出:某次 bash 打出一个大文件,整段原样进了日志。
判断哪些能删的三个依据
最后访问时间:几个月没打开的会话是最安全的候选,这张表里的修改时间就是这个信号。
工作区归属:项目目录已经从磁盘上消失的会话,即使打开也接不上。会话索引体检专门列这种孤儿——磁盘上有、列表里没有,以及反过来。
单文件大小:按大小排序看前几个。一次长调试留下的 30 MB 会话,价值高于五十个 200 KB 的,也是备份时最疼的那个。
删之前先验备份
要比两个数,不是一个:复制过去的 .zstd 文件数,和总字节数。哪个数短了,说明复制被打断过。
# macOS / Linux
find ~/.dsh/sessions -name "*.zstd" | wc -l
du -sb ~/.dsh/sessions | cut -f1
# Windows PowerShell
(Get-ChildItem -Recurse -Filter *.zstd "$env:USERPROFILE\.dsh\sessions").Count
(Get-ChildItem -Recurse "$env:USERPROFILE\.dsh\sessions" | Measure-Object Length -Sum).Sum文件删了,列表里的条目还在
删掉会话文件不会删掉 storages/workspace.json 里那一行,storages/session_projcache/ 下的单会话缓存也有自己的一行。所以会出现「列表里有、打不开」。
会话索引体检会两边都读一遍,把差值打出来。随包发布的包里没有文档化的重建索引命令,所以误删之后最靠谱的路是拿刚验过的备份还原——这也是上面顺序的原因。
正在跑的会话会怎样
不要删。agent 干活时会持续往这个文件追加,而 POSIX 上被删的文件要等进程关闭才真正释放,结果可能是它还在往一个目录里已经不存在的文件写。
先在界面里关掉会话,确认进程没了,再删。只是不想在列表里看到它,就用 @michengai/dsh-archive-manager 归档;归档不改磁盘占用,要拿回空间,只有删文件这一条路。
常见问题
归档会释放磁盘吗?
不会。归档只是把会话从各个视图里藏起来,日志文件和占用一点没变。要把空间拿回来,只有删文件。
删了会话文件,列表里还会有吗?
会。文件删了,workspace.json 里那一行还在;在索引重建或从备份还原之前,列表仍然认这个负载已经没了的会话。
正在运行的会话能删吗?
不能。先在界面里关掉会话,确认进程没了,再删文件。
这就是那个 dsh-purge 插件吗?
不是。dsh-purge 是做自身环境红队测试的插件,改的是提示词和审批策略;这页是会话文件清理工具,在浏览器里读 $DSH_HOME/sessions,不上传任何文件。