dsh-session-delete-plugin:为 DSH 侧栏会话菜单增加永久删除

前言

DeepSeek Harness(DSH)在会话管理上默认更接近「归档」:把会话 id 记入持久化的隐藏集合,磁盘上的日志与缓存仍保留。对需要真正腾出空间、或希望会话从列表与磁盘一并消失的场景,仅靠内置能力不够。下面介绍社区插件 dsh-session-delete-plugin(维护者 Theworld7,分类:客户端),它在侧栏会话行的 ... 菜单里增加 Delete session,并在确认后从磁盘移除该会话及相关引用。

这是什么

dsh-session-delete-plugin 是一个 DSH 插件(package 名 dsh-session-delete-plugin,当前版本 1.0.0,MIT 许可证)。一句话定位:在 DeepSeek Harness 会话侧栏上下文菜单中增加永久的「Delete session」操作,并从磁盘删除该会话。

与内置 archive 的对比(来自项目 README):archive 只把 id 追加到 durable hidden-set,字节仍留在磁盘;本插件会删除会话日志目录、缓存的 projection,并从 archived/pinned 注册表项中移除对应 id。

核心功能

用户侧操作

在侧栏对某一会话行右键(或打开该行 ... 菜单)→ 选择 Delete session → 确认 → 该会话从界面与磁盘侧清理流程完成。

实际删除的目标

目标 路径或行为
会话日志目录 <DSH_HOME>/sessions/<projectKey>/<sessionId>/
缓存 projection <DSH_HOME>/storages/session_projcache/sessions/<sessionId>.json
注册表集合 从 archivedSessionIds、pinnedSessionIds 中移除该 id

插件还会在删除前通过 Harness 机制停止会话上的活跃写入,并通过 api-session/removed 事件通知已打开的页面,避免「已删但侧栏仍显示一行」直到下次刷新的情况。

代码结构(便于审阅)

src/index.js      Host 侧:delete-session 命令与安全策略
src/eraser.js     针对磁盘布局执行删除
client/client.js  Client 侧:菜单项与确认对话框
tests/            针对合成 Harness home 的行为检查
cordis.patch.yml  bundle 层与本插件配置

Host 侧不依赖 @deepseek-ai/* 包,通过 slot、命令注册、声明事件与磁盘布局与 Harness 交互。

安装与启用

安装命令以 GitHub README 为准。需要 Node.js >=20;README 声明与 Harness 0.2.0-rc.2、0.2.1-rc.2 为 compatible,其他发行版未声明为已验证。

方式一:profile 包管理

先取得插件目录(README 示例为 clone 到本地),再挂到指定 profile:

git clone git@github.com:Theworld7/dsh-session-delete-plugin.git
dsh plugin --profile <profile> add <path-to-the-clone>

安装后 profile 会记录该包并写入 dsh.profile.bundles;之后 plain dsh web 即可加载,无需额外 --patch。Host 行通过 HMR 激活,浏览器侧在页面模块图更新后注册到侧栏 slot。

方式二:Agent 会话内安装

在 agent 会话中通过 plugin_manager,action: install_bundle,target 指向插件目录。

卸载

dsh plugin --profile <profile> remove dsh-session-delete-plugin

dsh plugin 会把参数原样交给 profile 的包管理器。已删除的会话不会恢复;profile 下其他内容不受影响。

典型用法与配置

默认行为

  • blockActive 默认为 true:拒绝删除当前 Harness 中仍打开的会话。
  • stopActivity 默认为 true:删除前通过 workspace/session-stop 停止会话工作。
  • cleanWorkspaceRegistry、cleanProjectionCache 默认为 true:清理注册表与 projection 缓存。

通过 patch 覆盖配置

配置项在插件 Config 中,可通过 profile 的 cordis.patch.yml 或 --patch 覆盖 id 为 session-delete 的行。注意:patch 会替换整个 config 对象,需写全仍要保留的键:

- id: session-delete
  name: 'dsh-session-delete-plugin'
  config:
    sessionsRoot: ''
    storagesRoot: ''
    blockActive: true
    stopActivity: true
    cleanWorkspaceRegistry: true
    cleanProjectionCache: false   # 仅删日志,保留 projection
key 默认值 含义
sessionsRoot '' 会话日志根;空则从 DSH_HOME 或 ~/.dsh 推导
storagesRoot '' 存放 projection 缓存的存储根;空则同上
blockActive true 是否禁止删除当前打开的会话
stopActivity true 是否先停止会话活动
cleanWorkspaceRegistry true 是否从 archived/pinned 集合移除 id
cleanProjectionCache true 是否删除 projection 缓存文件

热插拔

在运行中的页面可通过 plugin_manager 的 set_plugin,将 include:session-delete 设为 false 移除侧栏菜单项与 Host 命令;设回 true 可恢复。若修改了 client/client.js,需刷新浏览器后新客户端代码才会生效;启用/禁用与仅配置变更可即时生效。

适用场景与注意

适合谁:已在 DSH 中长期使用多会话、需要真正删除磁盘数据而不仅是 archive 的开发者或团队;愿意在安装前阅读源码与权限说明的用户。

权限与风险:插件声明并使用 files 能力——在 <DSH_HOME>/sessions 与 <DSH_HOME>/storages 范围内删除目录并重写 registry.json;不发起网络请求、不执行 shell、不读取 token 等凭证(仅读取环境变量 DSH_HOME 作为目录路径)。删除不可恢复,安装前应自行检查 GitHub 仓库 源码与 MIT 许可证。插件以当前 dsh 进程权限运行,与任何 DSH 插件一样,信任边界取决于你对维护者与代码的审阅。

生态说明:DSH 社区插件目录(如 SkillHub 上的条目)是独立站点,与 DeepSeek / 幻方无官方从属关系;安装来源以仓库 README 与目录页说明为准。

结尾

dsh-session-delete-plugin 补上了 Harness 默认缺失的「永久删除会话」路径:菜单确认后清理日志、projection 与注册表引用,并通知前端列表更新。需要时可从社区目录页查看条目摘要,并在 GitHub 阅读完整安装、兼容性与权限说明。

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

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

Xiaoye