前言¶
DeepSeek Harness(DSH)里每个会话都会留下日志目录、投影缓存和工作区记账;若还 spawn 过子代理,磁盘和列表里会多出一棵「归属父会话」的子树。官方流程里「归档」或关掉界面并不等于从存储里抹干净,长期开发时容易堆积无用会话、占空间,也难在侧栏里一眼分清哪些可以删。
下面介绍的插件 @liuyu-f/dsh-plugin-session-cascade-delete 面向同一痛点:在 Web 界面或 agent 工具里永久删除指定会话,并按 DSH 的归属规则级联清理其拥有的子代理会话;分叉(fork)会话不会被误伤。维护者为 liuyu-f,npm 包当前版本为 1.0.5,许可证 MIT。文档写明适配 DeepSeek Harness V0.2.0-rc.2 到 0.2.1-rc.2,槽位名与服务签名会随 DSH 版本变化,其他版本需自行核对。
这是什么¶
一句话:客户端插件,在 DSH 中从 UI 或 session_delete 工具彻底删除会话及相关数据。
它源自 @huanlin/dsh-plugin-session-delete 的 DSH 适配与增强(上游见 lsz-asd/dsh-plugin-session-delete),改动重点在子代理:级联删除、分叉保护、运行中会话先停再删、会话 id 两种拼写的处理。
核心功能¶
界面入口¶
| 入口 | 位置 |
|---|---|
| 头部垃圾桶 | 会话标题旁的动作区 |
| 菜单项 | 侧栏会话行「…」→「删除会话」 |
确认后会执行完整清理;删除完成后该会话立即从界面和会话列表消失,无需重启 DSH。适用于 Web 界面及一切基于 Web 外壳的客户端。
一次删除会清理什么¶
顺序大致为:若会话正在运行,先停止任务并释放运行中的 Agent 与会话;再删除会话日志目录、投影缓存(缓存行与磁盘文档)、工作区记账(所属工作区成员、归档、置顶);然后按「由深到浅」删除该会话拥有的子代理会话;最后通知界面移除对应行。
任一步失败不会静默:结果报告里会出现 INCOMPLETE,说明是哪一步、什么原因。文档强调:日志确认删净之后才会动记账,避免「删一半、会话掉进未分组」的坏行。
子代理与分叉¶
- 删除父会话时,默认会一并删除它拥有的子代理会话(最深者先删)。
- 分叉会话(fork)是独立的:删分叉不会连带删任何东西,也不会牵连子代理。
- 子代理归属「创建它的那个会话」:若在会话 A 里创建了子代理,再从 A 分叉出 B,则删 B 不影响子代理,删 A 才会删掉它们。
agent 工具 session_delete¶
Agent 也可调用该工具删除会话,并在结果里报告实际删掉了什么。
| 参数 | 作用 |
|---|---|
sessionId |
直接指定要删的会话 id(推荐) |
title |
仅知标题时使用;只有标题唯一时才会删,否则报错并列出候选 |
discover |
只列出本 profile 知道的会话,不删;当前会话在标题后标 > (当前会话) |
discoverTree |
只列出某一 session 拥有的子代理树(id、深度、父级),不删 |
keepSubagents |
只删当前会话,保留其子代理(默认连子会话一起删) |
两条安全约束:
- 拒绝删除本次工具调用所在的会话(以及其树中包含该会话的会话)。
- 界面上正打开着的会话,若与「工具调用所在会话」不是同一个,可以正常删除。
安装与启用¶
两种安装方式任选其一。
UI(推荐):打开 DSH → 左上方「插件」→ 右上方「+ 添加插件」,输入:
@liuyu-f/dsh-plugin-session-cascade-delete
终端:
web profile:
dsh plugin --profile web add @liuyu-f/dsh-plugin-session-cascade-delete
desktop profile:
dsh plugin --profile desktop add @liuyu-f/dsh-plugin-session-cascade-delete
换版本时需先移除再安装(已安装状态下直接再装会报 ambiguous-install):
dsh plugin --profile desktop remove @liuyu-f/dsh-plugin-session-cascade-delete
dsh plugin --profile desktop add @liuyu-f/dsh-plugin-session-cascade-delete
典型用法¶
- 在侧栏选中要删的会话,点标题旁垃圾桶,或在该行「…」里选「删除会话」,在确认弹窗中确认。
- 若会话仍在跑 agent,插件会先停止并释放,再清理磁盘与列表。
- 在 agent 对话中需要程序化删除时,优先传
sessionId调用session_delete;不确定 id 时可先用discover或discoverTree查看,再删除(删除本身会级联,结果会报告删了什么,预览非必须步骤)。
可选配置¶
写在 profile 的 cordis.patch.yml 里(本插件不导出 Config schema,设置页无表单):
- id: session-delete
name: "@liuyu-f/dsh-plugin-session-cascade-delete"
config:
deleteSubagents: false # 默认 true:删父会话时连子代理会话一起删
sessionsRoot: "" # 可选:覆盖会话日志根目录,默认 $DSH_HOME/sessions
将 deleteSubagents 设为 false 时,等价于 UI/工具里「只删本会话、保留子代理」的行为。
适用场景与注意¶
适合谁:经常在 DSH 里开长会话、spawn 子代理做探索或并行任务,又希望从磁盘和侧栏里干净移除整条会话链的开发者。
权限与安全:插件以当前 DSH 进程权限运行,删除的是 $DSH_HOME/sessions(或你配置的 sessionsRoot)下的日志与相关缓存、记账。安装前建议阅读 GitHub 仓库 源码与 MIT 许可证,确认行为符合预期;删除不可恢复。
生态说明:DSH 社区插件目录在 SkillHub 插件页 等处收录,与 DeepSeek / 幻方无官方从属关系,并非官方应用商店。
结尾¶
若你需要在 Harness 里「删干净」而不只是关掉界面,@liuyu-f/dsh-plugin-session-cascade-delete 把 UI 入口、session_delete 与级联子代理、分叉保护、运行中先停再删串成一条路径。更多细节与截图见仓库 README;收录页:SkillHub,源码:GitHub。