DSH Plugins Marketplace

DSH Plugins

Plugins

/

Development & Infrastructure

/

dsh-session-trash

L

dsh-session-trash

Manifest valid★ 1

Recoverable session deletion for DeepSeek Harness: delete moves sessions to a trash folder, restorable for 7 days, purged automatically.

UI (client)hasBundlePatch

🗑️ dsh-session-trash

给 DeepSeek Harness 补上「可恢复的会话删除」

删错了?7 天内随时找回来。

npm npm install License: MIT DSH Tests No Build PRs Welcome

快速开始 · 功能 · 使用 · 配置 · 工作原理 · 常见问题 · 开发


为什么需要它

DSH 官方只有归档(archive)——归档是把会话藏起来,可以反悔;但删除这个动作官方没有提供。

你可能遇到过这些情况:

  • 会话列表越堆越长,想清理掉不用的
  • 手滑点错,把还要用的会话处理掉了
  • 想彻底删掉某些内容,却只能归档,数据还占着磁盘

这个插件把「删除」做成安全版本:不是抹掉,而是移进回收站。7 天内随时恢复,到期自动清理。

❌ 没有它

会话太多 → 只能归档
误操作   → 无法挽回
想清理   → 数据一直占着

✅ 有它之后

会话太多 → 删除,进回收站
误操作   → 6 秒内点撤销
想清理   → 彻底删除,释放空间

✨ 功能

功能说明
🗑️删除即入回收站会话目录被移动而非删除,数据零风险
↩️6 秒内撤销删除后顶部提示条,一键反悔,不用去回收站翻
📅7 天保留期期间随时恢复,到期自动清理(启动时 + 每 6 小时)
🔍回收站页面搜索标题/路径、按时间/大小/名称排序、显示占用
🎯完整恢复回到原工作区、原位置,标题、排序、置顶状态都保留
⚡即时刷新接入 DSH 事件链路,删完侧栏立刻消失,不用手动刷新
⌨️快捷键Ctrl/Cmd + Shift + Delete 删除当前会话
🛡️运行中保护会话还在跑时先询问,不会悄悄打断工作
🌏中英双语跟随 DSH 语言设置

🚀 快速开始

✅ 已发布到 npm:@lazyra/dsh-session-trash, 并已完成安装验证 —— 从 npm 装好后 DSH 正常启动,删除、撤销、回收站均可正常使用。

方式一:插件管理器(推荐)

  1. 侧栏点击 插件
  2. 点击 添加插件
  3. 输入 @lazyra/dsh-session-trash
  4. 安装 → 启用 → 重启 DSH

方式二:命令行

dsh plugin --profile desktop add @lazyra/dsh-session-trash

方式三:从源码安装

git clone https://github.com/LazyRa/dsh-session-trash.git
dsh plugin --profile desktop add /path/to/dsh-session-trash

[!TIP] 安装后需要重启 DSH 才会生效。如果侧栏没出现「回收站」,检查插件是否已启用。

📖 使用

删除会话

侧栏会话行 → 悬停显示 ⋯ → 删除会话

会话行菜单

删完立刻可撤销:

撤销提示

管理回收站

侧栏 回收站 进入管理页面:

操作说明
恢复会话回到原工作区和原位置
彻底删除永久删除,不可撤销
全部删除清空回收站
搜索按标题或路径过滤
排序按删除时间 / 大小 / 名称
刷新手动重新读取(正常情况无需点击)

彻底删除有二次确认,使用 DSH 原生对话框样式:

彻底删除确认

快捷键

快捷键功能
Ctrl/Cmd + Shift + Delete删除当前打开的会话

⚙️ 配置

在 profile 的 cordis.patch.yml 中给插件加 config:

- id: dsh-session-trash
  name: "@lazyra/dsh-session-trash"
  config:
    retentionDays: 7          # 会话保留天数,默认 7
    sweepIntervalMs: 21600000 # 自动清理间隔(毫秒),默认 6 小时
    home: null                # DSH home 路径,默认读 $DSH_HOME 或 ~/.dsh
配置项类型默认值说明
retentionDaysnumber7回收站保留天数,到期后自动彻底删除
sweepIntervalMsnumber21600000过期扫描间隔,60000 毫秒起
homestring | nullnullDSH home,留空则自动推断

🔬 工作原理

数据怎么存

<DSH_HOME>/
├── sessions/
│   └── <projectKey>/<sessionId>/
│       └── session.v4.jsonl.zstd        ← 会话原始位置
│
└── trash/
    └── 2026-10-19T09-19-52-123-session-xxxx/
        ├── meta.json                     ← 原位置、标题、删除时间
        ├── session.v4.jsonl.zstd         ← 会话本体
        └── projcache.json                ← 投影缓存(含标题)

删除 = 把整个目录 rename 到 trash/。恢复 = 反向搬回。没有任何数据被删改。

三处状态必须同步

只移动目录是不够的 —— 不同步注册表就会留下「幽灵会话」:

位置处理不同步的后果
sessions/<key>/<id>/移动到 trash/会话仍出现在侧栏
storages/workspace.json从成员/归档/置顶集合移除会话掉进「未分组」
storages/session_projcache/一并移入回收站恢复后标题丢失

界面为什么能即时刷新

不靠轮询,走 DSH 自己的事件链路:

sequenceDiagram
    participant UI as 侧栏/面板
    participant Host as Host 插件
    participant FS as 文件系统

    UI->>Host: POST /move
    Host->>FS: rename 到 trash/
    Host->>FS: 更新 workspace.json
    Host-->>UI: api-session/removed
    Note over UI: 该行立即消失

    UI->>Host: POST /restore
    Host->>FS: rename 回原位
    Host-->>UI: api-session/added (含标题投影)
    Note over UI: 该行立即出现,标题正确

