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

会话回收站删除 zenghang25/dsh-session-delete

DeepSeek Harness
zenghang2516 天前有提交已提供中文文档扫描:未发现敏感能力

在 DeepSeek Harness 侧边栏删除一个会话,把它的本地日志记录移入 Windows 回收站

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

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add zenghang25/dsh-session-delete
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · browser
装得上吗
本站已在 dsh 0.2.1-rc.5 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 16 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🟢 扫描:未发现敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。

发起外部网络请求
查看扫描证据(共 2 处,展示前 2 条)
  • 发起网络请求
    client.js:132
    fetch('/dsh-session-delete/diag', { credentials: 'same-origin' }).then(function (response) {
  • 发起网络请求
    client.js:236
    response = await fetch('/dsh-session-delete/delete', {
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

README

由 DeepSeek 最新模型翻译生成
dsh-session-delete 给 DSH(DeepSeek Harness)侧栏补上删除单个会话:会话行「⋯」菜单的最后一项是红色「删除会话」,点击后直接删除,不弹确认框,并立刻从侧栏消失。 同时给每个对话建立独立的产出目录(.dsh-sessions/<session-id>/),删除对话时连同它产生的文件一起删除。 适用于 DSH 0.2.1-rc.2(Web / Desktop 配置档,主要面向 Windows 桌面端)。 功能 | 入口 | 菜单项 | 行为 | | 会话行 ⋯ 菜单(末位,分隔线 + 红色危险样式) | 删除会话 | 一键删除该会话,无确认弹窗;日志与产出目录进 Windows 回收站,可还原 | 一次点击处理以下内容: | 内容 | 去向 | | 会话日志(含子代理子会话) | Windows 回收站(~/.dsh/sessions/<项目>/<session-id>/ 可还原) | | 该对话的产出目录 | Windows 回收站(<会话工作目录>/.dsh-sessions/<session-id>/ 可还原) | | 投影缓存 | 永久删除(可再生缓存,~/.dsh/storages/session_projcache/sessions/<session-id>.json) |
展开完整文档(README 剩余 1 节)
dsh-session-delete

给 DSH(DeepSeek Harness)侧栏补上删除单个会话:会话行「⋯」菜单的最后一项是红色「删除会话」,点击后直接删除,不弹确认框,并立刻从侧栏消失。

同时给每个对话建立独立的产出目录(.dsh-sessions/<session-id>/),删除对话时连同它产生的文件一起删除。

适用于 DSH 0.2.1-rc.2(Web / Desktop 配置档,主要面向 Windows 桌面端)。

功能

| 入口 | 菜单项 | 行为 |
| 会话行 ⋯ 菜单(末位,分隔线 + 红色危险样式) | 删除会话 | 一键删除该会话,无确认弹窗;日志与产出目录进 Windows 回收站,可还原 |

一次点击处理以下内容:

| 内容 | 去向 |
| 会话日志(含子代理子会话) | Windows 回收站(~/.dsh/sessions/<项目>/<session-id>/ 可还原) |
| 该对话的产出目录 | Windows 回收站(<会话工作目录>/.dsh-sessions/<session-id>/ 可还原) |
| 投影缓存 | 永久删除(可再生缓存,~/.dsh/storages/session_projcache/sessions/<session-id>.json) |
| 工作区账目 / 置顶 / 归档集合 | detachSession、unpinSession、unarchiveSession |

回收站还原:删完后打开 Windows 回收站,找到名为该会话 id 的目录 → 还原。
日志回到原路径后,去 DSH 的「已归档」/「未分组」里点「取消归档」或重新打开即可。
投影缓存不会进回收站(它只是缓存,会重新生成);非 Windows 平台回退为永久删除并记录警告。

运行中的会话会先被安全停止:写归档集合(agent/pre-step 门禁)→ sessions.flush 持久化屏障 → 短暂等待 live 会话关闭视图 → 然后无条件继续删除。
不会因为「会话仍处于打开状态」而拒绝删除(0.4.1 起;旧版会误报 409 active)。
删除是幂等的:只有投影缓存残留的幽灵会话、甚至完全不存在的 id,都返回成功而不是 missing;物理删除失败时会回滚归档,让会话恢复可见而不是灰着不放。

删除完成后,如果该会话仍 live 在宿主内存里(只存在于内存、没落到磁盘的会话,或视图还没释放的会话),插件会保持归档隐藏而不是取消归档 —— 否则宿主的 session 列表会让它重新出现在侧栏(典型表现:删掉后「未分组」又冒出一行)。等该会话被释放或 DSH 重启后,启动对账会自动清掉归档条目。

每个对话一个编号目录

会话 id 就是编号,shell 里可通过 DSH_SESSION_ID 读取(PowerShell $env:DSH_SESSION_ID,bash $DSH_SESSION_ID)。插件为每个对话建立:

<工作目录>/.dsh-sessions/<session-id>/ outputs/ 交付给用户的文件 memory.md 该对话的持久记忆/结论 tmp/ 临时文件

- 每个 agent 创建时,插件在 per-agent 系统提示词里写明该目录,要求所有生成文件必须写进去;workspace 的 AGENTS.md 可作为同样的兜底约定。
- 子代理(subagent)沿 parentSession 归属顶层对话,产出写进同一个编号目录。
- 删除顶层对话时整个目录一并移入 Windows 回收站,因此「删除对话 = 这个对话产生的文件一起进回收站(可还原)」。

版本历史

- 0.5.1(当前):修掉「删完行隐藏了,但侧栏还留着一个空的『未分组』分组头」。
客户端现在订阅会话列表 store:删除过的 id 一旦又出现在列表基线里就立刻 handleSessionRemoved 摘掉,并在启动后 0.8s / 3s 再兜底清理;CSS 隐藏继续保留。
- 0.5.0:删除改为可还原。会话日志目录与 .dsh-sessions/<id> 产出目录改成经 SHFileOperationW(FOF_ALLOWUNDO)移入 Windows 回收站,可以从回收站还原;投影缓存仍永久删除(可再生)。仍然是一键直删、无确认弹窗。非 Windows 平台回退为永久删除。
- 0.4.6:删除后侧栏一定不再出现这一行,即使宿主仍把 live 会话留在内存里:
- 客户端记住已删除的会话 id(localStorage),用 CSS 直接隐藏对应行,刷新列表后再摘一次;
- 删除成功后调用官方 workspaces.archiveSession 同步客户端归档集合;
- 启动时按 /diag 自动清理旧版本残留的「已归档 + live + 无落盘」幽灵行。
- 0.4.5:修复「删掉后侧栏又冒出一行(例如未分组的『问候』)」。原因:被删会话如果仍 live 在宿主内存里,宿主 session 列表仍会返回它,而旧版删除成功后统一 unarchive,于是它又以「未分组」行出现。现在仍 live 的会话删除后保持归档隐藏,不再复活;/diag 提供 live/workspace/queryList 只读诊断。
- 0.4.1:修复「会话只是被打开着、没有任务,却报『仍在运行,未能停止』」。
旧版把 DSH 中仍 attach 的 live Session 当成必须等它退出,5 秒等不到就中止并留下已归档的灰行;现在 flush 失败只记警告、最多等 1.5 秒就继续删除,物理删除失败时才回滚归档。GET /ping 改为只读、不设栅栏,便于排障。
- 0.4.0:合并路线。保留 0.2.0 的一键直删、删除范围与每对话产出目录;并入 0.3.0 的 Host 安全设计(connection.requestRejection 认证/Host-Origin 栅栏、 64 KiB 请求体上限、live 会话的 sessions.flush 持久化屏障)。
按用户要求去掉 0.3.0 的确认弹窗和回收站流程,改为直接删除(0.5.0 又按用户要求把回收站加回来,但仍然没有确认弹窗)。
- 0.3.0:确认弹窗 + 移到 Windows 回收站的版本(已废弃,见 git 历史)。
- 0.2.0:重写。修复「点击删除永远报 missing」(旧代码从 persistence.list() 快照的错误层级读 id);菜单从 MutationObserver 克隆 DOM 改为官方 slot 注册。
- 0.1.x:早期 DOM 注入版本(已废弃,菜单会重复)。

安装

git clone https://github.com/zenghang25/dsh-session-delete.git C:\Users\<you>\Documents\dsh-plugins\dsh-session-delete
dsh plugin --profile desktop add "C:\Users\<you>\Documents\dsh-plugins\dsh-session-delete"

add 的参数必须是绝对路径。包 manifest 里的 dsh.bundle.patch 会让它自动成为 profile 的一个 bundle 层,无需手改 cordis.patch.yml。

装完完全退出桌面端再启动(Host 半与 Client 半都会重新加载)。

卸载:

dsh plugin --profile desktop remove dsh-session-delete

实现

不依赖 DOM / React 内部结构,只用 DSH 0.2.x 的官方扩展点:

- sidebar.workspaces.session.menu.item:会话「⋯」菜单行列表 slot,本插件 order = 500 (官方 pin/rename/fork/archive/session-id 之后),渲染一个 danger 样式的 MenuItemButton,useMenuOpenState 负责关菜单。
- agent/created(Host 事件):建立产出目录并注册 per-agent 系统提示词段。
- ctx.webServer 同源路由。

| 路由 | 作用 |
| POST /dsh-session-delete/delete | { sessionId } → 删除;最多 64 KiB JSON;有认证/Host-Origin 栅栏 |
| GET /dsh-session-delete/ping | 只读健康检查:{ ok: true, version }(不设栅栏,便于排障) |
| GET /dsh-session-delete/diag | 只读诊断:live 会话 / 工作区账目 / sessionQuery 列表(不设栅栏) |

删除顺序(有意设计):

1. 枚举会话 header(live + sessionPersistence.list() 快照,id 在 header.id),并沿 parentSession 收集子代理子会话;
2. archiveSession(id, { stopActivity: true }):durable 归档集合是 agent/pre-step 门禁,先写它再停工作;已归档的会话先 unarchive 再归档,确保停止逻辑真的执行;
3. live 会话 sessions.flush(session);失败只记警告,不再中止删除;
4. 最多等 1.5 秒让 live 会话自然退出;超时也继续删,不再返回 active;
5. 先 detachSession(workspace.sessionIds getter 会按会话是否仍存在过滤,必须赶在删文件之前);
6. 把日志目录(persistence.locate() 精确路径 + 扫描会话根兜底)和 .dsh-sessions/<id>/ 产出目录移入 Windows 回收站;投影缓存永久删除;
7. 全部成功:unpinSession 清理置顶;仅对已不再 live 的会话 unarchiveSession 清理归档集合(仍 live 的保持归档隐藏,避免侧栏复活);有失败:把临时归档的会话 unarchive 回滚成可见,返回失败详情供重试。

启动时做一次轻量对账:清掉已不存在会话的归档 id 与孤立投影缓存。

安全边界

- 只删该会话自己的日志目录 / 投影缓存 / 产出目录:id 白名单、路径必须位于会话根或由持久化 header 的 cwd 构造;rmrf 拒绝根目录式路径。
- 附件对象(~/.dsh/attachments/v1/objects/…)是内容寻址共享资源,不随会话删除。
- 日志目录与产出目录进 Windows 回收站,可还原;投影缓存是可再生的,永久删除。
非 Windows 平台没有回收站支持,回退为永久删除并在响应里记警告。
- 文件删除带重试;若最终仍失败会返回失败详情(已删部分不回滚,重试即可收尾)。
- cost-meter 账本不清理。

验证

node test\host.test.mjs # 假 ctx + 真实临时目录,驱动真实路由
node test\client.test.mjs # 迷你 React/slot runtime,驱动真实注册组件

覆盖:认证栅栏、方法/参数校验、正常删除、子会话、幽灵会话、已归档会话、live 会话(含一直不退出/flush 失败也照删)、删除失败回滚归档、产出目录、启动对账、ping。

已知限制

- 主要面向 Windows 桌面组合(删除逻辑跨平台,但测试主要在 Windows 上跑)。
- 删除当前正在看的对话会先停掉它的运行工作并关闭视图。
- UI 文案在页面加载时按当前语言确定;切换语言后刷新页面。

许可证

MIT
预览分享卡片长什么样 ↓zenghang25/dsh-session-delete
分享 · DeepSeek Harness Hub
zenghang25/dsh-session-delete

在 DeepSeek Harness 侧边栏删除一个会话,把它的本地日志记录移入 Windows 回收站

这是你的仓库?认领条目

回到顶部