- Home
- Plugins
- Sessions & Messages
- dsh-session-delete
dsh-session-delete
xrn1997/dsh-session-delete
Adds a trash for DSH sessions.
Install
dsh plugin --profile web add github:xrn1997/dsh-session-deleteREADME
@xrn1997/dsh-session-delete
给 DeepSeek Harness(DSH)加一个删除会话的能力。DSH 官方有归档、没有删除——归档只是把会话从列表里挪走,文件还在。本插件补上删除,并且让删除可恢复:删除 = 移入回收站,另有一个显式的「彻底删除」。

- 安装:
dsh plugin --profile <profile> add @xrn1997/dsh-session-delete - 许可:Apache-2.0
- 数据:回收站本体留在本机
~/.dsh/session-trash/,不联网、不上传
目录
功能特性
- 删除 = 移入回收站:会话行「⋯」→「删除」,可随时恢复;删完有一条停 6 秒的撤销提示。删的是当前正打开的会话时,对话会随删除关闭(不会停在「会话不可用」),点撤销会把它重新打开
- 按整组删:父会话在盘上的子会话与更深后代一起走;任一成员在跑 ⇒ 整组拒绝、零副作用
- 批量删除:宿主会话列表「⋯」→「多选」,一次确认、一次执行;失败的留在框里可重试,成功的整批撤销
- 回收站面板:左清单右详情,按项目分组、可折叠、可拖分栏;看得见正文再决定恢复不恢复
- 恢复:单条即点即回,批量带确认;回到各自的原项目目录(删除前你自己归档过的仍保持归档)
- 显式彻底删除:单条「彻底删除…」与页脚「清空回收站…」共用同一个二次确认;不自动过期
- 清理无主残留:父会话已不存在的子会话宿主根本不显示,面板扫描到后由你决定清不清
- 失败不吞:宿主读不到时把原文上屏并给「重试」;不可用时不注册任何入口
- 文案随宿主语言:中文 / English 挂在宿主 locale 服务上
安装
dsh plugin --profile <profile> add @xrn1997/dsh-session-delete
dsh plugin --profile <profile> remove @xrn1997/dsh-session-delete
装完重启宿主(Node 半不走 HMR)。卸载只移除插件,~/.dsh/session-trash/ 下已有的目录不会被自动清理。
也可以离线分发:pnpm pack 出 tarball 后 dsh plugin add ./xrn1997-dsh-session-delete-<版本>.tgz(scoped 包的文件名带作者段)。包里带预构建产物(prepack 会替你跑 build),这条路不需要为构建脚本授权。
兼容性分两层,别混:
- 装得上由
package.json的engines.dsh决定:宿主拿运行中的版本比这个区间,不满足即拒绝并回滚。窗口是>=0.1.7-rc.2 <0.3.0-0(预发布版本参与匹配)。地板是完整功能的最低代次:0.1.7-rc.2在 CLI 台架上验过四个槽位齐全、激活零错误;更低的0.1.7-rc.1缺行首勾选槽位,0.1.5起连会话行入口都没有。 - 真跑过由
dsh.compatibility.dshReleases记录,只列桌面真机实测过的宿主:DSH Desktop 0.2.0-rc.2、0.2.1-rc.1、0.2.1-rc.2、0.2.1-rc.3(均compatible)。窗口内的其他代次装得上但没在桌面真机上验过;窗口外的一律拒装。
用法
删一条:会话行「⋯」→「删除」→ 确认框。确认框在点之前就说明这一组的规模(「含 N 个子会话,将一起移入回收站」,N>0 才出现),删完那条提示点「撤销」即恢复。

删除按整组走:父会话在盘上的子会话与更深后代一起移走(传递闭包,一层层取到底)——那些行宿主本来就不显示。任一成员在跑(包括列表里看不见的子会话)⇒ 整组拒绝、零副作用,报的是那个运行中的 id;本插件不替用户终止正在进行的活。
删一批:会话行「⋯」→「多选」进入显式模式。模式内点整行勾选/取消且不切换会话,行首出勾选框,浮条常驻(0 条也给退出入口),同一位置在「全选 / 取消全选」之间切换。确认框逐条列出这批会话,执行是一次批量请求:部分失败不关框、原文落在失败那一行,按钮变成「重试这 N 条」,成功的 6 秒内可整批撤销。

