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

会话彻底删除 JaMoLpE88/dsh-session-remover

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

从侧边栏菜单永久删除会话及其本地日志与缓存

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

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

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

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么
dsh 原生插件 · market
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 5 天前
档位由哪些信号合成

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

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

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

读写/删除本地文件发起外部网络请求
查看扫描证据(共 19 处,展示前 19 条)
  • 读取本地文件
    index.js:254
    const info = await lstat(directory).catch(() => undefined)
  • 读取本地文件
    index.js:258
    const entries = await readdir(directory, { withFileTypes: true }).catch(() => undefined)
  • 读取本地文件
    index.js:306
    projects = await readdir(root, { withFileTypes: true })
  • 读取本地文件
    index.js:315
    const info = await lstat(candidate).catch(() => undefined)
  • 删除本地文件
    index.js:370
    await rm(record, { force: true }).catch(() => undefined)
  • 删除本地文件递归
    index.js:389
    await rm(directory, { recursive: true })
  • 读取本地文件
    index.js:394
    const info = await lstat(directory).catch(() => undefined)
  • 发起网络请求
    client.js:85
    const response = await fetch(ROUTE, {
  • 读取本地文件
    check.mjs:15
    const manifest = JSON.parse(readFileSync(new URL('./package.json', import.meta.url), 'utf8'))
  • 读取本地文件
    check.mjs:16
    const client = readFileSync(new URL('./client.js', import.meta.url), 'utf8')
  • 读取本地文件
    check.mjs:20
    const patch = readFileSync(new URL('./cordis.patch.yml', import.meta.url), 'utf8')
  • 写入本地文件
    test-host.mjs:23
    await mkdir(session, { recursive: true })
  • 写入本地文件
    test-host.mjs:24
    await mkdir(join(project, keepId), { recursive: true })
  • 写入本地文件
    test-host.mjs:25
    if (withLog) await writeFile(join(session, 'session.v4.jsonl.zstd'), 'log')
  • 写入本地文件
    test-host.mjs:26
    await writeFile(join(project, keepId, 'session.v4.jsonl.zstd'), 'keep')
  • 写入本地文件
    test-host.mjs:29
    await mkdir(join(base, 'storages', 'session_projcache', 'sessions'), { recursive: true })
  • 写入本地文件
    test-host.mjs:30
    await writeFile(cacheFile, '{}')
  • 删除本地文件递归
    test-host.mjs:97
    const cleanup = () => rm(base, { recursive: true, force: true })
  • 读取本地文件
    test-host.mjs:101
    const exists = async (path) => stat(path).then(() => true, () => false)
扫描于 2026/11/1(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

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

从侧边栏菜单永久删除 DeepSeek Harness 会话,连同你电脑上存的对话文件和缓存数据一起清掉。

README

由 DeepSeek 最新模型翻译生成
dsh-session-remover dsh-plugin.org 从 ⋯ 菜单里彻底删除 DeepSeek Harness 会话。 一行红字,一次确认,对话就从 DSH 和磁盘上一起消失:它的 JSONL 日志、投影缓存,以及它在工作区注册表里的位置。 没有设置页,没有归档管理器,也没有智能体工具。界面只有英文。除此之外不加任何东西。 Español → README.es.md Delete session in the DeepSeek Harness sidebar session menu 会话的 ⋯ 菜单:Delete session 是红字,排在自带菜单项(pin、rename、fork、archive、copy Session ID)之后。工作区和会话名已打码。 Confirmation dialog for permanent session deletion 确认框:对话框里写明要删除的会话(此处已打码),Cancel 默认获得焦点;你确认之前,不会向 Host 发送任何内容。 它做什么 - 给每个会话行的 ⋯ 菜单加上 Delete session,红字,排在自带菜单项之后。 - 打开 DSH 风格的确认框,写明具体是哪个会话;Cancel 默认获得焦点,按 Escape 关闭对话框,什么都不做。 - 动存储之前先关闭会话。
展开完整文档(README 剩余 1 节)
dsh-session-remover

dsh-plugin.org

从 ⋯ 菜单里彻底删除 DeepSeek Harness 会话。 一行红字,一次确认,对话就从 DSH 和磁盘上一起消失:它的 JSONL 日志、投影缓存,以及它在工作区注册表里的位置。

没有设置页,没有归档管理器,也没有智能体工具。界面只有英文。除此之外不加任何东西。

Español → README.es.md

Delete session in the DeepSeek Harness sidebar session menu

会话的 ⋯ 菜单:Delete session 是红字,排在自带菜单项(pin、rename、fork、archive、copy Session ID)之后。工作区和会话名已打码。

Confirmation dialog for permanent session deletion

确认框:对话框里写明要删除的会话(此处已打码),Cancel 默认获得焦点;你确认之前,不会向 Host 发送任何内容。

它做什么

- 给每个会话行的 ⋯ 菜单加上 Delete session,红字,排在自带菜单项之后。
- 打开 DSH 风格的确认框,写明具体是哪个会话;Cancel 默认获得焦点,按 Escape 关闭对话框,什么都不做。
- 动存储之前先关闭会话。如果会话正开着,插件会执行 DSH 关闭自家智能体时用的那套有序拆除流程(stop、drain、释放写入方、detach),并等它跑完。
- 删除会话自己的目录 <session store>/<project>/<session-id>/,包括其中的 .v4.jsonl.zstd 日志。
- 删除派生缓存记录 storages/session_projcache/sessions/<session-id>.json,不留缓存标题或消息文本。
- 清理工作区注册表:把会话从所有列出它的工作区里摘掉,取消置顶,清除归档标记。
- 刷新侧边栏;如果删掉的正是屏幕上那个会话,就清空主面板。

它不做什么

- 不删除附件。 图片和文件存放在按内容寻址的共享存储里(attachments/v1/objects/<hash>),其他会话可能引用它们,所以保持原样。参见磁盘上保留什么。
- 不碰其他会话、你的工作区文件、DSH 日志、备份或任何云端副本。
- 不添加设置页、归档浏览器或历史搜索。
- 不添加智能体工具或斜杠命令:删除只能由用户操作,并在 UI 中确认。
- 不发起任何网络请求。

为什么没有设置页

唯一的决定是删哪个会话,而这已经是操作的参数。没有阈值要调,没有间隔,没有密钥,没有作用域。配置页只会成为第二个地方,用来解释同一套行为。

环境要求

- DSH Desktop >= 0.2.1-rc.3,配置档 desktop(在 0.2.1-rc.3、Windows 11 上测试过)。
- 默认的按会话 JSONL 会话存储。加载时拒绝非 JSONL 后端。
- Node 22+(DSH 自带运行时)。
- 安装或更新插件后要重启一次。 Host 部分拦截智能体生命周期,所以只能关闭它加载之后打开的会话。之前打开的会话会被拒绝,不会删一半。

安装

从 npm:

dsh plugin --profile desktop add @jamolpe88/dsh-session-remover

从仓库:

dsh plugin --profile desktop add github:JaMoLpE88/dsh-session-remover

开发时从本地检出目录安装:

dsh plugin --profile desktop add C:\path\to\dsh-session-remover

安装后完全退出并重新打开 DSH,然后刷新窗口。

用法

1. 在侧边栏悬停到某个会话,打开它的 ⋯ 菜单。
2. 选择 Delete session(红色,最后一行)。
3. 在对话框中核对会话名称,点 Delete permanently 确认,或取消。

已归档的会话在侧边栏没有行:先从 DSH 自带的归档页取消归档,再从它的菜单删除。删除时会一并清除归档标记和置顶,注册表里不会留下过期数据。

删除哪些内容

| 路径 | 是什么 |
| <session store>/<project>/<session-id>/ | 会话自己的目录:带版本号的 .jsonl.zstd 日志及旁边的文件 |
| storages/session_projcache/sessions/<session-id>.json | 缓存的投影:标题、由消息派生的值 |
| storages/workspace.json | 只改引用:会话被解除关联、取消置顶、取消归档 |

其他内容一律不动。会话不会被移到回收站:文件直接删除,空间立即释放。

磁盘上保留什么

附件。 图片和文件按内容哈希各存一份,放在 attachments/v1/objects/ 下。分叉会话继承对同一批哈希的引用,删掉对象会弄坏分叉的图片。DSH 不维护引用计数,所以插件不去猜,保持原样。
纯文本对话占不了多少空间。如果你的目标是回收磁盘空间,占大头的是图片——这项清理需要扫描剩余日志,目前刻意不在范围内。

同样不动的还有:DSH 自己的日志、你的工作区文件、你自己做的备份,以及任何已经离开这台机器的副本。

工作原理

Host 这一半注册一条路由,POST /plugins/session-remover/delete:

1. 请求必须通过 Host 自己的请求防护,并带上 x-session-remover-confirmation: delete-session 请求头。链接、HTML 表单或跨站请求都造不出这个头。
2. 先校验会话 id(^[A-Za-z0-9][A-Za-z0-9_-]{0,127}$),通过之后才能用来拼路径。
3. 活跃智能体通过 ctx.agents.create/resume 返回的 AgentHandle 关闭。DSH 的注册表本身不暴露 dispose,所以插件在句柄创建时就留存下来,手里没有句柄就拒绝删除。
4. 存储目录由 sessionPersistence.stat + locate 解析,再扫描存储根目录交叉核对,然后要求它必须正好是 <root>/<one project segment>/<session id>、是真实目录、且包含会话日志文件。
5. 清理工作区引用,删除目录,再通过投影缓存的表 API 删掉对应记录(没有 API 时直接删文件)。
6. 用一次轻量搜索同步 SQLite 搜索索引,否则被删的会话要等到下次搜索才会从索引里消失。目录检查之后的每一步都是尽力而为,并且会报告结果,绝不假设成功。

Client 这一半就是一个普通的 client.js,没有构建步骤:它在 sidebar.workspaces.session.menu.item 注册一行菜单,在 shell.overlay 注册一个对话框,只依赖 react,样式用 --dsw-alias-* token。它不加载 Harness Client 包,所以 DSH 更新就算改了某个基础组件的名字,也不会让入口变空白。

兼容性

| DSH | >= 0.2.1-rc.3(在 0.2.1-rc.3 上测试过) |
| Node | >= 22 |
| OS | Windows 11(已测试);macOS 和 Linux 未测试 |
| 配置档 | desktop(已测试);web 未测试 |
| 会话存储 | 每会话 JSONL 后端(默认) |
| 目录 | 已收录于 dsh-plugin.org |

验证状态:在 Windows 11 + DSH Desktop 0.2.1-rc.3 上测试过(2026-10-26)。菜单行和确认流程都通过界面操作;实际删除了一个真实会话(一个 fork),事后确认它的目录、投影缓存记录和工作区引用都已消失,同级的另一个会话保持完好。

未验证:macOS、Linux、web 配置档以及其他 DSH 版本。

限制

- 只测试了一个 DSH 版本。 删除路径依赖 JSONL 存储的磁盘布局,也依赖智能体注册表返回的 AgentHandle;未来的 DSH 版本可能改动其中任何一项。
- 插件加载前就已打开的会话无法关闭。 安装或更新后重启一次 DSH。
- 存储损坏或不符合预期时,直接拒绝,不强行处理。 目录是符号链接、会话目录里没有日志文件、或者在两个项目目录里匹配到多个结果,都会报错,并且不删除任何东西。
- 已归档的会话要先取消归档,因为 DSH 不会给它们侧边栏行。
- 附件会保留(见上文)。
- 同一会话一次只处理一个删除。 第一个还在跑时,第二个请求会被拒绝。

隐私

- 不访问网络,不上报遥测,不调用外部服务。
- 不读 cookie、token、凭据。
- 确认对话框只发送会话 id。
- 界面文字只有英文,这是有意为之。
- 上面的截图来自真实会话;工作区和会话名已打码。

故障排查

| 提示信息 | 含义 |
| This session was opened before Session Remover was loaded… | 智能体在插件加载之前就已存在。重启 DSH 再试;没有删除任何东西。 |
| DeepSeek Harness did not finish closing this session; nothing was deleted. | 关闭流程没有及时完成。重试;没有删除任何东西。 |
| The session directory does not contain a session log; nothing was deleted. | 这个目录看起来不是该会话的存储位置。没有删除任何东西。 |
| This session matches more than one storage directory; nothing was deleted. | 同一个 id 出现在两个项目目录里。请手动处理;没有删除任何东西。 |
| The session files could not be removed (…) | 操作系统拒绝删除;对话框会报告错误码。 |
| The delete request did not pass the origin and confirmation checks. | 请求不是来自应用窗口。重新加载 DSH。 |

出错时的规则始终一样:只有整条校验过的路径全部成功,才会删除,错误信息也会说明这一点。

开发

npm run check # syntax checks plus the path-validation self-check
npm test # end-to-end Host deletion against a throwaway tree

check.mjs 覆盖包含规则(非法 id、..、层级不对、外来目录),并检查 Client 模块 id、包名和补丁行三者一致——不一致会导致 web 启动崩溃。test-host.mjs 用打桩的 Harness 服务驱动真实处理逻辑:请求准入、非法 id、冷删除且同级目录存活、活动智能体拆除、缓存文件回退,以及拒绝把没有日志的目录当作存储。

本地安装:

dsh plugin --profile desktop add C:\path\to\dsh-session-remover

无需构建步骤:client.js 就是发布产物。

许可证

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

从侧边栏菜单永久删除会话及其本地日志与缓存

回到顶部