🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

会话回收站 new-256/dsh-session-cleaner

DeepSeek Harnessv1.2.1
new-25656 天前有提交已提供中文文档扫描:含敏感能力

把会话移入回收站,可恢复或定期彻底清除

28.9/100
综合分
0
GitHub 星标
76
npm 周下载
—/5
用户评分

数据截至 2026/9/20 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add @luchenglong/dsh-session-cleaner
npm 源 · @luchenglong/dsh-session-cleaner 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么[目录]—
dsh 原生插件 · other
暂无时间戳·判据 →
装得上吗[实装验证]✓
静态安装检查通过
未做真实安装
L4 · 真实安装等级说明 →
数据截至 2026/10/26·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 56 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包@luchenglong/dsh-session-cleaner @ 1.2.1
✓Node 引擎要求 >=20 · 基线 Node 22.19 满足
✓dsh CLI 依赖要求 >=0.1.1-rc.2 · 最新 0.2.1-rc.2 兼容
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/20 06:19:12

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件
查看扫描证据(共 42 处,展示前 17 条)
  • 读取本地文件
    lib/index.mjs:85
    const entries = await readdir(dirPath, { withFileTypes: true })
  • 读取本地文件
    lib/index.mjs:91
    const st = await stat(fullPath)
  • 读取本地文件
    lib/index.mjs:101
    const content = await readFile(filePath, 'utf8')
  • 写入本地文件
    lib/index.mjs:110
    await writeFile(filePath, content, 'utf8')
  • 读取本地文件
    lib/index.mjs:232
    if (!existsSync(resolvedPath)) {
  • 读取本地文件
    lib/index.mjs:233
    if (existsSync(join(filePath, 'session.jsonl.zstd'))) {
  • 读取本地文件
    lib/index.mjs:235
    } else if (existsSync(join(filePath, 'session.jsonl'))) {
  • 删除本地文件递归
    lib/index.mjs:536
    await rm(itemTrashDir, { recursive: true, force: true })
  • 写入本地文件
    lib/index.mjs:540
    await mkdir(itemTrashDir, { recursive: true })
  • 写入本地文件
    lib/index.mjs:575
    await rename(target.sessionDir, trashDataDir)
  • 写入本地文件
    lib/index.mjs:619
    await mkdir(dirname(info.originalSessionDir), { recursive: true })
  • 写入本地文件
    lib/index.mjs:620
    await rename(trashDataDir, info.originalSessionDir)
  • 删除本地文件递归
    lib/index.mjs:660
    await rm(itemTrashDir, { recursive: true, force: true })
  • 删除本地文件递归
    lib/index.mjs:673
    await rm(trashDir, { recursive: true, force: true })
  • 写入本地文件
    lib/index.mjs:674
    await mkdir(trashDir, { recursive: true })
  • 删除本地文件递归
    lib/index.mjs:689
    await rm(itemTrashDir, { recursive: true, force: true })
  • 删除本地文件递归
    lib/index.mjs:715
    await rm(join(trashDir, sessionId), { recursive: true, force: true })
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 移入回收站
  • 恢复已删会话
  • 定期彻底清除

DSH 会话清理宿主插件:侧边栏原生「移入回收站」+ 回收站管理页 + HTTP API(两级可恢复删除、同名防删错、活跃会话保护)

v1.2.12026-09-09
· v1.2.1 (2026-09-09) · 修复 · 回收站页面不再展示工作区中没有被移动到回收站的会话:\/session-cleaner#trash\(侧边栏「回收站」入口)视图下隐藏「会话列表」区块与搜索框,只展示回收站 + 定期清空设置 · 无 \#trash\ hash 打开时仍是完整管理页(会话列表 + 回收站);页头新增「🗑️ 回收站 / 💬 会话列表」视图切换按钮,并监听 \hashchange\ 联动
v1.2.02026-09-09
· v1.2.0 (2026-09-09) · 新增 · 🧹 定期自动清空:会话移入回收站 N 天后自动彻底删除(开关/保留天数 1–3650/检查间隔 15–1440 分钟,设置持久化到 \dsh-home/session-cleaner-settings.json\;启动 10s 后首检 + 周期巡检,防重入;条目显示剩余天数/过期状态,支持「立即清理已过期」) · 回收站列表过滤:不再显示当前列表(sessions 目录中未归档可见会话)中仍然存在的条目;已归档会话与已列入回收站的会话始终显示 · 🎨 主题与 DSH 主体一致:管理页内嵌官方 design-platform 令牌(light/dark),全组件 \--dsw-alias-*\ 变量;主题切换(跟随系统/浅色/深色) · 恢复保留归档状态:归档会话恢复后仍回到归档区 · 变更 · 统计卡片(总会话数/磁盘/回收站/已过期)+ 搜索过滤 + 状态徽标 · 发布形态转为标准 npm 包(\lib/index.mjs\ + \cordis.patch.yml\ bundle 层 + scoped 包名 \@luchenglong/dsh-session-cleaner\) · 修复 · 回收站同名残留清理(EPERM);settings 单路由;Session ID 路径穿越校验 完整日志见 CHANGELOG.md。
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
dsh-session-cleaner DSH(DeepSeek Harness)会话回收站与清理管理器 · Trash bin & session cleaner for DeepSeek Harness 为 DSH Web GUI 补上原生缺失的会话删除能力——以侧边栏原生交互呈现,采用两级可恢复删除设计,内置重名防误删、对话内容预览/同名分辨、定期自动清空能力,界面主题与 DSH 主体完全一致。 为 DSH Web GUI 添加原生、可逆的会话删除能力——一个两级可恢复回收站,具备重名防误删、对话预览、定期自动清空以及 DSH 原生主题。 会话行「⋯」菜单: 重命名 / 分叉会话 / 归档会话 / 移入回收站 ← 本插件注入侧边栏底部: …工作区列表… / 🗑️ 回收站 / ⚙️ 设置 ← 本插件注入管理页与确认弹窗: 💬 查看对话 · 定期清空设置 · 同名对照 ← v1.2.0 增强 说明 / Note:npm 上另有同名裸包 dsh-session-cleaner(fountunt 发布,专注 live store detach)。 本包是功能完整的回收站方案(移入/恢复/彻底清除/定期清空/防误删/预览),两者互不冲突;为避免混淆,本包以 scoped 名 @luchenglong/dsh-session-cleaner 发布。
展开完整文档(README 剩余 1 节)
dsh-session-cleaner

DSH(DeepSeek Harness)会话回收站与清理管理器 · Trash bin & session cleaner for DeepSeek Harness

为 DSH Web GUI 补上原生缺失的会话删除能力——以侧边栏原生交互呈现,采用两级可恢复删除设计,内置重名防误删、对话内容预览/同名分辨、定期自动清空能力,界面主题与 DSH 主体完全一致。

为 DSH Web GUI 添加原生、可逆的会话删除能力——一个两级可恢复回收站,具备重名防误删、对话预览、定期自动清空以及 DSH 原生主题。

会话行「⋯」菜单: 重命名 / 分叉会话 / 归档会话 / 移入回收站 ← 本插件注入侧边栏底部: …工作区列表… / 🗑️ 回收站 / ⚙️ 设置 ← 本插件注入管理页与确认弹窗: 💬 查看对话 · 定期清空设置 · 同名对照 ← v1.2.0 增强

说明 / Note:npm 上另有同名裸包 dsh-session-cleaner(fountunt 发布,专注 live store detach)。
本包是功能完整的回收站方案(移入/恢复/彻底清除/定期清空/防误删/预览),两者互不冲突;为避免混淆,本包以 scoped 名 @luchenglong/dsh-session-cleaner 发布。

功能特性 / Features

- 🗑️ 可逆回收站 Reversible trash:移入回收站(物理目录移至 dsh-home/.session-cleaner-trash\\,清理 workspace.json / session_projcache),可随时恢复或彻底清除。
- ⚠️ 重名防误删 Name-collision guard:从 React Fiber 精确提取 sessionId,永不按标题猜 id;二次确认弹窗展示同名会话摘要与首条指令对照。
- 💬 对话内容预览 Conversation preview:多帧 zstd 解压 + JSONL 提取(标题/轮次/用户与助手消息/ 首条指令高亮),自动过滤系统注入消息,首条用户指令 100% 为真人提示词。
- 🧹 定期自动清空 Scheduled auto-purge:会话移入回收站 N 天后自动彻底删除(可开关、可调天数与检查间隔),回收站内展示剩余天数/过期状态。
- 🎨 主题与 DSH 主体一致 DSH-native theming:内嵌官方 design-platform 设计令牌(light/dark),全部组件使用 --dsw-alias- 语义变量;主界面注入的弹窗同步跟随。
- 🛡️ 安全加固:Session ID 路径穿越校验;残留条目清理;活跃会话(projcache openStep/pendingCalls 非空)拒绝删除。

安装 / Install

要求:DSH Desktop ≥ 0.3.15(@deepseek-ai/dsh >= 0.1.1-rc.2),Node ≥ 20。

方式一:npm 安装(推荐) / Install from npm (recommended)

dsh plugin --profile web add @luchenglong/dsh-session-cleaner

安装后 bundle 补丁层自动注册插件(dsh.bundle.patch → cordis.patch.yml,id: session-cleaner)。

方式二:本地包安装 / Install from a local package

dsh plugin --profile web add

方式三:手动放置 / Manual install

把 lib/index.mjs 放到 dsh-home 根目录(如 session-cleaner.plugin.mjs),并在用户层补丁 dsh-home/cordis.patch.yml 增加:

- insert:
- id: session-cleaner
name: file:///C:/.../dsh-home/session-cleaner.plugin.mjs
config:
verbose: false

保存后 DSH 自动热加载(或重启),刷新一次页面(F5) 后侧边栏出现「回收站」入口与菜单项。
机器特定配置写在用户层补丁的同 id 行即可整体覆盖 bundle 层默认值。

验证:GET /api/session-cleaner/sessions 返回 200 即已生效。

使用 / Usage

日常操作(GUI)

1. 鼠标悬停侧边栏任一会话 → 点「⋯」→ 移入回收站
2. 确认弹窗核对信息(完整 sessionId、首条用户指令;同名会话有黄色警示区列出各自指令对比)→ 确认
3. 查看对话:管理页 /session-cleaner 点「💬 查看对话」行内展开卡片
4. 后悔了:侧边栏「🗑️ 回收站」(或 /session-cleaner#trash)→ 找到该项 → 恢复
- 回收站视图只展示回收站与设置,不显示工作区会话;页头「💬 会话列表」按钮可切换回完整管理页
5. 确定不要了:回收站里彻底清除;或交给定期自动清空到期自动处理

定期清空设置 / Auto-purge settings

管理页「回收站」区块设置卡片:开关「定期自动清空」+ 保留天数(1–3650)+ 检查间隔(15–1440 分钟)。
持久化到 dsh-home/session-cleaner-settings.json(独立文件,不会被清空)。
默认:开启、保留 30 天、每 60 分钟检查一次;另有「🧹 立即清理已过期」按钮。

回收站显示规则 / Trash list semantics

| 条目状态 | 是否显示 |
| 已在回收站且不在当前列表 | ✅ 显示 |
| 已归档会话(含删除时归档、workspace.json 仍标记归档) | ✅ 显示(「已归档」标记) |
| 会话仍在「当前列表」(sessions 目录中未归档可见会话) | ❌ 隐藏(视为陈旧/重复备份) |

HTTP API

| 方法 | 路径 | 说明 |
| GET | /api/session-cleaner/sessions | 会话列表(含 archived/subagent/visible/live 标记;isLive 只看 projcache 的 openStep/pendingCalls) |
| GET | /api/session-cleaner/trash | 回收站列表(服务端过滤 + 过期/剩余天数计算) |
| GET/POST | /api/session-cleaner/settings | 读取 / 保存定期清空设置 |
| POST | /api/session-cleaner/purge-expired | 立即清理已过期条目 |
| GET | /api/session-cleaner/preview?sessionId= | 对话内容预览(zstd 解压 + JSONL 提取) |
| POST | /api/session-cleaner/delete | { sessionId, confirm: "DELETE" } 移入回收站 |
| POST | /api/session-cleaner/restore | { sessionId } 恢复 |
| POST | /api/session-cleaner/purge | { sessionId, confirm: "PURGE" } 或 confirm: "PURGE-ALL" |
| GET | /session-cleaner | 管理页(支持 #trash 锚点与对话展开) |

示例($base 为 DSH GUI 实际运行地址,端口每次重启可能变化):

$base = 'http://127.0.0.1:58644' # 以实际 GUI 地址为准

列出会话(观察 isLive / titleCollision 字段) Invoke-RestMethod "$base/api/session-cleaner/sessions"

获取指定会话的对话预览(同名分辨核心) Invoke-RestMethod "$base/api/session-cleaner/preview?sessionId=session-xxxxxxxx"

移入回收站 Invoke-RestMethod "$base/api/session-cleaner/delete" -Method Post -ContentType 'application/json' -Body '{"sessionId":"session-xxxxxxxx","confirm":"DELETE"}'

数据布局 / On-disk layout

dsh-home/
├── .session-cleaner-trash/
│ └── /
│ ├── .trash-info.json # { deletedAt, title, originalWorkspacePath, originalSessionDir, targetWsId, projRecord, isSubagent, isArchived }
│ └── session-data/ # 原会话物理目录 ├── session-cleaner-settings.json # 定期清空设置(保留天数/开关/检查间隔) └── sessions/… # 未受影响

已知边界 / Known boundaries

- 恢复的会话需重启 DSH 后才会重新出现在侧边栏列表(宿主 workspace registry 无外部收养 API)
- 有未闭合 step 的会话会被拒绝删除(防数据截断);状态落定后自然可删
- isLive 判定不能用 SessionStore 的内存加载状态——DSH 后端会把打开过的会话常驻内存,那样所有空闲会话都会被误判为活跃而全部拒删。本插件只认 projcache 的 openStep/pendingCalls 硬信号
- 前端选择器使用 [class="..."] 包含匹配(如 _menuOpen),对 CSS Module 前缀变化免疫;DSH 大版本改版 DOM 结构时需重新适配
- 自动清空是不可逆操作:开启后到期条目会被后台任务直接删除;如不希望自动删除请关闭开关

开发 / Development

布局

- lib/index.mjs:单文件宿主插件(export const name = 'session-cleaner' + apply(ctx, config));无 client 半边(注入脚本由 webserver/index-inject 事件服务端下发)
- cordis.patch.yml:bundle 补丁层(package.json 的 dsh.bundle.patch 声明)
- smoke-test.mjs:逻辑冒烟测试(25 项断言,临时 dshHome 副本上运行,不触碰真实数据)

热更新(改代码不用重启 DSH)

DSH 的 ESM 模块缓存不会因文件内容变化而失效。手动放置部署时,修改源码后把 cordis.patch.yml 条目 name 的 query 版本号 +1(如 ?v=7 → ?v=8)保存即可触发热加载。

测试

node smoke-test.mjs # 25 项断言:设置读写/安全校验/归档标记/回收站过滤/过期清理/移入/恢复/归档还原/彻底清除
node --check lib/index.mjs

兼容性 / Compatibility

| 项 | 值 |
| @deepseek-ai/dsh | >= 0.1.1-rc.2(测试于 0.1.2-alpha.5) |
| DSH Desktop | >= 0.3.15 |
| Node.js | >= 20 |

版本 / Version

见 CHANGELOG.md。当前:v1.2.0。

License

MIT © 2026 new-256
预览分享卡片长什么样 ↓new-256/dsh-session-cleaner
分享 · DeepSeek Harness Hub
new-256/dsh-session-cleaner

把会话移入回收站,可恢复或定期彻底清除

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部