dsh-archive-cleaner:侧边栏批量清理 DSH 归档会话

前言

在 DeepSeek Harness(DSH)里长期跑智能体任务时,会话会不断累积。把暂时不用的会话「归档」能减轻界面干扰,但归档记录和磁盘上的会话目录、缓存索引仍会占空间。若只靠手动逐个找目录删文件,还要同步改 workspace.json 里的 archivedSessionIds 等字段,既慢也容易漏。

下面介绍社区插件 dsh-archive-cleaner(维护者 iTimes6):在 Web GUI 侧边栏把归档会话列成一屏,勾选后批量永久删除,并走宿主 API 做与手工一致的清理步骤。

这是什么

dsh-archive-cleaner 是 DSH 的客户端类侧边栏插件:依赖 dsh-better-sidebar 提供的页签扩展点,在侧边栏增加「归档清理」面板。它不替你做归档,只针对已经归档的会话,提供列表、筛选和批量删除。

核心功能

面板中每一行对应一个归档会话,展示勾选框、标题、工作区、大小、归档时间。已核实的能力包括:

  1. 批量选择:「全选」「反选」「清空」。
  2. 搜索:按标题或会话 id 过滤列表。
  3. 删除:「删除选中 (n)」→ 二次确认 → 调用宿主 POST /archive-cleaner/api/delete。
  4. 安全边界:未归档的会话会被拒绝(not-archived);只有文件被系统占用(EBUSY / EPERM)才报 locked,不依赖宿主内存里「会话是否还开着」的启发式判断。
  5. 命令行后门:个别归档会话在面板里删不掉时,可在插件目录执行 node scripts/purge-one.mjs <session-id>,执行与面板相同的清理逻辑。

删除按 id 依次处理(不可恢复):

  1. 删除 ~/.dsh/sessions/<bucket>/<id>/(含 session.v4.jsonl.zstd 等会话本体)。
  2. 删除 ~/.dsh/storages/session_projcache/sessions/<id>.json(标题/预览缓存)。
  3. 从 ~/.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

卸载后若不再需要本地副本,可自行删除插件目录。

典型用法

  1. 确认目标会话已在 DSH 中归档(未归档的 id 会在 API 层被跳过)。
  2. 打开侧边栏「归档清理」,用搜索框按标题或 id 缩小范围。
  3. 勾选要清除的会话,点击「删除选中 (n)」,在二次确认后再执行。
  4. 查看返回中的 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 归档后的磁盘清理工具。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