前言¶
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