前言¶
DeepSeek Harness 默认提供“归档”会话功能:会话行从列表消失,但底层文件仍完整保留在磁盘上。若需要在本地完全清除某段对话留下的所有痕迹,现有方式并不支持。下面介绍一个能实现“永久删除”的插件。
插件定位¶
- 名称:dsh-session-delete
- 维护者:HHHHHH233333
- 分类:admin-security
- 简介:在会话右键菜单增加“彻底删除会话…”项,删除聊天日志、投影缓存、溢出文件以及派生的子代理会话。
删除什么¶
确认框中点击“彻底删除”后,依次执行以下步骤:
- 停止并隐藏:调用 Workspace 注册表的
archiveSession(id, { stopActivity: true }),停止当前回合、子代理、后台任务与定时器,并将会话行移出所有分组视图。 - 删除聊天记录:删除
$DSH_HOME/sessions/<项目目录>/<会话 id>/下的session.v4.jsonl.zstd及同目录文件。 - 删除派生数据:删除
$DSH_HOME/storages/session_projcache/sessions/<会话 id>.json(标题、标题候选、token 统计、回合大纲等)。 - 删除临时文件:删除
%TEMP%/dsh-spill-*/session-<sha256(id)[:12]>/下的工具输出溢出文件。
删除操作不依赖“回收站”,也不发送网络请求,全部为本地文件系统操作。若某文件正被占用导致删除失败,会将失败清单返回给界面,提示“重启应用后重试”。系统会在删除后约 6 秒及 12 秒各扫一次(投影缓存有 5 秒写回窗口),晚到的检查点不会重新写入记录。
子代理会话¶
默认勾选“同时删除它派生的子代理会话”。规则如下:
- 只沿
origin: "subagent"的parentSession链向下展开(含多级)。 - 分叉(fork)不会被连带删除——分叉是一段独立对话,
origin为空。 - 取消勾选时只删除你点的那一个会话。
安装与启用¶
插件安装方式之一是使用 link: 依赖,将本目录链接到桌面应用 profile。在 %USERPROFILE%\.dsh\profiles\desktop\package.json 中添加:
dependencies: "dsh-session-delete": "link:<本目录>"
dsh.profile.bundles: [ ..., "dsh-session-delete" ]
注意:这个目录不能删除或改名。安装后需要重启桌面应用,插件行会在启动时按
dsh.profile.bundles组合进 profile。重启后访问http://127.0.0.1:<端口>/.dsh-session-delete/health应返回{"ok":true,...};侧栏会话行右键菜单最后一项会出现“彻底删除会话…”。
分享给别人¶
插件为自包含的 npm 包,无运行时依赖与构建步骤。
- 直接给文件夹:压缩整个
dsh-session-delete目录,对方在该目录执行powershell -ExecutionPolicy Bypass -File .\install.ps1,脚本会自动写入依赖、追加 bundle 并校验。 - 给一个 tarball:从 Releases 下载
dsh-session-delete-0.1.0.tgz或本地pnpm pack,对方执行pnpm add .\dsh-session-delete-0.1.0.tgz,再在 profile 中追加 bundle 并重启。 - 从仓库装:在 DSH 插件管理中填入仓库地址
https://github.com/HHHHHH233333/dsh-session-delete,管理器会自动安装并添加 bundle。 - 发到 npm:将
"private": true改为false后npm publish。注意包名可能被占用,必要时使用 scope 前缀,并同步修改dsh.profile.bundles中的条目与link:路径。
使用方法¶
- 在侧栏中右键点击会话(或通过“…”菜单)。
- 选择“彻底删除会话…”(位于“归档会话”和“复制会话 ID”之后,带分隔线)。
- 确认框会显示会话标题、将要删除的会话数与文件数、是否包含子代理。
- 点击“彻底删除”。成功后,该会话行从列表消失,磁盘上不再有对应记录。
配置(可选)¶
在 cordis.patch.yml 中添加 config 可覆盖默认值:
- id: dsh-session-delete
config:
sessionsRoot: D:\dsh\sessions # 默认 $DSH_HOME/sessions
dshHome: D:\dsh # 默认 $DSH_HOME,其次 ~/.dsh
spillRoots: [D:\temp\dsh-spill] # 额外的溢出根目录;系统临时目录总会扫描
settleMs: 1200 # 停止后等待多久再删文件
lateSweepMs: 6000 # 后台补扫延迟;0 关闭
HTTP 接口¶
接口仅本机界面调用,服务监听回环地址,跨站 Origin 会被拒绝,sessionId 必须为单个安全路径段。
GET /.dsh-session-delete/healthGET /.dsh-session-delete/preview?sessionId=<id>&subagents=1POST /.dsh-session-delete/delete,body{ "sessionId": "<id>", "deleteSubagents": true }
preview 仅统计不删除;delete 返回 { ok, found, targets, artifacts, files, bytes, complete, failures }。
已知边界¶
- 共享附件:内容寻址的附件/图片仓库跨会话共享,不属于某一个会话,不会被删除。
- 工作区成员表:
storages/workspace.json的sessionIds中会留下已删会话的 id,插件会在下次启动时清理archivedSessionIds/pinnedSessionIds中不存在的 id。 - 归档 id 的保留:删除后故意不立即取消归档,以免正在运行的界面把该行重新显示;清理放在下次启动。
- 搜索索引:当前使用内存数据库构建会话检索,从不落盘,无需清理索引文件。
- 文件占用:Windows 上若文件被子进程占用,删除会失败并回报清单;关闭相关任务或重启应用后再删一次。
- 其它机器的副本:本插件只处理本机文件,不影响远端备份。
适用场景与注意¶
- 适合需要在本地彻底清除会话痕迹的 DSH 用户,尤其是对隐私敏感、希望清理磁盘占用与历史记录的场景。
- 插件以当前 DSH 进程的权限运行,安装前应检查源码与许可证。
- 删除当前正在使用的会话会成功,但会话行消失后当前视图随之失效,需自行确认结果。
结尾¶
该插件补齐了 DSH 在会话清理上的“删除”能力,让用户能真正从本地移除会话及其相关数据。更多细节与源码:https://github.com/HHHHHH233333/dsh-session-delete