勾选工作区与对话,连同日志缓存一次删净
30.8/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/26 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add sleeepingbeee/dsh-workspace-cleaner该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
README
由 DeepSeek 最新模型翻译生成dsh-workspace-cleaner
在 DSH Web UI 的「设置」里列出所有工作区与对话,勾选后连同记录、日志、缓存一起删除。
一个 DSH Web UI 插件,列出每个工作区与对话,然后把勾选的项连同会话日志、投影缓存和登记信息一起删除。
它解决什么问题
DSH 自带的「移除工作区」只删除登记,会话记录仍留在磁盘上,并会在界面上变成「未分组」;手动清理 ~/.dsh 又容易漏掉投影缓存、或误删别的会话。这个插件把「有哪些工作区、各自有哪些对话、各占多少空间」摆在一个页面里,勾选后一次删干净:
- 一个删除按钮:勾选工作区 → 删除整个工作区(含其下所有对话);勾选对话 → 只删除该对话。两者可以混选,一次确认、一次执行。
- 空工作区也能删:没有对话的工作区同样可以勾选、可以删除(旧版本会报 字段 sessionIds 必须是非空数组)。
- 子 agent 对话归属主对话:子 agent 的记录没有独立的工作区登记,插件按会话头里的 parentSession 把它们嵌在发起它的对话下面并标注「子 agent」;删除主对话会连同这些子对话一起删除。
- fork 是独立对话:fork 出来的对话同样缩进显示在原对话下面,但带「分叉」标注,不代表从属关系——删除原对话不会删除它的 fork。
- 按时间排序:所有对话按创建时间倒序,最新在最上面。
展开完整文档(README 剩余 1 节)
dsh-workspace-cleaner
在 DSH Web UI 的「设置」里列出所有工作区与对话,勾选后连同记录、日志、缓存一起删除。
一个 DSH Web UI 插件,列出每个工作区与对话,然后把勾选的项连同会话日志、投影缓存和登记信息一起删除。
它解决什么问题
DSH 自带的「移除工作区」只删除登记,会话记录仍留在磁盘上,并会在界面上变成「未分组」;手动清理 ~/.dsh 又容易漏掉投影缓存、或误删别的会话。这个插件把「有哪些工作区、各自有哪些对话、各占多少空间」摆在一个页面里,勾选后一次删干净:
- 一个删除按钮:勾选工作区 → 删除整个工作区(含其下所有对话);勾选对话 → 只删除该对话。两者可以混选,一次确认、一次执行。
- 空工作区也能删:没有对话的工作区同样可以勾选、可以删除(旧版本会报 字段 sessionIds 必须是非空数组)。
- 子 agent 对话归属主对话:子 agent 的记录没有独立的工作区登记,插件按会话头里的 parentSession 把它们嵌在发起它的对话下面并标注「子 agent」;删除主对话会连同这些子对话一起删除。
- fork 是独立对话:fork 出来的对话同样缩进显示在原对话下面,但带「分叉」标注,不代表从属关系——删除原对话不会删除它的 fork。
- 按时间排序:所有对话按创建时间倒序,最新在最上面。
- 删除后界面立刻消失:删除成功后向界面广播会话移除事件,不会出现「删完还挂在『未分组』里,直到重启 DSH」的问题。
- 空对话不再叫「未命名对话」:没有任何消息的对话显示为「空对话」,只有首条提问而没有标题事件的对话用该提问作为名称,并标注「首条提问」。
安装
要求:DSH 带 Web UI(桌面版或 dsh web)、Node.js >= 22。插件没有第三方依赖,没有构建步骤。
方式一:插件管理器(本地目录)
把仓库放到任意目录,然后在 DSH 里执行(界面:设置 → 插件 → 安装,或让 agent 调用 plugin_manager):
plugin_manager install_bundle D:/path/to/dsh-workspace-cleaner
方式二:从 GitHub 安装
仓库根目录就是插件包(package.json 里带 dsh.bundle.patch),可以直接用 pnpm 支持的 git 地址安装:
plugin_manager install_bundle github:sleeepingbeee/dsh-workspace-cleaner
也可以先在本地 git clone,再用方式一安装。
方式三:npm(发布之后)
plugin_manager install_bundle dsh-workspace-cleaner
首次安装后需要重启一次 DSH,让 Host 半进入模块图;之后只改 Client 半时刷新页面即可。Host 半(lib/index.js、lib/store.js)变更需要重启,或在插件管理器里把本插件「禁用 → 启用」以重新挂载。
使用
1. 打开 设置 → 工作区清理。
2. 页面顶部显示当前 DSH home、工作区数、对话数与总占用;「刷新」重新读取磁盘。
3. 勾选工作区(整块删除)或对话(单条删除,会自动带上它的子 agent 对话)。
被勾选工作区覆盖的对话行会显示为已勾选且不可单独取消。
4. 点底部唯一的「删除所选」,在确认对话框里核对数量、字节数与「运行中 / 默认工作区」提示后确认。删除不可撤销。
5. 结果面板会列出失败的条目与原因;运行中的对话或默认工作区需要再次确认才会强制删除。
到底删了什么
| 勾选对象 | 磁盘与状态变更 |
| 一个对话 | 该会话在所有项目目录下的 session.v4.jsonl.zstd 日志目录;storages/session_projcache/sessions/<id>.json(含 .bak.);工作区登记里的该 session id;归档/置顶列表里的该 id;向界面广播 api-session/removed |
| 一个工作区 | 上述操作作用于它的每一个对话(含子 agent 对话);删除 storages/workspace.json 中该工作区的行与 global.workspaceIds 里的 id;如果它是默认工作区则同时清掉 defaultWorkspaceId |
删除后,被清空的 sessions/<projectKey>/ 目录会被顺手删掉。
不会删除:其他工作区、~/.dsh 下的其他文件、以及 attachments/、cache/attachments 里按内容哈希共享的附件对象——同一张图片可能被多个对话引用,按会话删除会误伤别的对话。
运行中的对话会先归档并请求停止,再删除文件;仍被 DSH 持有的会话可能在下次写入时重建日志,所以删除运行中的对话会要求二次确认,并在结果里给出提示。默认工作区同理。
安全边界
- HTTP 接口只注册在 DSH Web 服务器的 /api/workspace-cleaner 前缀下,并校验:调用方必须是回环地址、Host 与 Origin 同源、拒绝 Sec-Fetch-Site: cross-site。
- 所有文件操作都被 assertInside 限制在当前 DSH home 之下;id 必须是 [\w.-]{1,200} 且不能是 . / ..,避免路径穿越。
- 插件不访问网络,不上传任何数据;读取的清单只用于渲染页面。
- 删除只能由页面上的用户操作触发(界面上勾选 + 确认),智能体侧没有暴露删除工具。
配置
插件没有必填配置。可选 Config.dshHome,用来把插件指向另一个 DSH home(默认按 DSH_HOME 环境变量、再退回 ~/.dsh),多用于沙箱验证:
- insert:
- id: workspace-cleaner
name: 'dsh-workspace-cleaner'
config:
dshHome: D:/tmp/dsh-sandbox
HTTP 接口
| 方法 | 路径 | 说明 |
| GET | /api/workspace-cleaner/health | 插件名、版本、构建时间、当前 home |
| GET | /api/workspace-cleaner/inventory | 工作区树、未归属对话、字节数、告警 |
| POST | /api/workspace-cleaner/delete | { workspaceIds?, sessionIds?, force? },两个列表都可省略或为空 |
| POST | /api/workspace-cleaner/delete-sessions | { sessionIds, force? }(严格版) |
| POST | /api/workspace-cleaner/delete-workspaces | { workspaceIds, force? }(严格版) |
delete 会把「勾选的工作区覆盖到的对话」从 sessionIds 里剔除,避免同一份记录被删两次。
开发
node --check lib/index.js && node --check lib/store.js && node --check lib/client.js
node test/package.test.mjs
node test/store.test.mjs
node test/http.test.mjs
node test/client.smoke.test.mjs
或直接 npm test。测试全部在 mkdtemp() 出来的假 home 上运行,不会碰真实 DSH 数据;详见 CONTRIBUTING.md(含「为什么不用 node --test test/」和 UTF-8 BOM 的坑)。
lib/index.js Host 半:路由、删除流水线、广播会话移除事件 lib/store.js 纯函数:路径编码、清单组装、归属解析、删除计划(无 Cordis 依赖) lib/client.js Client 半:window.__ModuleLoader__ 注册 settings.section 页面 test/ package / store / http / client-smoke 四组测试
更新记录
见 CHANGELOG.md。
dsh-workspace-cleaner 给 DSH Web UI 加了一个 Settings → Workspace Cleaner 页面。
页面列出每个工作区及其对话(最新的在前)、每个对话占用的磁盘空间,以及不属于任何工作区的对话。勾选工作区,就会连同它的全部对话一起删除;也可以只勾选个别对话,只删这些对话——一个按钮,一次确认。
几个值得注意的细节:
- 删除工作区会删掉它的对话,绝不会把它们挪进默认工作区。
- 子代理对话嵌套在创建它的对话下面,随它一起删除。分叉也嵌套,但保持独立:它们带 fork* 标记,源对话删掉后仍然保留。
- 删除产物会移除会话日志目录、投影缓存条目和工作区注册信息。其他对话共享的按内容寻址的附件会特意保留。
- 每个被移除的对话都会通知浏览器,所以行不会一直挂在「ungrouped」下面等到下次重启。
- 空工作区可以勾选、可以删除;没有任何消息的对话标记为 empty,而不是 untitled。
用 DSH 插件管理器安装:
plugin_manager install_bundle github:sleeepingbeee/dsh-workspace-cleaner
首次安装后重启一次 DSH(Host 半会加入模块图),Client 半有改动时刷新页面即可。MIT 协议。
License
MIT预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
sleeepingbeee/dsh-workspace-cleaner
勾选工作区与对话,连同日志缓存一次删净
相关插件 · UI / 主题
破甲增强版JeffKeeping/dsh-purge-plus
dsh-purge 的非官方分支fork:适配 DeepSeek Harness 0.2.1-rc.2、破甲内核…
★ 387已汉化DeepSeek 客户端
71.9
无代码业务系统平台nocobase/nocobase
NocoBase 是什么
★ 24,804已汉化DSH
71.8
1Panel 服务器面板1Panel-dev/1Panel
全球 250 万+ 自托管用户共同喜爱。
★ 37,350已汉化DSH
71.5
工作状态行动态ccch1mneyyy/working-activity
作者:chimney@ccch1mneyyy。社区项目,非 DeepSeek 官方项目。
★ 664已汉化DSH
71.2
多模型配置管家farion1231/cc-switch
跨平台桌面一体化助手,支持 Claude Code、Codex、OpenCode、DeepSeek Harness 等工具,唯一官网 ccswitch.io
★ 151,506已汉化DSH
71.1
AI 矢量设计工具ZSeven-W/openpencil
全球首个 AI 原生开源矢量设计工具。
★ 7,027已汉化DSH
71.1
这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。