dsh-session-purge:Harness 会话永久清理与日志原地脱敏

前言

DeepSeek Harness(DSH)在本地会积累会话磁盘日志、投影缓存、工作区记账,以及工具输出落在 %TEMP% 下的临时目录。子代理会话还会通过 parentSession 形成级联。若只想删掉某次对话的落盘痕迹,或希望在保留帧结构的前提下把 zstd 日志里的密钥掩码写回,官方客户端未必提供同等粒度的运维入口。dsh-session-purge 是社区第三方插件(与 DeepSeek 官方无隶属关系),在 Harness 内部实现面上做「永久删除」与「原地脱敏」,并附带可复制的页面布局重置指令。下面按定位、能力、安装与用法说明。

这是什么

维护者 Shihang-Hu,分类 admin-security。插件在宿主进程内提供删除管线、脱敏管线,以及设置面板与侧栏菜单入口;HTTP 路由仅接受与宿主 api-request-trust 一致的 loopback 授权。README 写明兼容基线为 @deepseek-ai/dsh-desktop 0.2.1-rc.3(2026-10-26 逐触点审计);nightly 升级可能静默破坏兼容,升级 DSH 后宜先跑单元测试验证。

核心功能

永久删除

一次操作可覆盖:

  • 活会话:ctx.get('sessions') 侧 flush 后驱逐;
  • 投影缓存域 session_projcache、工作区域 workspace 的记账与相关集合;
  • $DSH_HOME/sessions/<projectKey>/<id>/ 磁盘日志目录;
  • 临时目录中内容提及该会话 id 的工具输出(归因清扫,受文件数/字节预算约束);
  • header.parentSession === id 的子代理级联(深度上限 MAX_CASCADE_DEPTH = 8,超出报告 cascadeTruncated: true)。

删除顺序为先删日志并验证删净,再清记账;符号链接一律拒删;运行中会话拒绝(409)。完成对话框报告释放字节、级联数与临时清扫摘要。删除即永久,无回收站。

原地脱敏

对会话 zstd 日志逐帧解压 → 替换 → 重压缩,帧数与行结构不变。写回前备份、写回后校验,失败回滚;成功则删备份。

  • secrets:完整值(6–512 字符,至多 64 项)→ [REDACTED:xxxx…lenNN];
  • prefixes:4–32 位前缀(至多 64 项),清除前缀后连续的字母数字/_/-。

脱敏只改写本地日志,不能替代密钥轮换。 需 Node ≥ 23.8 的 zstd API;不满足时脱敏路由返回 501,其余功能仍可用。运行中拒绝(409);请勿对当前正查看的会话执行(界面状态未验证)。

入口与布局重置

入口 位置
设置 → 会话清理 按工作区分组列表:单会话删除(行内两段确认,Enter/Esc/10 秒撤防)、脱敏对话框、「删除工作区」、搜索与「仅磁盘残留」筛选
会话行「…」菜单 官方槽位 sidebar.workspaces.session.menu.item 末尾「删除」,不切换当前对话

「会话清理」面板底部提供 F12 → Console 粘贴的布局重置脚本(只清布局相关 localStorage 前缀,不动快捷键、草稿、终端与计划任务);重载后空白可手动重启客户端。备选与更严边界见仓库 README。

安装与启用

本插件无 npm 依赖;README 未给出 dsh plugin add github:… 一类命令。安装会修改 DSH profile,步骤为克隆或下载仓库后二选一(二者都做会加载两次):

  1. 将 dsh-session-purge 放入 profile 的 bundles 列表;或
  2. 在目标 profile 的 cordis.patch.yml 中 insert 一行 name: 'dsh-session-purge'。

桌面版实测可通过 dsh-hmr 热加载插件行,无需重启。当前 package 版本 0.5.8,许可证 MIT,要求 Node >=20(脱敏另需 ≥23.8)。

安装前请自行审阅 lib/index.js 等源码:插件以当前 DSH 进程权限操作磁盘与内部存储域。

典型用法

验证安装与兼容

在插件目录执行:

node --test test/purge.test.mjs

README 记录当前 28/28(Node 24.21;无 zstd 的运行时跳过脱敏用例)。

界面操作

  1. 打开 设置 → 会话清理,按工作区浏览会话;可用搜索或「仅磁盘残留」筛掉仍占磁盘的条目。
  2. 单会话:行内两段确认后删除,或打开脱敏对话框填写 secrets / prefixes。
  3. 工作区级:组头「删除工作区」两段确认;成员运行中整体 409;部分失败会保留工作区并逐条报告。
  4. 侧栏会话行「…」→ 删除,删除该行会话且不切换当前对话。

HTTP 路由(loopback)

宿主同源路由(供理解行为,日常使用以 UI 为主):

GET  /_dsh/session-purge/list
POST /_dsh/session-purge/delete           → body: { sessionId }
POST /_dsh/session-purge/delete-workspace → body: { workspaceId }
POST /_dsh/session-purge/redact           → body: { sessionId, secrets?, prefixes? }

适用场景与注意

适合需要在本地 Harness 上合规清理会话落盘数据、或在保留日志结构下掩码敏感字段的开发者与运维。注意 README 列出的限制:不回收 attachments 引用计数;TEMP 仅删内容归因到会话 id 的输出;删除当前正查看的会话宿主不拦;子代理不在面板单独列出,清理依赖主会话级联,孤儿子代理需手工处理;驻留会话可能保守跳过直至重启;Electron 渲染缓存可能短期保留已渲染内容(推断,未端到端验证)。

社区插件目录为独立站点,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-session-purge 把会话删除(日志、缓存、记账、临时输出、子代理级联)与 zstd 原地脱敏集中到设置面板与侧栏入口,并明确「无回收站、脱敏不轮换密钥」的边界。详情与变更见仓库 README 与 CHANGELOG。

  • 目录页:https://www.skillhub.cn/plugins/Shihang-Hu/dsh-session-purge
  • GitHub:https://github.com/Shihang-Hu/dsh-session-purge
羽毛球分组比赛记分
小程序二维码

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

Xiaoye