DSH Plugins Marketplace

DSH Plugins

Plugins

/

Sessions & Messages

/

dsh-session-delete

d

dsh-session-delete

Manifest valid

Adds a trash for DSH sessions.

UI (client)hasBundlePatch

@xrn1997/dsh-session-delete

npm version License: Apache-2.0 Tested with DSH Desktop 0.2.0-rc.2

给 DeepSeek Harness(DSH)加一个删除会话的能力。DSH 官方有归档、没有删除——归档只是把会话从列表里挪走,文件还在。本插件补上删除,并且让删除可恢复:删除 = 移入回收站,另有一个显式的「彻底删除」。

回收站面板:左边一列是按项目分组的会话清单,右边是选中那条的详情(元信息与正文),页脚是整页唯一的实心红按钮「清空回收站…」

快速开始

  1. 安装:

    dsh plugin --profile <profile> add @xrn1997/dsh-session-delete
    
  2. 重启宿主(Node 半不走 HMR)。

  3. 用起来:

    • 删一条:会话行「⋯」→「删除」。
    • 删一批:会话行「⋯」→「多选」,勾选后点浮条里的「移入回收站 N 条」。
    • 管理回收站:侧栏的「回收站」。

兼容性与离线安装见安装与兼容性。

目录

功能一览

想做什么从哪进结果
删一条会话会话行「⋯」→「删除」确认后移入回收站,连同盘上的子会话与更深后代;6 秒内可撤销
删一批会话会话行「⋯」→「多选」→ 勾选 → 浮条「移入回收站 N 条」一次确认、一次批量执行;失败的留在框里可重试,成功的 6 秒内可整批撤销
看回收站、判断该不该恢复侧栏「回收站」左清单、右详情;可折叠分组、拖分栏
恢复一条回收站行右侧「恢复」直接放回原项目目录,恢复删除前的归档状态
批量恢复回收站「多选」→ 勾选 → 页脚「恢复 N 条」确认框逐条列出目标;回到各自的原项目目录
彻底删一条 / 清空回收站行右侧「彻底删除…」/ 页脚「清空回收站…」二次确认后真的移除文件,不可恢复
批量彻底删除回收站「多选」→ 勾选 → 页脚「彻底删除 N 条」二次确认后执行,失败原因留在该行

删除会话

单条删除

会话行「⋯」→「删除」→ 确认框「移入回收站」。确认框在点之前就说明这一组的规模:

会话行的「⋯」菜单:宿主原有动作之后,本插件加了「多选」与红色的「删除」两行

  • 「含 N 个子会话,将一起移入回收站。」——只在 N>0 时出现;
  • 删完有一条停留 6 秒的撤销提示,点「撤销」即恢复。

删除按整组走:父会话在盘上的子会话与更深后代一起移走(那些行宿主本来就不显示)。任一组员正在运行 ⇒ 整组拒绝、零副作用,报的是那个运行中的 id。

批量删除

宿主会话列表上的批量删除是显式模式:

批量删除模式:两行已勾选,浮条显示「已选 2 条」和展开的已选清单,动作是「移入回收站 2 条」与「退出多选」

  • 入口:会话行「⋯」→「多选」;模式内再点同一条(变成「退出多选」)退出。模式外不显示勾选框。
  • 模式内:点整行勾选/取消,且不会切换会话;行首出勾选框(有状态点或归档的行没有这一格,用行尾那颗兜底);在跑的会话勾不动,悬停说明原因。
  • 浮条在多选模式内常驻(0 条也显示,给退出入口):已选条数、读得到时合计「含 K 个子会话,跟着整组走」;「查看已选」展开限高可滚的清单(可逐条移除);同一个位置按当前可见可选行在「全选 / 取消全选」之间切换(折叠组、归档过滤外的行不算);「移入回收站 N 条」;「退出多选」。
  • 确认框逐条列出这批会话(有子会话的那条标「含 M 个子会话」),汇总再说一次这一批会带走多少;卡片限高 280px 滚动,计数在开框时重新问。
  • 执行是一次批量请求。部分失败不关框,原文落在失败那一行,按钮变成「重试这 N 条」;成功的条目 6 秒内可整批撤销(撤销 = 一次批量恢复)。
  • 计数读不到就整句不说,也不因此锁死确认按钮——不拿 0 冒充「没有」。

级联与运行中拒绝

  • 删除按传递闭包取子会话:子会话的子会话也跟着走,一层层取到底。
  • 任一成员在跑(包括宿主的列表里看不见的子会话)⇒ 整组拒绝、零副作用。本插件不替用户终止正在进行的活。
  • 运行中的父会话在菜单里置灰,提示「会话正在运行,先停止再删除」。

回收站

清单与详情

