dsh-purge
YuJunZhiXue/dsh-purge在设置页编辑 prompt-inject.md、管理 AGENTS.md 或 CLAUDE.md 规则集、检查插件更新,并对本机包做可回滚的应用或还原。
给 DeepSeek Harness(DSH)加一个删除会话的能力。DSH 官方有归档、没有删除——归档只是把会话从列表里挪走,文件还在。本插件补上删除,并且让删除可恢复:删除 = 移入回收站,另有一个显式的「彻底删除」。
dsh plugin --profile add @xrn1997/dsh-session-delete~/.dsh/session-trash/,不联网、不上传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,原子、瞬时。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 协议授权你的贡献。