dsh-session-delete:在 DSH 侧边栏永久删除会话

前言

DeepSeek Harness(DSH)在 Web GUI 里管理会话时,官方侧栏菜单提供置顶、重命名、分叉、归档等操作,归档会把会话从主列表隐藏,但持久化目录与投影缓存仍在磁盘上。若你希望在确认后彻底移除某次会话的记录与完整历史,而不是长期保留可恢复的归档副本,就需要额外能力。下面介绍社区插件 dsh-session-delete(npm 包名 dsh-session-remove):在侧边栏会话菜单中增加「删除会话」,经确认后由宿主路由物理删除相关文件并同步注册表与界面。

这是什么

dsh-session-delete 是 DSH 的 cordis bundle 插件,维护者为 rhl88,在 SkillHub 插件目录 中归类为客户端相关能力(实际包含宿主 index.js 与 Web 客户端 client.js 两半)。它不改变 DSH 核心,仅在现有侧边栏会话菜单中追加一项破坏性操作,补足「只能归档、不能永久删除」的限制。

核心功能

界面与交互

客户端在 sidebar.workspaces.session.menu.item 上注册菜单项(顺序 500,带分隔线与危险样式),排在置顶、重命名、分叉、归档之后。点击后弹出确认对话框;确认后会先调用 archiveSession(停止活动并释放客户端对当前会话的引用),再向宿主发起删除请求。失败时对话框展示宿主返回的信息;若归档已成功但删除失败,会话仍保持归档状态,可通过「取消归档」恢复。

删除范围(v1)

宿主路由 POST /session-delete/delete 在一次成功流程中会:

  1. 删除 JSONL 后端会话目录:~/.dsh/sessions/<项目目录>/<会话 id>/(含各代格式、压缩变体与租约文件)。
  2. 删除投影缓存:~/.dsh/storages/session_projcache/sessions/<会话 id>.json。
  3. 从工作区记账中 detach 该 id,并从置顶、归档集合中移除,广播 api-session/removed,连接中的浏览器侧边栏即时对账。

v1 暂不删除的项:内容寻址的附件字节(跨会话共享)、子代理会话日志、全文检索索引行(下次搜索会对账剔除已删会话)。

宿主侧流程与安全设计

删除前会解析会话(活会话或持久化 stat),未知 id 返回 404。通过 workspaceRegistry.archiveSession 停止运行中的 turn、任务与子代理等;在默认 20 s 内等待会话离开活集合并关闭持久化写句柄(Windows 下句柄未释放时无法删目录)。超时返回 409 session-busy,文件不动,可稍后重试。目录删除前做 containment 检查,并对 transient lock 做有限重试。

注册表相关调用均带超时且失败不致命:工作区操作队列卡住时仍可能完成文件删除,响应中会用 degraded 说明未完成步骤。活动会话未释放句柄时返回 409。

依赖与兼容

package.json 未声明 npm 依赖与 dsh peer 范围;宿主仅使用 Node 内置模块,客户端依赖 DSH 基线浏览器模块(react、@deepseek-ai/dsh-client-store、@deepseek-ai/dsh-client-ui-primitives)。当前资料中版本为 1.1.0,许可证 MIT。

安装与启用

任选一种安装方式(命令来自仓库 README):

# 从 GitHub 安装(推荐)
dsh plugin add github:rhl88/dsh-session-delete

# 从本地目录或预构建 tarball
dsh plugin add D:\path\to\dsh-session-delete
dsh plugin add D:\path\to\local-dsh-session-delete-1.0.0.tgz

手工在 profile 目录安装时,需在 dsh.profile.bundles 中加入 bundle 名 dsh-session-remove(与 @deepseek-ai/dsh-base、@deepseek-ai/dsh-web-app 等并列),例如:

cd C:\Users\Administrator\.dsh\profiles\desktop
pnpm add github:rhl88/dsh-session-delete

dsh plugin add 与插件页安装会默认启用该 bundle;仅手工 pnpm add 时需要自行改 bundles 列表。

装完后重启 DeepSeek Harness,并刷新 GUI 页面。宿主半变更在 desktop 组合下不热重载(HMR root: []),改宿主代码或切换 bundle 后需重启应用。

只安装一份:行 id session-delete 与浏览器插槽 id 固定,同时启用两份同类安装会冲突。

典型用法

  1. 在 DSH Web 界面打开目标工作区,在侧边栏找到要清除的会话。
  2. 打开该会话的菜单,在归档项之后选择「删除会话」(危险色项)。
  3. 在确认对话框中再次确认;若当前正在该会话中,会先归档并停止活动,再执行永久删除。
  4. 成功后侧边栏行消失;若收到 409,等待会话完全空闲后重试。

排查卡住时可查看已部署 index.js 同目录下的 session-delete.debug.log(宿主逐步日志)与浏览器侧的 session-delete.client.log(经 POST /session-delete/trace 写入)。包内自测命令:node test/paths.test.js、node test/module-load.test.js、node test/delete-flow.test.js。

适用场景与注意

适合:需要合规或习惯上「删干净」会话目录与投影缓存、而不只是归档隐藏的开发场景;本地或自管 DSH 实例上清理试验会话。

务必注意:

  • 插件以当前 DSH 进程权限读写 ~/.dsh 下路径;安装前请阅读 GitHub 源码 与 MIT 许可证,确认可接受永久删除行为。
  • 删除不可通过插件本身恢复;v1 不清理共享附件与子代理日志,磁盘上仍可能留有相关内容。
  • SkillHub 等为社区目录,与 DeepSeek / 幻方无官方从属关系;星标与收录信息以各站点当时展示为准(资料中 GitHub 星标为 0)。

结尾

dsh-session-delete 用一条侧边栏菜单和宿主删除路由,把 DSH 会话管理从「归档隐藏」扩展到「确认后永久移除」主会话持久化与注册表项,并处理活动会话与注册表超时的边界情况。进一步了解与安装:

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

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

Xiaoye