前言¶
DeepSeek Harness(DSH)默认可以把对话归档,但不会从本地彻底移除会话日志;~/.dsh/sessions 下的记录会一直累积。对长期在同一工作区里跑智能体、反复 fork 和试错的开发者来说,侧边栏里会堆满不再需要的对话,既占磁盘,也干扰检索。
社区插件 @ybbmm/dsh-session-delete(仓库 jack-001-a/deepseek-harness-session-delete)在会话菜单和列表行上补上「删除对话」能力:默认进可回收站,支持还原与彻底删除;也可配置为直接永久删除,并带路径校验与审计日志。维护者为 jack-001-a,分类为客户端插件。
这是什么¶
一句话:在 DeepSeek Harness 侧边栏为每个会话增加删除入口,按桌面软件常见方式处理本地会话产物——默认移入回收站,可恢复或升级为永久删除。
DSH 生态里能力以插件形式扩展;插件目录站 SkillHub 上的条目 与 GitHub 仓库由社区维护,与 DeepSeek / 幻方无官方从属关系。安装前请自行查看源码与许可证(MIT),插件以当前 dsh 进程权限读写本机 ~/.dsh 目录。
核心功能¶
界面入口¶
| 位置 | 行为 |
|---|---|
| 会话 「…」菜单 | 在自带的置顶、重命名、fork、归档等项之后,增加红色 Delete conversation(删除对话) |
| 会话行悬停 | 在自带归档、置顶按钮旁增加垃圾桶按钮 |
| 确认对话框 | 显示对话名称;说明删除是否可恢复;永久模式下需输入对话标题才能解锁 destructive 操作 |
| 删除完成后 | 同一对话框内可 Restore(还原) 或 Delete permanently(永久删除) |
若删除的是当前正在打开的对话,工作区内会重新打开一个新会话;对话框会短暂保留以便确认结果。
回收站与还原(默认 mode: trash)¶
- 会话产物被 移动 到会话存储旁的回收区,并附带一份 manifest(原路径、删除时间、子对话信息)。
- 侧边栏行消失,工作区记账与 projection 缓存按宿主原有逻辑释放。
- Restore 将产物移回原位。
- Delete permanently 从回收站中真正删除。
- 超过
retentionDays(默认 7 天)仍未处理的回收项会被自动清理。
在插件配置里设置 mode: permanent 时,跳过回收站,直接删除;对话框同样要求输入对话标题后才能执行。
实际会动哪些本地数据¶
| 对象 | 效果 |
|---|---|
会话日志目录 ~/.dsh/sessions/<project-key>/<session-id>/(含 log 与锁文件) |
移入回收站,或永久模式下直接删除 |
Projection 缓存 ~/.dsh/storages/session_projcache/sessions/<id>.json |
丢弃,并对迟到的 checkpoint 写入做再校验 |
| 工作区记账(成员关系、排序、置顶、归档标记) | 释放 |
| 活跃会话与 agent store 条目 | 在移动文件 之前 先 detach,避免写端重建日志 |
附件 ~/.dsh/attachments |
保留(按内容寻址,多会话共享) |
| 临时溢出文件 | 不处理(由宿主按年龄清理) |
| 从该对话 fork 出的子对话 | 保留;对话框会说明仍指向已删父会话的数量 |
安全与失败行为(摘要)¶
删除按事务顺序执行:解析目标 → 运行中则拒绝 → 停止并 detach 活跃会话 → 先把日志产物移出存储 → 释放记账与缓存 → 通知 UI。若产物无法移动(常见为写端仍在关闭),会以 session-delete/io 失败,且 不 改动记账与缓存,侧边栏行仍在,可重试。
仅当存储定位器指向插件已知的 kind(dir、file 或宿主自带的 jsonl),且解析路径落在会话存储根目录内时才会执行删除;否则返回 session-delete/unsafe-path 且不做任何变更。对话仍在跑 turn、子 agent、后台任务或定时提醒时,宿主会拒绝并说明原因。
每次变更会追加一条记录到回收站旁的 audit.jsonl(动作、session id、结果、时间戳),不写对话正文,并对文件做长度裁剪。
远程接口(供集成或排查)¶
| 端点 | 用途 |
|---|---|
sessionDelete/delete |
删除一个对话 |
sessionDelete/describe |
报告当前模式、保留窗口与存储能力 |
sessionDelete/restore |
从回收站还原 |
sessionDelete/purge |
永久删除回收站中的项 |
sessionDelete/listTrash |
列出回收站(新到旧) |
常见错误码包括:session-delete/active、session-delete/not-found、session-delete/io、session-delete/unsafe-path、session-delete/trash-unavailable 等;对话框会做本地化展示。
安装与启用¶
从插件市场搜索 Session Delete 安装,或在本机执行:
dsh plugin add @ybbmm/dsh-session-delete
本地开发目录安装(README 示例):
dsh plugin add ./session-delete
若当前 profile 不会热加载插件包,安装后需 重启 DeepSeek Harness。
package.json 标明 Node >= 22;插件 bundle 仅使用 Node 内置模块,无额外运行时依赖。README 记载在 DeepSeek Harness 0.2.1-rc.2(Desktop/Web GUI,Windows,中英文 UI)上构建验证。
配置¶
可调项写在插件的 cordis.patch.yml 中,升级后仍会保留;各键均可选:
- id: ybbmm-dsh-session-delete
name: '@ybbmm/dsh-session-delete'
config:
mode: trash # 'trash'(可恢复)或 'permanent'
retentionDays: 7 # 回收站保留天数
# trashRoot: ~/.dsh/.trash
| 键 | 默认 | 含义 |
|---|---|---|
mode |
trash |
trash 可恢复;permanent 直接永久删除 |
retentionDays |
7 |
回收站保留时长 |
trashRoot |
会话存储父目录下的 .trash |
回收站与审计日志位置 |
回收站 故意 放在会话存储树之外:宿主会把 ~/.dsh/sessions 下每个目录都当作候选项目,若把回收站放在 sessions 内部,可能被误读为活跃对话。
典型用法¶
- 安装并重启 Harness 后,在侧边栏选中要清理的对话。
- 打开该会话的 「…」菜单,点 Delete conversation,或悬停该行点垃圾桶图标。
- 在确认框中阅读提示(默认可恢复)。确认后对话从列表消失,本地日志进入回收站(或按
permanent配置直接删除)。 - 若误删,在同一结果对话框点 Restore;确定不要了再点 Delete permanently。
- 需要长期自动清理时,保持默认
retentionDays: 7,或按需改cordis.patch.yml后重启。
适用场景与注意¶
适合谁: 经常在 DSH 里留下大量试验对话、需要主动清理本地会话目录的开发者;希望删除可反悔、或要在永久删除前二次确认标题的场景。
注意:
- 插件以 当前 dsh 进程的用户权限 操作
~/.dsh;安装前请阅读 GitHub 源码 与 MIT 许可证。 - 附件不会因删会话而删;fork 出的子对话会保留。
- 宿主内部接口(会话存储、持久化、工作区注册、projection 缓存、API Gateway SRC 等)若在未来版本重构,可能需要插件跟进适配;README 对此有说明。
结尾¶
@ybbmm/dsh-session-delete 补上了 DSH 侧边栏缺失的「删除对话」路径:默认可回收、可审计,也可配置为永久删除,并对存储路径做约束,避免误删会话树以外的目录。