前言¶
在 DeepSeek Harness(DSH)里长期跑智能体任务时,会话会不断累积。把暂时不用的会话「归档」能减轻界面干扰,但归档记录和磁盘上的会话目录、缓存索引仍会占空间。若只靠手动逐个找目录删文件,还要同步改 workspace.json 里的 archivedSessionIds 等字段,既慢也容易漏。
下面介绍社区插件 dsh-archive-cleaner(维护者 iTimes6):在 Web GUI 侧边栏把归档会话列成一屏,勾选后批量永久删除,并走宿主 API 做与手工一致的清理步骤。
这是什么¶
dsh-archive-cleaner 是 DSH 的客户端类侧边栏插件:依赖 dsh-better-sidebar 提供的页签扩展点,在侧边栏增加「归档清理」面板。它不替你做归档,只针对已经归档的会话,提供列表、筛选和批量删除。
- 仓库:https://github.com/iTimes6/dsh-archive-cleaner
- 社区目录页:https://www.skillhub.cn/plugins/iTimes6/dsh-archive-cleaner
- 许可证:MIT(资料中版本 0.1.1)
核心功能¶
面板中每一行对应一个归档会话,展示勾选框、标题、工作区、大小、归档时间。已核实的能力包括:
- 批量选择:「全选」「反选」「清空」。
- 搜索:按标题或会话 id 过滤列表。
- 删除:「删除选中 (n)」→ 二次确认 → 调用宿主
POST /archive-cleaner/api/delete。 - 安全边界:未归档的会话会被拒绝(
not-archived);只有文件被系统占用(EBUSY/EPERM)才报locked,不依赖宿主内存里「会话是否还开着」的启发式判断。 - 命令行后门:个别归档会话在面板里删不掉时,可在插件目录执行
node scripts/purge-one.mjs <session-id>,执行与面板相同的清理逻辑。
删除按 id 依次处理(不可恢复):
- 删除
~/.dsh/sessions/<bucket>/<id>/(含session.v4.jsonl.zstd等会话本体)。 - 删除
~/.dsh/storages/session_projcache/sessions/<id>.json(标题/预览缓存)。 - 从
~/.dsh/storages/workspace.json的global.archivedSessionIds、各工作区sessionIds、global.pinnedSessionIds中移除对应 id。
宿主暴露的 HTTP 接口(同源 Origin 校验,否则 403):
GET /archive-cleaner/api/list
→ { ok, totalBytes, sessions: [{ id, title, size, archived, onDisk, workspace }] }
POST /archive-cleaner/api/delete { ids: string[] }
→ { ok, deleted: string[], skipped: [{ id, reason }], freedBytes }
skipped 的 reason 取值为 not-archived、locked、invalid-id。
安装与启用¶
环境要求(README 原文):
- DSH 0.2.1-rc.1+(需要
ctx.betterSidebar扩展点)。 - 已安装 dsh-better-sidebar(本插件只在其页签中注册一格)。
- 无第三方运行时依赖。
在取得插件源码目录后,在项目根目录执行安装脚本。脚本会把本目录以 junction 链到 ~/.dsh/profiles/desktop/node_modules/dsh-archive-cleaner,修改该 profile 的 package.json(会先备份),并登记 bundle。
node scripts/install.mjs
DSH_HOME、DSH_PROFILE_DIR 可覆盖默认的 DSH 路径。
装完后重启 DSH(宿主在启动时加载插件)。随后在侧边栏顶部 + 中选择「归档清理」。
卸载:
node scripts/install.mjs --remove
卸载后若不再需要本地副本,可自行删除插件目录。
典型用法¶
- 确认目标会话已在 DSH 中归档(未归档的 id 会在 API 层被跳过)。
- 打开侧边栏「归档清理」,用搜索框按标题或 id 缩小范围。
- 勾选要清除的会话,点击「删除选中 (n)」,在二次确认后再执行。
- 查看返回中的
deleted与skipped;若某 id 因locked失败,关闭占用该路径的进程后重试,或改用purge-one.mjs处理单个 id。
适用场景与注意¶
适合:本地 DSH 归档会话较多、需要按列表评估占用并一次性释放磁盘的用户;习惯在侧边栏操作、不想手改 workspace.json 和多个 storage 路径的开发者。
注意:
- 删除是永久的,面板已做二次确认,操作前请确认 id 与标题。
- 插件以当前 DSH 进程的用户权限读写
~/.dsh下文件;安装前应阅读仓库源码与 MIT 许可证,确认行为符合你的环境策略。 - 社区目录 skillhub.cn 为独立生态站点,与 DeepSeek / 幻方无官方从属关系;插件归属与维护以 GitHub 仓库 iTimes6/dsh-archive-cleaner 为准。
结尾¶
dsh-archive-cleaner 把「列归档 → 勾选 → 确认 → 删目录与索引」收成侧边栏一条链路,和 README 描述的宿主 API、存储路径一致,适合作为 DSH 归档后的磁盘清理工具。