前言¶
DeepSeek Harness(DSH)默认支持把会话归档(Archive):侧栏里仍能看到该行,磁盘上的日志也会一直保留。对临时调试、一次性探索或已过期的会话,归档并不能真正腾出工作区计数,也不会清掉持久化目录。若只靠手动删目录或改登记文件,还容易漏掉 workspace 分组、归档集与 pin 集里的 session id。
下面介绍的 dsh-trash(维护者 BarryAlllen,社区目录见 SkillHub 条目)把「删除会话」做成与 Rename、Pin、Archive 并列的一级操作:侧栏菜单一行即可完成;智能体也可通过同名工具批量删除。插件归类为客户端,与 DSH 自带的 Web/Desktop 配置配合使用。
这是什么¶
dsh-trash 是一个 DSH bundle 插件(npm 包名 @local/dsh-session-trash,版本 1.0.0)。它在不改变 DSH 核心的前提下,补全「彻底删除会话」路径:侧栏即时移除行、递归删除该会话的 log 目录,并同步清理 workspace 记账以及全局 archive / pin 集合中的 id。
许可证为 MIT(见 GitHub 仓库 README 徽章说明)。
核心功能¶
依据仓库 README,当前核实的能力包括:
- 侧栏会话菜单:在会话行
⋯(或右键)菜单末尾、分隔线之后出现 Delete session;危险样式、独立图标、确认对话框与 toast 反馈,由内置 Context Menu 渲染。 - 无残留删除:行立即消失(无需整页刷新);对应 log 目录删除;会话不再计入 Workspace、archive、pin bookkeeping。
- 智能体工具
session_delete:传入多个sessionIds,可一次处理多条会话;返回按会话粒度的成功/失败结果。 - 实现特点:Host 侧为纯 ESM,浏览器侧为
window.__ModuleLoader__工厂;README 标明零依赖、零构建步骤;不注入 system prompt,除工具 schema 外无额外 prompt 成本。
环境与依赖¶
| 项 | 要求 |
|---|---|
| DSH | 0.2.2-rc.1(README 标注为 verified);需已内置的 connection、webServer 服务(任意 Web/Desktop profile) |
| Node.js | 随 DSH 捆绑,无需单独安装 |
| 持久化后端 | @deepseek-ai/dsh-session-persistence-jsonl(发行版默认),用于定位 log 目录 |
| 可选 | workspaceRegistry:用于分组清理;缺失时其余功能仍可用 |
平台徽章写明支持 macOS、Linux、Windows。
安装与启用¶
官方 README 的安装路径是:先把仓库放到本机,再通过 plugin_manager 把目录安装进你实际使用的 profile。install_bundle 会把目录链入 profile、注册 bundle patch 并热应用;对该 profile 下所有会话生效,重启后仍保留。链接目录意味着后续在目录里 git pull 后,需 DSH 重启(或 Client 侧刷新页面)才会载入更新。
若菜单未出现,README 建议先刷新页面一次(Client 模块在启动时提供)。
也可用 DSH 界面:Plugins → Install,指向同一克隆目录,效果与 install_bundle 相同。
安装命令须与资料原文一致,如下。
git clone https://github.com/BarryAlllen/dsh-trash.git
plugin_manager
action: install_bundle
target: /absolute/path/to/dsh-trash
将 target 换成你机器上 dsh-trash 目录的绝对路径。
卸载时 README 给出:
plugin_manager
action: remove_bundle
target: @local/dsh-session-trash
已删除的会话不会恢复;其他插件不受影响。
安全提示:插件在当前 DSH 进程的权限下执行删除与 API 注册。安装前请自行阅读 index.js 等源码,并确认 MIT 许可证是否符合你的合规要求。社区目录 SkillHub 与 DeepSeek / 幻方无官方从属关系,不宜当作官方应用商店条目理解。
典型用法¶
侧栏删除¶
- 将指针悬停在会话行上,打开
⋯,或右键该行。 - 在菜单底部选择 Delete session(分隔线下方)。
- 在确认框中核对会话名称后确认。
智能体调用 session_delete¶
请求体示例(README):
{ "sessionIds": ["session-c9456202-3d3d-4cf9-9aa8-a1fd883a0fbc"] }
批量时结果为逐条报告,便于定位失败项:
{
"results": [
{
"sessionId": "session-c9456202-3d3d-4cf9-9aa8-a1fd883a0fbc",
"ok": true,
"title": "杂活",
"dir": "/Users/you/.dsh/sessions/--Users-you-workspace-tmp--/session-c9456202-3d3d-4cf9-9aa8-a1fd883a0fbc",
"resident": false
},
{
"sessionId": "session-does-not-exist",
"ok": false,
"error": "session \"session-does-not-exist\" does not exist"
}
]
}
不确定要删哪些会话时,README 建议在删除前先用 session_search / session_list 核对。
删除时实际发生什么¶
对通过检查的会话,README 按顺序说明:
- Workspace 记账:从所属 Workspace 的
sessionIds中移除该 id。 - Archive 与 pin 集合:从 registry 全局集合中移除该 id。
- 持久化 log:递归删除
<session-root>/<project-key>/<encoded-id>/(含各代session.*.jsonl.zstd、session.lock等)。 - Client 通知:发出
api-session/removed,由现有 Client 走 listremove突变,侧栏行消失。
步骤 1–2 为派生面;若失败会记日志且不阻断步骤 3 的目录删除。
限制与安全¶
- 不可恢复:无回收站、无撤销、无自动备份。
- 运行中的会话拒绝删除:需先停止会话再删。
- 当前运行中仍打开过的会话:可从磁盘删除,但在本次 DSH 运行周期内可能仍驻留内存;toast 会提示,重启前不会在磁盘上再出现。
- 主要删除对象是 log 目录;附件、spill、投影与搜索索引等派生或共享数据,README 说明会话消失后可能仍留残留但不可达,插件不会主动清理这些共享资源。
- 路径安全:目录路径由持久化后端布局重算,若结果逃逸 session root 则拒绝。
配置与排错¶
配置:README 明确无 config schema、无凭据、无设置项。
常见症状(摘自 README 排错表):
| 现象 | 处理 |
|---|---|
| 没有 Delete session 菜单项 | 刷新页面;仍无则确认 Plugins 中 bundle 已启用 |
| toast 出现 HTTP 404 | Host 半未激活或传输层缺少 /api 通道 |
| 提示 session is running | 先停止会话 |
| 行消失但 id 仍在 workspace.json | 分组清理可能仅警告跳过;可凭日志提 issue |
| 已删会话仍在列表 | 本 run 内内存驻留;重启 DSH |
工作机制(简要)¶
| 组件 | 方式 |
|---|---|
| 菜单项 | ctx.contextMenus.register({ target: 'session' }) 及 contextMenu 图标槽 |
| Client → Host | POST /api/session-trash/delete,经 ctx.connection.fetch.register |
| Agent → Host | session_delete 工具,输出经 JSON Schema 校验 |
| 共享逻辑 | index.js 单一实现,两路调用返回相同 per-session 结构 |
| 根目录 | 从 ctx.sessionPersistence.root 读取,回退 profile 配置 |
结尾¶
若你需要在 DSH 里把「删会话」当成与归档对称的一级能力——侧栏一点清掉 log,并让 workspace / archive / pin 登记一致——dsh-trash 提供了现成的客户端插件与 session_delete 工具路径。使用前务必理解不可逆删除与运行中会话限制。