dsh-session-delete:DSH 侧栏会话一键删除与每对话产出目录

前言

在 DeepSeek Harness(DSH)里长期跑智能体会话时,侧栏会积累大量历史对话。默认能力侧重归档、置顶与工作区归类,若要把某条会话连同其日志、缓存和对话期间生成的文件一并清掉,往往需要手动到 ~/.dsh/sessions 与工作目录下找路径,步骤多且容易漏删子代理子会话或投影缓存。

下面介绍的 dsh-session-delete(维护者 zenghang25)在侧栏会话行的「⋯」菜单末尾增加红色「删除会话」,一次点击完成停止、归档、落盘与文件清理;并为每个对话约定独立的 .dsh-sessions/<session-id>/ 产出目录,删除顶层对话时目录与日志一并进入 Windows 回收站(可还原)。插件归类为客户端,当前版本 0.5.1,许可证 MIT,GitHub 仓库约 1 star。

这是什么

dsh-session-delete 是 DSH 的 Cordis 插件:Host 侧提供删除 API 与每对话产出目录约定,Client 侧通过官方 slot 在侧栏注册菜单项。适用于 DSH 0.2.1-rc.2 及后续 0.2.x / 0.4.x / 0.5.x 路线(Web / Desktop profile,README 写明主要面向 Windows 桌面端)。

它不依赖 DOM 克隆或 React 内部结构,扩展点包括 sidebar.workspaces.session.menu.item、agent/created 以及同源 ctx.webServer 路由。

核心功能

侧栏一键删除

入口 菜单项 行为
会话行 ⋯ 菜单(末位,分隔线 + 红色危险样式) 删除会话 一键删除该会话,无确认弹窗;日志与产出目录进 Windows 回收站,可还原

一次点击会处理:

内容 去向
会话日志(含子代理子会话) Windows 回收站(~/.dsh/sessions/<项目>/<session-id>/)
该对话的产出目录 Windows 回收站(<会话工作目录>/.dsh-sessions/<session-id>/)
投影缓存 永久删除(~/.dsh/storages/session_projcache/sessions/<session-id>.json,可再生)
工作区账目 / 置顶 / 归档集合 detachSession、unpinSession、unarchiveSession(按是否仍 live 决定是否取消归档)

运行中的会话会先走归档与 sessions.flush 持久化屏障,最多等待约 1.5 秒让 live 视图释放,然后继续删除;自 0.4.1 起不会因「会话仍打开」而返回 409 active。删除幂等:幽灵会话或不存在 id 也返回成功;物理删除失败时会回滚归档,避免侧栏灰行悬空。

若会话删除后仍 live 在宿主内存,插件会保持归档隐藏并用客户端逻辑隐藏对应行,避免删掉后又在「未分组」冒出一行;DSH 重启或会话释放后,启动对账会清理残留归档条目。

非 Windows 平台:无回收站支持时回退为永久删除,响应中带警告。

每个对话一个编号目录

会话 id 即编号;shell 中可读 DSH_SESSION_ID(PowerShell $env:DSH_SESSION_ID,bash $DSH_SESSION_ID)。插件在 agent/created 时建立目录并在 per-agent 系统提示词中写明路径,要求生成文件写入该树;子代理沿 parentSession 归属顶层对话,共用同一编号目录。

<工作目录>/.dsh-sessions/<session-id>/
  outputs/    交付给用户的文件
  memory.md   该对话的持久记忆/结论
  tmp/        临时文件

删除顶层对话时,整个 .dsh-sessions/<session-id>/ 与日志目录一并移入回收站。内容寻址的附件对象(~/.dsh/attachments/v1/objects/…)为共享资源,不随会话删除。

Host API(排障与集成)

路由 作用
POST /dsh-session-delete/delete body { sessionId },最多 64 KiB JSON;带认证/Host-Origin 栅栏
GET /dsh-session-delete/ping 只读:{ ok: true, version }
GET /dsh-session-delete/diag 只读:live 会话 / 工作区账目 / sessionQuery 列表

安装与启用

安装命令以 README 为准:add 的参数必须是绝对路径;manifest 中 dsh.bundle.patch 会自动成为 desktop profile 的 bundle 层,无需手改 cordis.patch.yml。

git clone https://github.com/zenghang25/dsh-session-delete.git C:\Users\<you>\Documents\dsh-plugins\dsh-session-delete
dsh plugin --profile desktop add "C:\Users\<you>\Documents\dsh-plugins\dsh-session-delete"

装完后完全退出 DSH 桌面端再启动(Host 与 Client 都会重新加载插件)。

卸载:

dsh plugin --profile desktop remove dsh-session-delete

插件以当前 DSH 进程权限运行文件删除与归档操作;安装前请自行查看仓库源码与 MIT 许可证,确认路径与行为符合你的环境。

典型用法

  1. 在 DSH 桌面端(或已加载该 bundle 的 Web profile)打开侧栏,定位要清理的会话。
  2. 点击该行 ⋯,选择末位红色 删除会话(无二次确认)。
  3. 侧栏行应立即消失;若需恢复,在 Windows 回收站中找到以该 session-id 命名的目录并还原,再在 DSH「已归档」/「未分组」中取消归档或重新打开会话。投影缓存不会进回收站,重启后会重新生成。

回收站还原后,日志回到原路径即可;投影缓存删除不可通过回收站恢复。

开发者本地验证(仓库内):

node test\host.test.mjs
node test\client.test.mjs

适用场景与注意

适合谁:主要在 Windows 上使用 DSH Desktop、希望侧栏快速清会话且保留「误删可还原」能力(日志 + 产出目录进回收站)的开发者;同时希望 agent 把对话产出收敛到 .dsh-sessions/<id>/ 而不是散落 workspace 根目录。

务必注意:

  • 一键直删、无确认框;点错即进入删除流程(Windows 上仍可回收站还原日志与产出目录)。
  • 删除当前正在查看的对话会先停止运行中的工作并关闭视图。
  • 主要测试与回收站路径在 Windows;其他平台为永久删除。
  • UI 文案在页面加载时按当前语言确定,切换语言后需刷新页面。
  • cost-meter 账本不随会话删除而清理。

社区插件目录见 SkillHub 条目;与 DeepSeek / 幻方无官方从属关系,属 DSH「一切皆插件」生态中的第三方作品。

结尾

dsh-session-delete 把「删会话、清缓存、收拢产出目录」收成侧栏一次操作,并用官方 slot 与 Host 路由实现,避免依赖脆弱 DOM 注入。需要源码、Issue 与版本历史时,见 GitHub:zenghang25/dsh-session-delete。

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

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

Xiaoye