侧栏面板列表里的「回收站」一行(与「插件」同层)。面板用满中央列:

  • 盒子宽 ≥900px 时左右两栏:左清单(默认 420px)、右详情。中央列更窄时改成下钻——点一条看详情,「← 返回清单」回来。
  • 清单按项目分组,每条两行:标题 / 「刚刚删除 · 24KB」或「删除于 7分钟前 · 350KB」。带子会话的行会说「含 N 个子会话」;级联落地前删掉的存量说「盘上还剩 M 个子会话」——两个数各说各的。
  • 点行选中并在右边看详情;行右侧是「恢复」(描边)与「彻底删除…」(安静的红)。
  • 头部是条数与合计占用(多选态换成已选条数);页脚是回收站位置说明与「清空回收站…」(多选态换成两颗动作按钮)。
  • 组头可单独折叠,也可一键全部折叠/展开;折叠起来的组条目直接收掉,计数还留在组头上。两栏之间那根线可拖(键盘 ←→ / Home / End 也行),最窄 330px,Home 回默认 420px。
  • 详情有四组元信息(时间/体量/计数/位置)和正文:只列你真实发的提问与助手的文字,宿主注入的上下文与工具调用不进正文。助手文字按 Markdown 排版,你的提问保持原话。
  • 面板有读数中 / 空 / 失败 / 有条目;详情有未选中 / 读数中 / 失败 / 有内容。失败时把宿主原文上屏并给「重试」;详情坏掉只坏详情那一块,清单照常可用。空态时底部不出现「清空回收站…」。

恢复

  • 单条恢复不需要确认框:按记录的原目录名放回原项目目录,并还原删除前的可见性——原来未归档的仍未归档,原来归档的仍在归档态。
  • 原工作区已经被删掉也照常恢复:跳过账本挂接,会话归入「未分组」。清单行在点之前就说「原工作区已不存在,恢复后归入未分组」,批量恢复的确认框逐条重复同一句。

多选:批量恢复与批量彻底删除

回收站工具栏的「多选」进入:

  • 模式内行右侧两颗按钮退场、标题左侧出勾选框,点行就是切换勾选;组头多出一颗三态勾选框,点它把这个项目的全部会话选上(包括折叠起来看不见的),只勾了几条时显示半选。退出多选即清空勾选,不留看不见的勾选。
  • 页脚换成两颗:「恢复 N 条」描边 + 「彻底删除 N 条」实心红;一条没勾时两颗都置灰并说明原因。
  • 批量恢复带确认框(单行恢复仍直接执行):逐条列出标题与项目名,正文说明「这一批会回到它们各自的原项目目录」。
  • 批量彻底删除同样先确认;确认框说清这一批不可恢复。
  • 两者都是一次批量请求;失败的原文留在它自己那行,成功的随清单重读消失、已选计数下降。批量恢复失败后多选态保持,方便直接处理剩下的。

彻底删除与清空

  • 单条「彻底删除…」与页脚「清空回收站…」共用同一个二次确认;单条那张卡片报的是这一次会释放多少(父加跟着进来的孩子,与页脚合计同一个数)。
  • 没有自动过期,只有显式彻底删除或清空才会真的丢字节。

安装与兼容性

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 ./dsh-session-delete-<版本>.tgz。包里带预构建产物(prepack 会跑 build),这条路不需要为构建脚本授权。

