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

会话删除 rhl88/dsh-session-delete

DeepSeek Harness
rhl8825 天前有提交已提供中文文档扫描:含敏感能力

在侧边栏永久删除会话及其完整历史记录

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

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

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

状态速览

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

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

验证判据与等级说明 →

可信度证据

⚠︎ 实装验证未通过(unknown · 2026/11/3) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

读写/删除本地文件发起外部网络请求
查看扫描证据(共 8 处,展示前 8 条)
  • 写入本地文件
    index.js:96
    await appendFile(file, `${new Date().toISOString()} ${line}\n`);
  • 读取本地文件
    index.js:182
    return (await fsStat(path)).isDirectory();
  • 读取本地文件
    index.js:201
    entries = await readdir(root, { withFileTypes: true });
  • 删除本地文件递归
    index.js:320
    await rm(dir, { recursive: true, force: true, maxRetries: 12, retryDelay: 250 });
  • 删除本地文件递归
    index.js:351
    await rm(dir, { recursive: true, force: true, maxRetries: 12, retryDelay: 250 });
  • 删除本地文件
    index.js:381
    await rm(cachePath, { force: true });
  • 发起网络请求
    client.js:163
    fetch(TRACE_ROUTE, {
  • 发起网络请求
    client.js:213
    const response = await withTimeout(fetch(DELETE_ROUTE, {
扫描于 2026/11/4(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

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

功能亮点

  • 侧边栏删除会话
  • 永久移除会话记录
  • 清除完整历史

README

由 DeepSeek 最新模型翻译生成
dsh-session-remove DeepSeek Harness (cordis) bundle 插件,为 Web GUI 加入永久删除会话功能。原版 DSH 只能归档会话:侧边栏会话菜单里多出一条破坏性的删除会话项(排在置顶/重命名/分叉/归档之后,带分隔线),一个确认对话框,以及一条宿主路由,用来物理移除会话的持久化产物。 中文说明 在侧边栏会话菜单里加入删除会话:永久移除会话记录与完整历史,补足官方只能归档的限制。菜单项排在 置顶/重命名/分叉/归档 之后,带分隔线与危险色,点击后弹出确认对话框。 安装(三种方式任选) ① 从 GitHub 仓库安装(推荐;插件目录里展示的就是这条) dsh plugin add github:rhl88/dsh-session-delete ② 从本地目录 / 预构建 tarball 安装 dsh plugin add D:\path\to\dsh-session-delete dsh plugin add D:\path\to\local-dsh-session-delete-1.0.0.tgz ③ 等价的手工方式(在 profile 目录里) cd C:\Users\Administrator\.dsh\profiles\desktop
展开完整文档(README 剩余 1 节)
dsh-session-remove

DeepSeek Harness (cordis) bundle 插件,为 Web GUI 加入永久删除会话功能。原版 DSH 只能归档会话:侧边栏会话菜单里多出一条破坏性的删除会话项(排在置顶/重命名/分叉/归档之后,带分隔线),一个确认对话框,以及一条宿主路由,用来物理移除会话的持久化产物。

中文说明

在侧边栏会话菜单里加入删除会话:永久移除会话记录与完整历史,补足官方只能归档的限制。菜单项排在 置顶/重命名/分叉/归档 之后,带分隔线与危险色,点击后弹出确认对话框。

安装(三种方式任选)

① 从 GitHub 仓库安装(推荐;插件目录里展示的就是这条)
dsh plugin add github:rhl88/dsh-session-delete

② 从本地目录 / 预构建 tarball 安装
dsh plugin add D:\path\to\dsh-session-delete
dsh plugin add D:\path\to\local-dsh-session-delete-1.0.0.tgz

③ 等价的手工方式(在 profile 目录里)
cd C:\Users\Administrator\.dsh\profiles\desktop
pnpm add github:rhl88/dsh-session-delete
再把 dsh.profile.bundles 设为: ["@deepseek-ai/dsh-base", "@deepseek-ai/dsh-web-app", "dsh-session-remove"]

装完重启 DeepSeek Harness,并刷新 GUI 页面

dsh plugin add 与插件页安装会默认启用该 bundle;只有手工 pnpm add 才需要自己改 dsh.profile.bundles。

删除内容:会话日志目录 ~/.dsh/sessions/<项目目录>/<会话id>/、投影缓存 ~/.dsh/storages/session_projcache/sessions/<会话id>.json,并从工作区记账、置顶集合、归档集合中清除该会话 id,随后广播 api-session/removed,侧边栏立即更新。不删除(v1):内容寻址的附件字节(跨会话共享)、子代理会话日志、全文检索索引行(下次搜索会自动对账剔除)。

安全侧设计:所有注册表调用都带超时且失败不致命——工作区操作队列卡住时仍会删除文件,并在响应里返回 degraded 说明;活动会话未释放句柄则返回 409 且不动文件,稍后重试即可。

两点注意:① 只装一份——行 id 与浏览器插槽 id 固定,同时选中两份安装会冲突;② 改宿主端代码需要重启应用——desktop 组合关闭了模块热重载(HMR root: []),且重新导入同一模块 URL 会命中 ESM 缓存。包内没有声明任何依赖(宿主只用 node 内置模块,客户端只用浏览器模块基线),因此没有版本兼容门槛。

中文详细说明见 INSTALL.zh.md;宿主逐步日志 session-delete.debug.log、浏览器进度标记 session-delete.client.log 都写在已部署的 index.js 同目录,便于排查。自测:node test/paths.test.js、node test/module-load.test.js、node test/delete-flow.test.js。

以下为英文文档 / English documentation follows.

删除会移除什么

1. JSONL 后端的会话目录
~/.dsh/sessions/<projectKey(cwd)>/<encodeSegment(sessionId)>/(所有格式代际、压缩变体与租约文件)。
2. 投影缓存记录 ~/.dsh/storages/session_projcache/sessions/<sessionId>.json。
3. 注册表记账:把该 id 从所属工作区记录中解绑,并从置顶集合与归档集合中剔除;发出 api-session/removed,让每个已连接的浏览器立即对账。

v1 中刻意不移除:内容寻址的附件字节(按设计跨会话共享)、后代子代理会话日志(本来就不在侧边栏显示)、全文索引行(SQLite 索引在下次搜索时与持久化对账——已删除的会话会自行消失)。

工作原理

宿主端(index.js,行 session-delete):在组合的 webServer 上注册 POST /session-delete/delete,位于 connection 信任围栏之后(Host/Origin + 浏览器认证——与随附应用路由同一道关卡)。一次删除:
1. 解析会话(先查实时存储,再查 sessionPersistence.stat);未知会话 → 404,不写入任何内容。
2. workspaceRegistry.archiveSession(id, { stopActivity: true }) —— 注册表自身的机制会停掉正在运行的回合、任务、子代理后代和提醒;归档集合会拦截这些停止动作引发的每一次唤醒。已归档时幂等。
3. 有界等待(timeoutMs,默认 20 秒),等实时会话离开 ctx.sessions —— 也就是等 session/disposed 排空并关闭持久化写入句柄(Windows 在句柄打开时会阻止删除文件)。超时 → 409 session-busy;会话保持归档状态,稍后重试。
4. rm -r 删除会话目录(路径函数逐字复刻 JSONL 后端的 encodeSegment/projectKey;每个候选项都要在配置的根目录内做包含性检查,针对瞬时锁做有界重试,当头部 cwd 与物理布局不一致时回退到项目目录扫描)。
5. 删除投影缓存记录文档。
6. 从工作区记录中分离、取消固定、取消归档 —— 每次写入都会发布常规的 feed 增量,所以侧边栏会实时移除该行。
7. 发出 api-session/removed。

客户端部分(client.js,web 平台):菜单项挂在 sidebar.workspaces.session.menu.item(顺序 500,danger + 分隔符),确认框是 shell.overlay 的 Modal。确认时先运行 ctx.uiWorkspace.archiveSession(id, { stopActivity: true })(停止工作,并在被删除的会话处于打开状态时清空主视图,释放让会话保持活跃的客户端引用),然后 POST 删除路由。失败时在对话框中显示宿主返回的消息;归档步骤之后删除失败会让会话保持归档状态 —— 已隐藏,但可以通过「取消归档」恢复。

只依赖基础浏览器模块(react、@deepseek-ai/dsh-client-store、@deepseek-ai/dsh-client-ui-primitives)和宿主上的 node 内置模块 —— 该包声明无依赖、无 dsh peer 范围,所以不会引发版本豁免摩擦,在任何 dsh 运行时都能解析。槽位所有者的 README 明确要求通过 loader require 解析 MenuItemButton;代价是与固定组合的 primitives 耦合。

安装

该包是 cordis bundle:package.json 声明 dsh.bundle.patch + dsh.client,cordis.patch.yml 插入 session-delete 行,配置档的 dsh.profile.bundles 选中它。

1. install (any of these)
dsh plugin add github:rhl88/dsh-session-delete # from this repository (recommended)
dsh plugin add D:\path\to\dsh-session-delete # from a local directory
dsh plugin add D:\path\to\local-dsh-session-delete-1.0.0.tgz # from a packed tarball

equivalently, by hand, from the profile directory:
cd C:\Users\Administrator\.dsh\profiles\desktop
pnpm add github:rhl88/dsh-session-delete

2. dsh plugin add and the Plugins page enable the bundle by default.

只有手动 pnpm add 这条路线,才需要把选择写进

"dsh": { "profile": { "bundles": [

"@deepseek-ai/dsh-base", "@deepseek-ai/dsh-web-app", "dsh-session-remove" ] } }

3. 重启应用,然后刷新 GUI 页面

两点说明:

- 只安装一份。 行 id(session-delete)和浏览器插槽 id 都是固定的,所以同时选中两份这个插件就会冲突——比如已发布的 dsh-session-remove,加上一份带版本号的本地镜像,也就是这个桌面配置档验证时用的 -v2 副本。先移除另一份:pnpm remove @local/dsh-session-delete-v2。
- 宿主侧改动需要重启应用。 桌面组合把 HMR 行设为 root: []——模块监听关闭,只有配置档配置会重新加载——而重新导入同一个模块 URL 只会返回缓存副本。

这个工作区目录是权威源。实际桌面配置档验证时用的是它的带版本号镜像, C:\Users\Administrator\.dsh\local-plugins\dsh-session-delete-v2\(文件完全相同,包名加了 -v2 后缀,客户端模块 id 对应),这样做是为了在不重启应用的情况下加载修好的宿主侧。把配置档切回这个权威包,就是改一下 bundle 列表再加一次重启。

调试卡住的删除

两侧都会记录进度,所以不用浏览器控制台也能定位卡在哪里:

- session-delete.debug.log,放在部署后的 index.js 旁边——宿主每一步一行(request、fence、body、stat、locate、archive、dispose wait、rm、cache、accounting、response),外加一个 90 s 的请求看门狗。
- session-delete.client.log——浏览器侧的标记(confirm、archive、delete: posting、status),通过 POST /session-delete/trace 上报。

两者都是纯追加式调试产物,可以放心删除。删除路线刻意不依赖注册表:每次注册表调用都有超时保护,且失败不致命,所以工作区操作队列卡死也不会让删除搁浅——文件照样删掉,响应里会报告哪些步骤降级了。

测试 pwsh
node test/paths.test.js # 路径编码,对照真实的 ~/.dsh 目录结构检查
node test/module-load.test.js # 宿主/客户端模块形态,仅基线依赖
node test/delete-flow.test.js # 真实路线跑在 fixture 目录上:

普通删除、注册表卡死、会话忙、

信任围栏、未知 id、畸形请求体、

持久化 stat 挂起(扫描回退)

配置(cordis 行配置)

| key | default | meaning |
| timeoutMs | 20000 | 等待活动会话 dispose 的上限(钳制在 1 s–5 min) |
| sessionsRoot | $DSH_HOME/sessions | JSONL 后端根目录覆盖 |
| storagesRoot | $DSH_HOME/storages | 存储根目录覆盖(投影缓存) |

开发说明
- paths.js 存放纯路径辅助函数(不导入任何模块);test/paths.test.js 对它们做单元测试,包括针对本机真实 ~/.dsh 目录结构的抽查(只读)。
- 会话 id 从不直接落到文件系统上:encodeSegment 是单射,且能防目录穿越;记录文件名被限制在存储后端允许的路径安全键类里。
- 删除带子代理后代的会话时,只删除指定的那个会话;后代的日志仍留在磁盘上(它们的行在侧边栏隐藏)。
预览分享卡片长什么样 ↓rhl88/dsh-session-delete
分享 · DeepSeek Harness Hub
rhl88/dsh-session-delete

在侧边栏永久删除会话及其完整历史记录

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