在 DeepSeek Harness(DSH)中,归档会话通常只是将其从侧边栏隐藏,没有明确的恢复入口,一旦归档往往意味着会话永久消失。@huangzhaoyu/dsh-trashbin 为 DSH 增加了一个“回收站”机制,让归档操作变成一个可控的“删除冷静区”。

下面介绍这个插件的安装方式、核心功能以及技术实现细节。

功能概览

该插件旨在解决归档会话不可找回的问题,提供以下能力:

  • 归档即回收:归档的对话会进入回收站,而不是直接从界面消失。
  • 恢复与移除:在 7 天有效期内,支持随时恢复会话至原工作区;也支持手动移除。
  • 自动清理:归档超过 7 天未恢复的会话将自动清理。
  • 数据安全:插件不修改 DSH 核心,不触碰 ~/.dsh/sessions 中的会话日志文件,只负责界面状态管理。
  • 幂等性:恢复操作具备幂等性,恢复不存在的会话不会报错。

安装与启用

所有安装方式在完成配置后都需要重启 DSH,插件才会生效。

方式一:命令行安装(推荐)

如果你本地环境配置了 dsh 命令,可以直接通过 profile 安装:

dsh plugin --profile web add @huangzhaoyu/dsh-trashbin

方式二:脚本安装(Windows)

插件仓库提供了 PowerShell 安装脚本:

powershell -ExecutionPolicy Bypass -File install.ps1

脚本会自动完成备份、复制文件、注册依赖与 bundles 以及验证文件完整性。

方式三:手动安装

如果没有 dsh 命令或无法使用脚本,可以手动复制文件并修改配置:

  1. 复制 dsh-trashbin 目录到 ~/.dsh/profiles/web/node_modules/@huangzhaoyu/。
  2. 修改 ~/.dsh/profiles/web/package.json,在 dependencies 中添加 "@huangzhaoyu/dsh-trashbin": "^0.1.0"。
  3. 在 dsh.profile.bundles 数组中追加 "@huangzhaoyu/dsh-trashbin"。
  4. 重启 DSH。

卸载

同样可以通过提供的脚本卸载:

powershell -ExecutionPolicy Bypass -File uninstall.ps1

或手动从 dsh.profile.bundles 和 dependencies 中移除该插件,并重启 DSH。

机制与限制

回收站入口

安装后,侧边栏左下角的设置按钮旁会出现一个垃圾桶图标,点击进入回收站面板。

状态存储

回收站的状态(如归档时间)存储在浏览器的 localStorage 中。
* 注意:如果清除了浏览器缓存,localStorage 会被清空,此时所有归档对话的时间信息会丢失,表现为全部显示为“过期”状态。但这不会影响归档本身,也不会导致数据丢失。

自动清理逻辑

7 天自动清理的过滤逻辑是在打开回收站时触发的。如果连续 7 天未打开回收站,清理顺延到下次打开,用户无感知差异。

目录与文件结构

插件的主要代码与配置文件如下:

dsh-trashbin/
├── package.json       # 声明 dsh.bundle.patch + dsh.client 双面机制
├── cordis.patch.yml   # 注册 trashbin 行到 profile
├── install.ps1        # 安装脚本(包含备份与回滚)
├── uninstall.ps1      # 卸载脚本
└── lib/
    ├── index.js       # host 半边:处理 /trash/unarchive 路由及存储域写入
    └── client.js      # browser 半边:处理回收站按钮、面板 UI 及 localStorage 状态

结语

@huangzhaoyu/dsh-trashbin 通过独立包的形式,在不侵入 DSH 核心的前提下,为归档操作提供了“后悔药”。对于习惯使用归档整理会话但担心误删的开发者来说,这是一个实用的工具。