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

会话回收站 OliYogSothoth/dsh-plugin-session-purge

DeepSeek Harnessv1.3.0
OliYogSothoth13 天前有提交已提供中文文档扫描:含敏感能力

两步删除会话。 DSH 只会归档会话 —— dsh-client-ui-workspace 的 README 明写…

30.5/100
综合分
1
GitHub 星标
542
npm 周下载
—/5
用户评分

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

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

状态速览

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

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

验证判据与等级说明 →

可信度证据

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

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

✓npm 包dsh-plugin-session-purge @ 1.3.0
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

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

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

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

读写/删除本地文件发起外部网络请求
查看扫描证据(共 18 处,展示前 14 条)
  • 读取本地文件
    host.js:498
    projects = await readdir(root, { withFileTypes: true })
  • 读取本地文件
    host.js:506
    sessions = await readdir(join(root, project.name), { withFileTypes: true })
  • 写入本地文件
    host.js:528
    await mkdir(dirname(destination), { recursive: true })
  • 写入本地文件
    host.js:529
    await rename(directory, destination)
  • 写入本地文件
    host.js:549
    await mkdir(dirname(destination), { recursive: true })
  • 写入本地文件
    host.js:550
    await rename(source, destination)
  • 删除本地文件递归
    host.js:726
    await rm(join(this.trashRoot(), entry.projectDir, entry.id), { recursive: true, force: true, maxRetries: 3 })
  • 读取本地文件
    host.js:756
    projects = await readdir(this.trashRoot(), { withFileTypes: true })
  • 读取本地文件
    host.js:764
    if ((await readdir(path)).length === 0) await rm(path, { recursive: true, force: true })
  • 删除本地文件递归
    host.js:764
    if ((await readdir(path)).length === 0) await rm(path, { recursive: true, force: true })
  • 读取本地文件
    host.js:916
    entries = await readdir(sessionsRoot, { withFileTypes: true })
  • 读取本地文件
    host.js:924
    if ((await stat(candidate)).isDirectory()) found.push(candidate)
  • 删除本地文件递归
    host.js:1009
    await rm(directory, { recursive: true, force: true, maxRetries: 3 })
  • 发起网络请求
    client.js:858
    const response = await fetch(ROUTE, {
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

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

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 会话移入回收站
  • 支持还原会话
  • 启动时清理日志缓存

彻底删除 DeepSeek Harness 会话——走回收站:先移入、可还原,下次启动再清掉日志、投影缓存、溢出文件和 workspace 记账。

README

由 DeepSeek 最新模型翻译生成
dsh-plugin-session-purge 两步删除会话。 DSH 只会归档会话 —— dsh-client-ui-workspace 的 README 明写 "No Session deletion — sessions can be archived but never deleted";这个插件补上删除。 入口 | 入口 | 位置 | 谁用 | | 会话「…」菜单里的一行 放入回收站(order 500,排在归档之后) | 侧栏任意会话行 | 人 | | 侧栏底部 回收站 入口(带待删数量) | 侧栏页脚,Settings 旁 | 人 | 只有一个入口、没有 agent 工具:模型不能自己删会话,只有你手点才会发生。 界面 会话「…
展开完整文档(README 剩余 1 节)
dsh-plugin-session-purge

两步删除会话。 DSH 只会归档会话 —— dsh-client-ui-workspace 的 README 明写 "No Session deletion — sessions can be archived but never deleted";这个插件补上删除。

入口

| 入口 | 位置 | 谁用 |
| 会话「…」菜单里的一行 放入回收站(order 500,排在归档之后) | 侧栏任意会话行 | 人 |
| 侧栏底部 回收站 入口(带待删数量) | 侧栏页脚,Settings 旁 | 人 |

只有一个入口、没有 agent 工具:模型不能自己删会话,只有你手点才会发生。

界面

会话「…」菜单里点「放入回收站」 —— 确认框列出将要移出的目录,以及会连带移出的子代理会话数(可取消勾选):

放入回收站确认框

侧栏底部的「回收站」入口 —— 没有待删项时 / 有待删项时(后者带数量):

回收站入口

回收站入口(带待删数量)

回收站面板 —— 每行可「恢复」或「立刻删除」,底部可「清空回收站」:

回收站面板

子会话折叠到父会话行下 —— 主会话行带「▸ N 个子会话」,默认收起、点开展开;父会话已被删除的子会话则归到一行「⚠ 父会话已删除 · N 个子会话」下(同样默认收起,一行都不丢):

子会话折叠到父会话行下

回收站为空时:

回收站为空

删什么

被真正删除时,按会话分别清掉三处:

1. 工作区登记 —— 每个 Workspace 的 sessionIds、全局的归档集合与置顶集合。走 WorkspaceRegistry / WorkspaceHandle.detachSession 自己的 API 写,不由插件直接改 workspace.json。
2. 投影缓存 —— 走 storage domain 自己的表(session_projcache / sessions)的 delete,内存表与磁盘文档一起掉。
3. 会话目录 —— 会话存储根下的 <项目键>/<会话 id>/,里面是压缩后的会话日志全部世代。

会话存储根取 sessionPersistence.root(JSONL 后端配置的那个),取不到就退回 DSH_HOME/sessions;两个都取不到就拒绝删除,不猜路径。

何时删:上面这三处不是在点菜单那一刻清的 —— 点「放入回收站」只是把目录移走(不删任何字节、可恢复),真正删除发生在下次启动 DSH 时。见下面「两段式删除」。

不删什么

- 附件字节:内容寻址、多个会话共用同一份,删了会连累别的会话。
- 搜索索引:派生数据,自己按 persistence 列表对账,看得见日志消失就删行。

安全闸门

- 调用方声明了自己的会话身份时(请求里带 callerSessionId),要删的集合里包含那个会话 → 拒绝。手工点击的界面路径不带这个字段(它不是一个会话),所以不受此限。
- 会话存储根解析不出来 → 拒绝,不猜路径。
- 会话在进程里活着(有窗格开着、正在跑、被 agent 持有)不会被拒绝,而是先停掉它的工作、再驱逐宿主内存里的条目,然后才动文件 —— 不然 Windows 上写句柄一直挂到进程退出,文件根本删不掉。plan 会把每个目标的 live 标出来。
- 界面上点「放入回收站」先取 plan(要删的目录清单 + 会连带删掉的子代理会话数),确认框里展示,再走 move。

子代理会话:origin: "subagent" 的隐藏后代(侧栏本来就看不到、父会话没了就再也够不着)默认一起删,可在确认框里取消勾选;可见的 fork 子会话永远不连带。

取消勾选之后留下的那些:它们没有侧栏行,父会话的确认框又是唯一会点名它们的地方 —— 父会话一旦离开会话根,界面上就再没有入口。所以回收站面板里单独有一节 「孤儿子代理会话 (N)」,逐个「放入回收站」。判定只有两条:origin === 'subagent',且它的 parentSession 不在会话根清单里(父被真删、父在回收站里,都表现为"不在清单里",所以不需要第三种判定)。走的完全同一套语义:先入回收站、下次启动真删、随时可恢复(恢复后它依旧是隐藏的,没有行)。

实现要点

- 投影缓存只读两处,且是同一个方法:restoredProjections(header) —— ① 恢复回执里带上 title / sessionListMetadata(恢复瞬间标题就正常);② 回收站面板的列表里,给回收站每一行与每个孤儿子代理行附上 title。两处都只走缓存自己的 cachedSnapshot(header, [...]) 只读面、只问已知键、从不写、从不种;取不到(服务缺失 / 无记录 / 读抛错 / 日志头读不出)一律留空 title: '',面板随即回落显示会话 id(有标题时 id 仍作为灰色小字显示)。除这两处之外没有任何代码读投影缓存。
- 宿主半边注册一条精确 Fetch 路由 api/session-purge(挂在已就绪的 /api 载体上),端点五个:plan(只出清单)· move(放进回收站)· list(回收站 + 孤儿子代理清单 + 各自的标题)· restore(移回原位)· empty(立刻真删;带 sessionIds 时只删指定的那几条)。走这条载体意味着鉴权(Host/Origin 校验 + 浏览器 cookie)在进入处理函数之前就已完成。
- 客户端半边注册四处:会话「…」菜单一行(sidebar.workspaces.session.menu.item,order 500)· 侧栏底部的回收站入口(sidebar.footer.action)· 回收站面板与删除确认框两个浮层(shell.overlay 各一处)。只 require('react'),不加载任何 Harness 客户端包;颜色只用 --dsw-alias-* 主题 token(带字面量回退),token 改名只会掉色、不会坏。

两段式删除

1. 放入回收站(点菜单那一刻):停掉该会话的工作 → 驱逐宿主内存里的条目 → 摘掉工作区成员名单(这一条才是让侧栏那行消失的开关)→ 把整个会话目录移进回收站。
此阶段不删任何字节,也不碰归档 / 置顶 / 投影缓存。
2. 真正删除(下次启动 DSH 时):扫描回收站 → 逐个删除目录 + 投影缓存 + spill 溢出文件 + 工作区成员名单 + 归档 / 置顶集合,并清掉本页那些带该会话 id 的持久键。

回收站里清单的唯一来源就是目录本身(会话 id 是目录名,原项目目录是上一层),所以没有任何清单文件或旁挂元数据。恢复 = 把目录移回去,cwd 从会话自己的日志头里读回来,会话回到原工作区。

⚠️ 恢复后的已知限制(实测):恢复只把文件移回去 —— DSH 的会话运行时与页面状态是启动时建立的,所以恢复后要重启一次 DSH,该会话才能正常显示内容并继续对话。在重启之前,不要在那个会话里发消息:它看起来能打开,但消息不会被保存。

位置:<DSH_HOME>\session-purge-trash\<项目目录>\<会话id>\(DSH_HOME 默认 ~/.dsh)。

卸载前请先清空回收站(面板里的「清空回收站」就是立刻真删)。卸载后没有任何代码在跑,回收站只能手动处理:删掉目录 = 真删;把里面的会话目录移回 <DSH_HOME>\sessions\<同一个项目目录>\ = 恢复。

安装

在界面上点:DSH 的 插件 页 → 右上 添加插件 → 把下面这行粘进去 → 安装:

https://github.com/OliYogSothoth/dsh-plugin-session-purge

装完重启 Harness。这条路会把包复制一份进 profile ⇒ 你不需要保留任何本地目录。

也发在 npm 上了:包名 dsh-plugin-session-purge(npm 页面)。把上面那行换成这个包名粘进去,效果一样 —— 不想依赖 npm 就用仓库地址,两条都行。

给 agent 的等价写法(你让模型替你装时才用;plugin_manager 是 DSH 暴露给模型的工具,它和界面按钮走同一套底层服务): plugin_manager → install_bundle → target: github:OliYogSothoth/dsh-plugin-session-purge

或者命令行:dsh plugin --profile web add github:OliYogSothoth/dsh-plugin-session-purge

走 npm 的话:plugin_manager → install_bundle → target: dsh-plugin-session-purge,或 dsh plugin --profile web add dsh-plugin-session-purge

本地目录安装(自己改源码时才用)

只有你改了源码、要让改动立刻生效才走这条路:它用 pnpm 的 link:,profile 里只指向你的源码目录。所以先把那个"本地路径"从哪来说清楚:

1. 把仓库拿到本地(这一步才产生"本地目录"):
git clone https://github.com/OliYogSothoth/dsh-plugin-session-purge

2. 把 clone 出来的那个目录的绝对路径填进「插件 → 添加插件」,例如: C:\Users\你\Documents\dsh-plugin-session-purge

⚠️ 只有这条路需要源码目录长期留着:包的内容不会被复制进 profile,删掉目录插件就失效。
改完怎么生效:client.js 刷新页面即可;host.js 必须重启 Harness(同名重装不生效)。

卸载

在界面上点:DSH 的 插件 页 → 找到 dsh-plugin-session-purge → 卸载。

只解除挂载;不会回滚已经删掉的会话。

给 agent 的等价写法(你让模型替你操作时才用;它和界面按钮走同一套底层服务,而且因为改的是 profile、跨会话生效,它会先要一次提权审批): plugin_manager → remove_bundle → target: dsh-plugin-session-purge

文件

| 文件 | 作用 |
| host.js | 宿主半边:精确路由(plan / move / list / restore / empty) |
| client.js | 浏览器半边:菜单行 + 确认框 + 回收站面板 + 结果提示 |
| cordis.patch.yml | bundle patch:插入本插件这一行 |
| locale/zh.json · locale/en.json | 插件页卡片上的标题与说明 |
| icon.svg | 插件页图标 |
| README.md · README.en.md | 中文说明(主)· 英文说明 |
预览分享卡片长什么样 ↓OliYogSothoth/dsh-plugin-session-purge
分享 · DeepSeek Harness Hub
OliYogSothoth/dsh-plugin-session-purge

两步删除会话。 DSH 只会归档会话 —— dsh-client-ui-workspace 的 README 明写…

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