兼容性分两层,别混:

  • 装得上由 package.json 的 peerDependencies 决定——宿主的 dsh plugin add 会拿运行中的宿主版本逐项比对 @deepseek-ai/dsh* peer 区间,不满足即拒绝并回滚。本插件一条 dsh-* peer 都没有(控件与图标已固化在 src/client/ui/*,浏览器半只 require React 家族三个冻结平台模块),所以这道闸不限制它装在哪些代上。
  • 真跑过由 dsh.compatibility.dshReleases 记录,只列实测过的宿主:DSH Desktop 0.2.0-rc.2(compatible)。别的版本装得上,但没验过。

数据与安全

东西位置
回收站本体~/.dsh/session-trash/<时间戳>-<原目录名>/
回收站清单本插件自己的 storage domain(介质在 ~/.dsh/storages/)
  • 回收站与 ~/.dsh/sessions/ 同卷:搬进搬出靠整目录 rename,原子、瞬时。
  • 一格目录 = 一个会话:父会话与跟着它进来的子会话各占一格,面板上折成一行。手工翻回收站目录时看到比清单多的目录,那是子会话。
  • 清单丢了不致命:会话文件自描述,解压后第一行即 header,含 id 与 cwd;每次读清单都会与回收站目录对账。
  • 不自动过期:不设天数上限,清空是显式动作;界面显示条数与占用。
  • 附件不连坐:附件是全局内容寻址的,与会话不是父子关系——删除不连带,也不会回收;被删会话独享的附件会留成垃圾(要回收得先有引用计数,属另一件事)。
  • 回收站本体留在本机、不联网、不上传。

界面语言

中文 / English 挂在宿主自己的 locale 服务上,跟随设置的界面语言;服务不可用时退回内置中文。

常见问题

装完侧栏没有「回收站」,会话菜单里也没有「删除」?

先重启宿主。若仍没有,确认这一代宿主上本插件激活过——取数通道探测不过时,本插件一个入口都不注册:页面上看不出它的存在,但也不会因此把宿主拖死。这是有意用「入口不出现」表达不可用,不是禁用态。

删完之后侧栏那一行怎么还在?

本插件只在宿主确实不再列它时才通告客户端把那一行去掉;拿不准时宁可沉默(那时说「已移除」是假话)。刚巧遇上就刷新页面,那一行会自己消失。本机运行期没打开过的冷会话走正常路径,删完即走。

正在运行的会话为什么删不掉?

判据用的是宿主自己的活跃检查(与官方归档的准入同源)。一律拒绝,不替用户终止正在进行的活——先停下这个会话再删。它正在跑的子会话也算:一条父会话的子会话在跑时,整条删除会被拒绝,报的是那个子会话的 id(那一行宿主的列表里不显示,所以别看列表没在跑就以为删得掉)。

批量删除/恢复为什么只成功了一部分?

执行是逐条的,失败不会连坐。批量删除的确认框不关,原文留在失败那一行,按钮变成「重试这 N 条」;批量恢复失败的条目留在清单自己那行,多选态保持,成功的已经消失。重试只处理失败名单。

把工作区删了,回收站里的会话还能恢复吗?

能。宿主的「删除工作区」只删注册、保留目录和每个会话日志;恢复照常回盘,只是跳过账本挂接,会话落在「未分组」。清单行和批量恢复确认框都会在点之前说明。

能恢复多久?

不存在时间上限。不自动过期,只有显式清空或彻底删除才会真的丢字节。

开发

pnpm install
pnpm build        # tsdown:Node 半 + 浏览器半(含浏览器半的纯度门)
pnpm test         # vitest run
pnpm typecheck    # tsc --noEmit

本地源码调试

lib/ 是构建产物且不入库,从源码目录链进 profile 的安装方式不会替你构建它。

pnpm build        # 必须在源码目录手动跑一次
dsh plugin --profile <profile> add "link:<本仓绝对路径>"

改动生效分两半:浏览器半(src/client/)由宿主 HMR 推到浏览器,无需重启;Node 半不在热重载链路内,必须重启宿主。

设计住在 docs/design/2026-09-30-session-delete-design.md;回收站两栏、详情与批量动作另见 docs/design/2026-10-15-trash-detail-design.md。README 不复述。

贡献

欢迎 Issue 与 PR。提交改动前请确保 pnpm test 与 pnpm typecheck 都通过,且两条命令的退出码都亲眼看过——跑门要把输出先灌进文件、再单独打印退出码,管道会把红吃掉。提交即表示你同意以 Apache-2.0 协议授权你的贡献。

许可

Apache-2.0

Comments

Loading…

Similar plugins

dsh-session-delete

Adds delete and batch delete to the session list menu; sessions go to the Windows Recycle Bin instead of being erased, and the files a session produced are listed first so you decide whether to remove

Sessions & MessagesManifest valid

★ 0

dsh plugin --profile web add dsh-session-delete

Adds a permanent-delete row to the sidebar menu of archived sessions, removing the session log, its projection cache and its workspace registration.

Sessions & MessagesManifest valid

★ 0

dsh plugin --profile web add dsh-session-purge

by DelayNooMore

DSH (DeepSeek Harness) 会话回收站插件:移入回收站、恢复、永久删除,设置页管理

Development & InfrastructureTerminal & ClientsSessions & MessagesManifest valid

★ 1

MIT

JavaScript

Oct 2, 2026

dsh plugin --profile web add dsh-plugin-session-trash

Permanently delete a DSH session from the sidebar session row menu (danger-styled) with a confirm modal and a seven-stage, independently-degrading deletion pipeline (validate → running guard → workspace ledger → archive set → on-disk logs → in-memory drop → broadcast).

Terminal & ClientsSessions & MessagesManifest valid

★ 0

dsh plugin --profile web add dsh-session-delete

by txlznbzsdj-collab

Adds a "Delete" item to the sidebar session menu with a confirmation dialog, then hard-deletes the session.

Sessions & MessagesManifest valid

★ 0

↓ 283/wk

JavaScript

Aug 18, 2026

dsh plugin --profile web add dsh-session-delete

Adds a Delete session action to the sidebar session menu that permanently deletes the local records of that session, while refusing sessions that are running.

Sessions & MessagesManifest valid

★ 0

dsh plugin --profile web add dsh-session-delete-next