管回收站:侧栏面板里的「回收站」一行(与「插件」同层)。左清单右详情(中央列更窄时改成下钻,「← 返回清单」回来),按项目分组、组头可折叠、两栏之间那根线可拖。详情只列你真实发的提问与助手的文字,宿主注入的上下文与工具调用不进正文;助手文字按 Markdown 排版,你的提问保持原话。
- 恢复:单条不需要确认框,放回原项目目录(删除前你自己归档过的仍保持归档;旧版本留下的归档态条目会迁移式取消归档)。原工作区已被删掉也照常恢复(跳过账本挂接,归入「未分组」),清单行在点之前就说这句。
- 批量恢复 / 批量彻底删除:工具栏「多选」进入,页脚换成两颗动作按钮。组头那颗是三态勾选框,点它选上这个项目的全部会话(含折叠起来看不见的)。两者都先确认,逐条执行、失败不连坐,失败的原文留在它自己那行。
- 彻底删除 / 清空:共用同一个二次确认。单条那张卡片报的是这一次会释放多少(父 + 跟着进来的孩子 + 仍留在盘上的后代,与头部合计共用同一算式)。「清空回收站…」先把回收站目录与清单对账一遍再清,所以手工搬进
session-trash/的认得出的目录也归它管;认不出的外人目录不动也不列。 - 无主残留:父会话已不在(既不在会话列表、也不在回收站清册)的子会话,宿主客户端整排不显示,回收站里也不会有。面板顶部只在扫描到时出现条件提示,预览后由你决定清不清;永久删除、不搬进回收站、绝不自动跑。
回收站与数据
| 东西 | 位置 |
|---|---|
| 回收站本体 | ~/.dsh/session-trash/<时间戳>-<原目录名>/ |
| 回收站清单 | 本插件自己的 storage domain(介质在 ~/.dsh/storages/) |
- 回收站与
~/.dsh/sessions/同卷:搬进搬出靠整目录rename,原子、瞬时。 - 一格目录 = 一个会话:父会话与跟着它进来的子会话各占一格,面板上折成一行。手工翻回收站目录时看到比清单多的目录,那是子会话。
- 清单丢了不致命:会话文件自描述,解压后第一行即 header,含
id与cwd;读取回收站列表(以及清空、恢复、彻底删除与清理残留前)会先与回收站目录对账。 - 不自动过期:不设天数上限,清空是显式动作;界面显示条数与占用。
- 附件不连坐:附件是全局内容寻址的,与会话不是父子关系——删除不连带,也不会回收;被删会话独享的附件会留成垃圾(要回收得先有引用计数,属另一件事)。
- 无主子会话不在回收站里:它们的父会话已不存在;清理只清会话目录,不包含宿主投影缓存和附件。
- 回收站本体留在本机、不联网、不上传。
界面语言
中文 / English 挂在宿主自己的 locale 服务上,跟随设置的界面语言;服务不可用时退回内置中文。
常见问题
装完侧栏没有「回收站」,会话菜单里也没有「删除」?
先重启宿主。若仍没有,确认这一代宿主上本插件激活过——取数通道探测不过时,本插件一个入口都不注册:页面上看不出它的存在,但也不会因此把宿主拖死。这是有意用「入口不出现」表达不可用,不是禁用态。
删完之后侧栏那一行怎么还在?
本插件只在宿主确实不再列它时才通告客户端把那一行去掉;拿不准时宁可沉默(那时说「已移除」是假话)。刚巧遇上就刷新页面,那一行会自己消失。本机运行期没打开过的冷会话走正常路径,删完即走。
正在运行的会话为什么删不掉?
判据用的是宿主自己的活跃检查(与官方归档的准入同源)。一律拒绝,不替用户终止正在进行的活——先停下这个会话再删。它正在跑的子会话也算:报告的是那个子会话的 id,而那一行宿主的列表里不显示,所以别看列表就以为删得掉。
批量删除/恢复为什么只成功了一部分?
执行是逐条的,失败不会连坐。批量删除的确认框不关,原文留在失败那一行,按钮变成「重试这 N 条」;批量恢复失败的条目留在清单自己那行,多选态保持,成功的已经消失。重试只处理失败名单。
把工作区删了,回收站里的会话还能恢复吗?
能。宿主的「删除工作区」只删注册、保留目录和每个会话日志;恢复照常回盘,只是跳过账本挂接,会话落在「未分组」。清单行和批量恢复确认框都会在点之前说明。
我把会话目录从回收站手工搬回 sessions/ 了,为什么列表里没有?
回收站目录只负责文件;恢复还要挂回工作区账本(旧版本留下的归档态条目会迁移式取消归档)。手工搬回不是恢复,下一次读清单会把对应行对账掉。请在面板里点「恢复」。
开发
构建、本地调试、门控、真机验证与发版见 docs/development.md;提交信息与 PR 约定见 CONTRIBUTING.md;架构地图与主人清单见 docs/architecture.md;界面规格见 docs/ui-spec.md;文档分层与放置见 docs/AGENTS.md;裁决见 docs/adr/;发布历史见 CHANGELOG.md。历史取舍在 git 历史里,README 不复述。
贡献
欢迎 Issue 与 PR。提交信息、PR 约定与发版边界见 CONTRIBUTING.md;提交前按 docs/development.md 的「复核门」跑 pnpm test 与 pnpm typecheck,并确认退出码;提交即表示你同意以 Apache-2.0 协议授权你的贡献。
许可
Related plugins
dsh-web-ui (dsh-chat-recovery)
zhu1090093659/dsh-web-ui
billion-context
ranxianglei/billion-context
dsh-synapse
liangmianya/dsh-synapse
dsh-chat-import
nwflower/dsh-chat-import