READMESource: main@bc135722
dsh-session-trash
DSH(DeepSeek Harness)桌面版的两段式会话删除插件:行尾垃圾桶把会话移入回收站,回收站里二次确认才彻底删除。
DSH 官方只有「归档」——dsh-session-persistence 文档写得很明确:无删除或保留接口。归档只把会话从侧栏藏起来,日志、投影缓存、工作区记账全都还在。这个插件补上删除,并且把删除拆成两步,避免误删。
功能
- 会话行尾垃圾桶(悬停会话行出现):确认后把会话移入回收站,连同它的子智能体 / 派生对话家族一起。
- 设置 → 回收站:列出回收站里的条目(标题、原工作区、会话数、移入时间、占用大小),支持:
- 恢复:目录搬回原位、重新挂回原工作区、恢复归档 / 置顶标记;页面自动刷新。
- 彻底删除:点一次变「确认彻底删除?」,再点才真删。
- 清空回收站:同样两段确认。
- 运行中的会话会被拒绝:还有未结束的回合 / 子智能体 / 后台任务 / 定时提醒时,提示等它结束再移入,绝不会替你停掉工作再删。
存储与删除范围
| 项 | 说明 |
|---|---|
| 回收站目录 | <DSH_HOME>/session-trash/<会话 id>/ |
| 索引 | <DSH_HOME>/session-trash/index.json(记录原目录、工作区、归档/置顶标记、大小) |
| 移入时 | 移动会话目录、删投影缓存 storages/session_projcache 对应记录、从所有工作区记账中脱离、发 api-session/removed 让侧栏立刻消行 |
| 彻底删除 | 直接删除回收站里该条目的目录与索引;不进系统回收站,不可恢复 |
恢复时如果原工作区已经不在了,会话仍会还原到它原来的会话目录,并出现在侧栏「未分组」里。
安装
把整个目录复制到 profile 的
node_modules/dsh-session-trash:<DSH_HOME>/profiles/<profile>/node_modules/dsh-session-trash/在 profile 的
package.json中登记:{ "dsh": { "profile": { "bundles": [ "...", "dsh-session-trash" ] } }, "dependencies": { "...": "...", "dsh-session-trash": "0.1.0" } }完全退出 DSH 再打开(客户端 bundle 只在启动时组装)。
实现
Host 半(
index.js):/dsh-session-trash/{list,trash,restore,purge,empty}五个同源路由挂在ctx.webServer上(这是无构建的纯 JS 插件能用的 UI→Host 通道;带类型的ctx.remote需要生成的 Typert 描述符)。Client 半(
client.js):无构建,window.__ModuleLoader__.load注册三个座位:座位 用途 sidebar.workspaces.session.row.action行尾垃圾桶按钮(带空 injectface,否则dsh-better-workspace会过滤掉)shell.overlay移入回收站的确认框 settings.section设置里的「回收站」页面(order 25,排在 Agent 预设与 Web 插件之间)
已知限制
- 恢复不能换工作区:会话的
cwd写死在日志头部(SessionHeader.cwd只读),DSH 用它校验工作区归属(workspace.attachSession()要求realpath(header.cwd) === workspace.path),并且persistence.locate()按cwd反推目录。换目标文件夹就得改日志头部并搬目录,官方不支持,硬做会得到一个打不开的会话。 - 和
dsh-better-workspace共存时,会话的右键菜单由它硬编码,第三方menu.item条目不会显示;所以入口只有行尾按钮 + 设置页。 - 插件升级/重装会覆盖
node_modules里的文件。
License
MIT
No comments yet. Be the first to write one.