dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
DSH 会话管理插件:永久删除会话,连同它的日志、投影缓存、工作区记账与子会话(子代理)一起清掉。设置页入口,删除不可恢复。
DSH 会话管理:真正把会话删掉,而不是藏起来。
永久删除会话,连同它的日志、投影缓存、工作区记账与子会话(子代理)一起清干净。
DSH(DeepSeek Harness)自带的「归档」只是把会话从列表里隐藏,磁盘上的日志目录和投影缓存一个字节都不动。
dsh-plugin-session-purge 补上的就是缺失的那一步:真删。
它从两个地方给你入口——设置页与对话头部按钮——并且会顺着会话的关联数据一路清下去:
磁盘上的日志目录、投影缓存文件、工作区记账(workspaceRegistry)以及该会话派生的子会话(子代理)。
[!WARNING] 删除不可恢复。 本插件不提供回收站、不做二次备份、也无法撤销。 被删会话的对话记录、工具调用记录与子代理记录会一并从磁盘消失。 重要会话请先导出,详见 风险提示。
设置页入口——设置 → 会话管理,按工作区分组,每行带状态标记(打开中 / 子会话 N / 无工作区):
删除前的内联二次确认——确认块展开在下方独立区块,红色「永久删除」与白色「取消」在两端, 被删对象是哪一个、多大、多久没动过、连不连带子会话,都在这一行里写清楚:
批量删除——勾选后底部出现选择条,显示已选数量与合计体积:
两个入口 —— 设置页 设置 → 会话管理,以及对话头部的删除按钮。
永久删除,不是归档 —— 直接移除磁盘上的会话目录与投影缓存,释放的空间是真实的。
级联清理 —— 一次删除同时处理四类关联数据:
| 关联数据 | 磁盘位置 | 处理方式 |
|---|---|---|
| 会话日志 | ~/.dsh/sessions/<工作区文件夹>/<会话ID>/ | 递归删除整个目录 |
| 投影缓存 | ~/.dsh/storages/session_projcache/sessions/<会话ID>.json | 删除文件 |
| 工作区记账 | ~/.dsh/storages/workspace.json 的 tables.workspaces[*].sessionIds 与 global.archivedSessionIds | 解除归属 |
| 子会话(子代理) | 同工作区文件夹下的子代理会话 | 可选一并删除 |
子会话判定保守 —— 「子会话」= 与父会话在同一个 workspace 文件夹下、且不在任何 workspace 的 sessionIds 里的会话。
这条规则保证绝不会误删别的正常会话。
列表信息完整 —— 每一行给出标题、会话 ID(截断显示)、占用体积、目录最后修改时间,以及 打开中 / 已归档 / 子会话 N / 无工作区 四种状态标记。
按工作区分组 —— 同一工作区的会话归入一张卡片,卡片头显示数量与合计体积,卡内按体积从大到小排列。
可筛选 —— 顶部筛选框按标题 / 会话 ID / 工作区名过滤。
批量删除 —— 勾选多个会话一次性删除;「全选」在筛选状态下只选中筛选结果。
已归档一键清理 —— 独立的危险卡片「删除全部已归档会话」,带自己的确认步骤。
误触防护 —— 删除是一次普通的描边按钮,确认块出现在下方独立区块: 取消按钮是白色主按钮、占了指针刚停留的位置,删除是整页唯一的红色按钮,两者之间隔着一整段空白。
渲染隔离 —— 整个面板包在 React error boundary 内;插件渲染出错也绝不会外溢到设置面板的其他分区。
跟随官方设计系统 —— 普通按钮用官方 @deepseek-ai/dsh-client-ui-primitives 的 Button,颜色一律走 --dsw-alias-* CSS 变量,浅色 / 深色主题自动适配。
无构建步骤 —— 浏览器半边是手写的 DSH 客户端模块(window.__ModuleLoader__.load),纯 JS,装上即用。
| 项目 | 值 |
|---|---|
| 插件包名 | dsh-plugin-session-purge |
| 当前版本 | 1.0.0 |
| 插件类型 | Plugin(host + browser 两半) |
| Client 平台 | web |
| 依赖的 DSH 能力 | webServer、slots(均为主机 / 客户端内置服务,非外部依赖) |
| 运行时依赖 | 无(package.json 未声明任何 dependencies / peerDependencies) |
官方 @deepseek-ai/* 依赖 | 无(lib/client.js 通过 require() 取 react 与 @deepseek-ai/dsh-client-ui-primitives,由 DSH 宿主自身提供,故不写入 package.json) |
| License | MIT |
实测环境(开发与验证均在此环境完成):
| 项目 | 值 |
|---|---|
| 宿主程序 | DSH Desktop 2.0.15 |
| 活动 profile | desktop(patchReload: live) |
| 操作系统 | Windows 11(26100) |
| 安装方式 | link: 本地链接安装 |
兼容性声明的现状(如实说明):
package.json目前没有dsh.compatibility字段, 因此没有以机器可读的形式声明支持的 DSH 版本区间。上表是人工实测的结论,范围仅限 DSH Desktop 2.0.15。需要补上时,字段形如
dsh.compatibility.{dsh, dshReleases}, 取值请以你所处 DSH 版本里@deepseek-ai/dsh-*包的实际声明为准, 详见 CONTRIBUTING.md。 在 macOS / Linux 上尚未验证。
[!IMPORTANT] 本仓库目前只包含发布材料(文档、模板、Release 说明)。 插件源码(
plugin/)尚未搬运进来,因此下面的命令暂时还不能直接克隆安装。 源码目录结构见 CONTRIBUTING.md 的「代码结构」。
# 1. 克隆
git clone https://github.com/cyh3436332528/dsh-plugin-session-purge.git
cd dsh-plugin-session-purge
# 2. 安装到目标 profile(此处以 desktop 为例)
dsh plugin --profile desktop add ./plugin
# 3. 重启 DSH
也可以让 DSH 直接从 GitHub 安装(免克隆):
dsh plugin --profile desktop add github:cyh3436332528/dsh-plugin-session-purge
本插件尚未发布到 npm,因此没有
dsh plugin --profile desktop add dsh-plugin-session-purge这种按包名安装的方式。仓库里的
plugin/是无构建步骤的纯 JavaScript(无 TypeScript、无prepare脚本), 所以从 git 源码安装不需要 pnpm 的allowBuilds构建授权,安装后可直接加载。 已在本机实测:仓库内文件与开发目录plugin/内容一致。
dsh plugin --profile desktop remove dsh-plugin-session-purge
然后重启 DSH(理由同下)。
宿主半边运行在 DSH 的 Node 进程里。DSH 的宿主插件的 ESM 模块按路径缓存,
重装同一路径的插件不会重新加载——必须重启 DSH,宿主代码才会生效。
(浏览器半边 client.js 反而会随文件改动热重载。)
重启后入口自动出现,无需任何配置:
设置 → 会话管理,导航栏会显示一个垃圾桶图标。设置 → 会话管理。面板会列出当前磁盘上的全部会话,按工作区分组。删除完成后面板会提示实际删除了几项、释放了多少空间;如果有会话当时正开着,会单独说明。
若某个会话此刻正被 DSH 持有(面板上有 打开中 标记),行为如下:
pending 里明确告诉你。这是刻意的取舍,不是 bug。详见下方 已知限制。
本插件没有配置项。
package.json 中 dsh.client.inject 为空数组,不读取任何 profile 配置,也不写入任何设置项。
所有行为(删除范围、确认步骤)都在界面上由你当场决定。
对「没有任何配置项」这件事有疑虑的话,可以在插件里搜 ctx.settings——不存在。
[!CAUTION] 删除是不可恢复的。
fs.rm(..., { recursive: true, force: true }),直接抹掉文件系统上的数据,不经过任何回收站或废纸篓。session_projcache 里,记账在 workspace.json 里;三处都会被改动。~/.dsh/sessions/<工作区文件夹>/<会话ID>/ 整个目录复制出去。
如只想留归档、不想真删,用 DSH 自带的归档功能即可,不要用本插件。删之前请确认:
Q:它和 DSH 自带的「归档」有什么区别?
归档只把会话从列表里隐藏起来,磁盘上的文件一个都不删。本插件删的是文件。
Q:为什么删除后会话还在侧栏里?
因为它此刻正被 DSH 打开着(打开中)。文件已经删了,但列表项要等 DSH 重启才会消失。
见 关于「正在打开」的会话。
Q:删掉的能找回吗?
不能。见上方 风险提示。删之前请先备份目录。
Q:会误删别的会话吗?
不会。子会话的判定条件是「与父会话在同一个 workspace 文件夹下、且不在任何 workspace 的 sessionIds 里」。
其余会话不会被纳入本次删除范围。但请注意:批量删除时你勾了谁就删谁,勾选时请看清列表。
Q:为什么「删除全部已归档会话」的卡片有时不出现?
当没有任何已归档会话时,这张卡片不渲染。
Q:它对界面有什么影响?会不会把设置面板搞坏?
不会。面板整体包在 React error boundary 里,插件自身渲染失败只会显示一行提示文字,不会影响设置面板的其他分区。 按钮使用官方 UI primitives,配色走官方 CSS 变量,跟随浅色 / 深色主题。
Q:删掉的空间去哪了?
workspace.json 里的记账会被同步解除,所以 DSH 侧栏也不会再显示这些会话。
但请注意 DSH 进程自身对 workspace.json 的写入可能覆盖插件的外部修改。
Q:支持哪些平台?
开发与实测环境为 Windows + DSH Desktop。宿主代码使用纯 Node.js API(node:fs / node:path / node:os),
理论上跨平台可用,但尚未在 macOS / Linux 上验证。
Q:为什么作者没有做「一键清空全部会话」?
因为风险与收益不成比例。全部删除更容易误触,且大部分会话并没有占用多少空间。 请用筛选 + 全选,配合批量删除逐步进行。
package.json 缺少 dsh.compatibility 声明。 见 兼容性 的 TODO。_smoke.mjs 是一个只读冒烟脚本,仅验证 /list 路由能返回数据。
删除路径没有自动化测试覆盖。Delete-all-archived 是逐条串行执行的,会话数量很大时会较慢。dsh-plugin-session-purge/
├── plugin/ ← 插件本体(可直接被 dsh plugin add 安装的包)
│ ├── package.json # 插件清单:dsh.bundle.patch + dsh.client
│ ├── cordis.patch.yml # bundle 层:往 profile 里插入一条 host 记录
│ ├── lib/
│ │ ├── index.js # 宿主半边:HTTP 路由 + 扫描 + 删除实现
│ │ └── client.js # 浏览器半边:设置页面板 + 导航图标
│ └── _smoke.mjs # 只读冒烟脚本(不触发删除)
├── docs/
│ ├── assets/ # 效果截图
│ └── plugin-blurb.md # 简介 / 关键词 / Topics / 徽章素材
├── release/
│ ├── v1.0.0-release-notes.md # Release 说明、tag 方案、投稿文案
│ └── awesome-dsh-plugin-entry.yml # 插件市场收录用的条目文件
└── .github/ # Issue / PR 模板
两半的职责、HTTP 接口约定与开发注意事项见 CONTRIBUTING.md。
见 CONTRIBUTING.md。提交前请先读 CODE_OF_CONDUCT.md。
dsh-better-sidebar、dsh-cost-meter、dsh-find-plugin、dshmarket)。MIT © dsh-plugin-session-purge contributors