为什么不能用 sessions.refresh()

恢复后如果调客户端 refresh() 整体重拉列表,会和 api-session/removed 写入的本地移除标记冲突,导致已永久删除的会话被重新捞出来、掉进「未分组」。所以恢复必须发带完整 summary 的 api-session/added。

附件不参与回收站

attachments/v1/objects/ 是 SHA-256 内容寻址存储 —— 多个会话可能引用同一个对象。删除会破坏其他会话的历史,所以附件始终保留。

🔌 HTTP 接口

挂在 /api/dsh-session-trash/ 下,全部为精确路由(DSH 的 /api 只认精确路径,前缀路由会被 404)。

方法路径请求体说明
POSTlist—回收站条目 + 保留天数
POSTprobe{ sessionId }预检:会话是否仍在运行
POSTmove{ sessionId, title?, stopActivity? }移入回收站
POSTrestore{ dir }恢复
POSTpurge{ dir }彻底删除单条
POSTpurge-all—清空回收站
POSTsweep—立即清理过期条目

❓ 常见问题

删掉的会话还能找回来吗?

能。7 天内都可以从回收站恢复,也可以点删除后顶部提示条的「撤销」立即恢复。

7 天后真的会删掉吗?

会。插件在 DSH 启动时扫一次,之后每 6 小时扫一次,把过期条目彻底删除。想保留更久可以调大 retentionDays。

删除会话会影响其他会话吗?

不会。每个会话的目录独立,附件是共享的但不会被删除。

会话正在运行时点删除会怎样?

会先检测到它在运行,弹出确认框询问是否停止后再删除。不会悄悄打断你的工作。

升级 DSH 后插件会失效吗?

插件会探测会话日志的实际格式版本(session.v<N>.jsonl.zstd),不写死版本号。但如果 DSH 引入全新的存储结构,可能需要更新插件。

数据存在哪里?可以手动备份吗?

回收站在 <DSH_HOME>/trash/ 下,每个条目是一个独立目录,直接复制走就行。

🧑‍💻 开发

git clone https://github.com/LazyRa/dsh-session-trash.git
cd dsh-session-trash
npm test

纯 ESM,零构建 —— lib/*.js 就是直接运行的源码,改完重启 DSH 即生效。

lib/
├── index.js           Host 半侧:HTTP 路由、生命周期、定时清理
├── trash-service.js   核心逻辑:编码、移动、恢复、清理
└── client.js          浏览器半侧:菜单项、横幅、回收站页面

测试

文件数量覆盖
test/service.test.mjs35路径编码、增删改查、路径穿越防护、格式版本探测
test/host-e2e.test.mjs15真实 HTTP 往返,路由按 DSH 源码规则严格校验
node test/service.test.mjs
node test/host-e2e.test.mjs

设计取舍

  • 不引入构建:插件接口就是 { name, inject, apply },手写 ESM 足够,省掉一整条工具链
  • 不碰附件:内容寻址存储没有引用计数,删除会连带破坏其他会话
  • 复用官方组件:菜单行、对话框、图标都用 ui-primitives,和内置 UI 保持同一套视觉语言
  • 降级可用:拿不到 primitives 时有自绘回退,功能不丢

⚠️ 已知限制

  • 路径编码有损:DSH 的 projectKey 会把 D:\a-b\c 和 D:\a\b\c 编码成同一个 key,这是 DSH 的既有行为,插件通过记录原始 key 规避恢复错位
  • 会话格式版本:会探测实际版本号,但全新存储结构仍需适配
  • 仅桌面端验证:Web 端理论可用,但未充分测试

🤝 贡献

欢迎 Issue 和 PR!

  • 发现 Bug → 提 Issue,附上 DSH 版本和复现步骤
  • 想加功能 → 先开 Issue 讨论,避免白做
  • 提交代码 → 确保 npm test 全绿

📄 许可

MIT © dsh-session-trash contributors


如果这个插件帮到了你,给个 ⭐ 就是最好的支持

Comments

Loading…

From the same category

awesome-dsh-plugin

by awesome-dsh-plugin

A curated list of plugins for DeepSeek Harness (dsh) · DeepSeek Harness 插件精选列表

Development & Infrastructure

★ 19.6k

CC0-1.0

Python

Oct 19, 2026

Index only — not installable

by 0xsline

DeepSeek Harness (DSH) ecosystem: curated plugins, tools, and infrastructure from dsh-external/hub and the public dsh-plugin topic.

Development & Infrastructure

★ 1.2k

CC0-1.0

Python

Oct 16, 2026

Index only — not installable

by pax-beehive

Open-source CLI, schemas, resolver, and DSH agent tools for DSH Plugin Hub

Development & Infrastructure

★ 388

MIT

TypeScript

Oct 6, 2026

Index only — not installable

by xiajiajun516

DeepSeek Harness (DSH) backup & restore plugin — export, import, migrate and sync your complete DSH configuration, plugins, MCP servers, skills and workspace. One-click migration to another machine.

Development & InfrastructureManifest valid

★ 215

MIT

TypeScript

Oct 18, 2026

dsh plugin --profile web add dsh-config-manager

by yjh051108

推荐组件(非必须):DeepSeek Harness 运行时注入器;已随 dsh-routing-suite 单仓库化保留,本仓库继续维护/发布。

Development & InfrastructureManifest valid

★ 166

TypeScript

Oct 16, 2026

dsh plugin --profile web add @dsh-external/dsh-super-injector

by jigjoy-ai

A CLI that turns a goal into a pull request - and a sandbox for testing concurrent AI coding agents on the Mozaik runtime.

Development & Infrastructure

★ 124

MIT

TypeScript

Oct 13, 2026

Index only — not installable