dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
为 DeepSeek Harness 补上「删除会话」:侧栏菜单一键删除,递归清理子会话、日志、投影缓存、搜索索引与工作区记账。
给 DeepSeek Harness 补上「删除会话」:点会话旁的 ⋯ → 删除,连子会话一起清干净。
npm 包名与仓库名都是 dsh-session-delete-cascade。
DeepSeek Harness 出于设计考虑只提供归档,不提供删除——会话可以隐藏,但永远不会被移除,日志会一直堆在磁盘上。这个插件把删除能力补回来,作为一个可随时卸载的 bundle,不动官方任何代码。
⋯ 菜单里新增「删除会话」,排在「归档会话」之后包已发布到 npm:https://www.npmjs.com/package/dsh-session-delete-cascade
设置 → 插件 → 添加插件,输入包名:
dsh-session-delete-cascade
也可以直接粘贴仓库地址 https://github.com/Changqin1024/dsh-session-delete-cascade。
装完完全退出并重开 App,侧栏会话的 ⋯ 菜单里就会出现「删除会话」。
⚠️ 桌面端的 profile 不能用 CLI 安装。 DSH 对
desktopprofile 做了排他保护:error: profile "desktop" is managed exclusively by the Electron application。 桌面端请走上面的「设置 → 插件」。
dsh plugin --profile <profile> add dsh-session-delete-cascade
例如 dsh plugin --profile web add dsh-session-delete-cascade。装完重启该 profile。
从 GitHub 安装也可以(npm 之外的备选路径,会锁定到具体 commit):
dsh plugin --profile <profile> add github:Changqin1024/dsh-session-delete-cascade
桌面端:设置 → 插件,找到本插件点卸载。
CLI:dsh plugin --profile <profile> remove dsh-session-delete-cascade。
engines.dsh 声明为 >=0.2.0-rc.2。本插件用到的
ctx.connection.fetch.register 在 DSH 0.2.0-rc.2 上验证通过。
在弹窗里点确认后,以下内容会被移除(针对目标会话及其子代理血缘):
| 内容 | 位置 | 处理方式 |
|---|---|---|
| 对话历史 | ~/.dsh/sessions/<项目>/<会话ID>/(append-only JSONL 日志) | 逐个删除目录 |
| 投影缓存(空会话标记、最后提问时间、标题等) | session_projcache 存储域 | 逐行删除 |
| 搜索索引行 | 会话搜索 SQLite 索引 | 日志消失后自动对账清除(索引观测的是持久化列表) |
| 工作区记账 | 每个工作区记录的 sessionIds,以及全局归档集、置顶集 | 逐项移除 |
不删的东西:按会话 ID 无法寻址的缓存,例如附件请求图缓存(~/.dsh/cache/attachments/request-images/)。清它需要先读日志拿内容哈希,代价不成比例;会话删掉后它也不会再出现在任何界面,后续按需重新生成。
子代理(origin: 'subagent')会被递归删除,包括子代理的子代理。
fork 不算子会话。 fork 出来的会话虽然带 parentSession 字段,但没有 subagent 来源,它是独立对话,会保留。这条规则跟 DSH 自带归档门禁判定会话归属的规则完全一致。
删除严格按以下顺序,保证任何中间状态都不是撕裂的:
session/delete-active 拒绝,并在详情里列出每一个出问题的会话 ID 和它的活动类型。拒绝时不会删除任何东西。第 3~6 步都是容错的(失败只记日志、不抛错),避免某个派生存储卡死导致日志残留——日志才是侧栏会一直显示的那个东西。
插件分 Host / Client 两半,通过 Connection 上的 HTTP 路由通信:
| 文件 | 职责 |
|---|---|
lib/index.js | Host 半边:注册 POST /api/session-delete.delete,血缘遍历与有序删除 |
lib/client.js | 浏览器半边:菜单行、带血缘预览的确认弹窗、结果提示(控件全部内联,无 Harness 包依赖) |
cordis.patch.yml | 插入唯一一条 Host 插件行 |
package.json | bundle 清单:dsh.bundle.patch + web 端 dsh.client 配置 |
icon.svg、locale/*.json | 插件管理页卡片元数据 |
⋯ 菜单:删除会话是最后一项~/.dsh/sessions/<项目>/<会话ID>/ 目录都不在了session.list() 里,不会被遍历到(实际使用中子会话总是先落盘)MIT