前言¶
在 DeepSeek Harness(DSH)里用 Web GUI 聊久了,侧边栏会堆很多会话;官方持久化层对会话文件是追加式设计,也没有对外暴露「删除整段对话」的 API。另一方面,想在某条消息里选中一段话追问或引用到输入框,桌面端原生右键菜单在 Electron 主进程里画,渲染层插件改不了。jingleboat 维护的 dsh-session-cleaner-host(仓库名 dsh-session-cleaner)把 host 与 Web 客户端打在一个 bundle 里,针对上述缺口补了两类能力:侧边栏删除会话,以及消息内选文的 Copy / Quote / Ask。
这是什么¶
dsh-session-cleaner-host 是社区 DSH 插件(SkillHub 目录:jingleboat/dsh-session-cleaner-host,源码:GitHub)。维护者 jingleboat;package.json 中版本为 1.0.2,MIT 许可证。它不依赖 @deepseek-ai/* 运行时包,host 半部仅使用 Node 内置模块。
一句话:在 DSH Web 界面增加「删除会话」入口,并用插件自绘的右键菜单支持复制、引用到 composer、以及通过复用的并发 subagent 在右侧栏流式回答追问。
核心功能¶
下面按 DSH 扩展点说明插件挂载的能力(与 README Features 表一致)。
删除会话¶
扩展点:sidebar.workspaces.session.menu.item。
从侧边栏会话行的菜单执行 Delete session 时,插件会:停止正在运行的会话(flush + detach)、从 workspace 注册表解除绑定、失效对应 projection 缓存、物理删除会话目录、清理 spill 目录;对 origin: subagent 的子会话级联删除(fork 分支不会级联);最后广播 api-session/removed。若删除的是当前打开的会话,会停止该会话并把页面切到新会话。
选文右键:Copy / Quote / Ask¶
扩展点:shell.overlay。
在聊天消息里选中文字后右键,插件拦截 contextmenu(preventDefault()),避免 Electron 主进程原生菜单弹出,改为显示 Copy / Quote / Ask(Copy 在最前,与原先复制项位置一致):
- Copy:把选中内容写入剪贴板(行为与原先复制一致,由插件绘制)。
- Quote:向 composer 插入带 role 与 turn 元数据的 Markdown 引用块。
- Ask:弹出问题框;发送后由并发 subagent 处理,答案在右侧栏流式输出,不打断主对话。
在 composer 内右键,或未选中文字时右键,仍使用系统菜单(剪切 / 粘贴 / 全选)。选中内容原样引用,上限 2000 字符;跨两条消息或落在流式未完成消息内的选中会被忽略。
Follow-up 侧栏¶
扩展点:sidebar.right.pane.tab。
Follow-up 标签页用于展示 Ask 子智能体的回答(含 reasoning 与正文流式输出)。
Ask 子智能体与压缩¶
每次提问不会新建 subagent:插件在每个父会话下维护一个可继续的、标签为 ask 的子智能体,通过官方 subagents.listChildren() 发现已有实例(host 重启后仍可找到),再把下一问投递给它。
因该 ask 子智能体上下文会随提问增长,插件在 host 侧注册 agent/pre-step 监听,仅对自己的 ask subagent 调用 ctx.compaction.compactIfNeeded(agent, "pressure", signal)。全局自动压缩保持关闭(profile 里挂载 compaction-basic 且 auto: false),主对话不受影响。
安装与启用¶
插件以普通 DSH bundle 形式安装:把本地路径 link 进 profile 的 package.json,并在 dsh.profile.bundles 中注册。包名在三处必须一致:package.json 的 name、client.js 里 window.__ModuleLoader__.load({ id: "…" })、以及 bundles 列表项。
在 profile 的 package.json 中增加:
{
"dependencies": {
"@local/dsh-session-cleaner-host": "link:/absolute/path/to/dsh-session-cleaner-host"
},
"dsh": {
"profile": {
"bundles": [
// …
"@local/dsh-session-cleaner-host"
]
}
}
}
将 link: 后的路径换成你机器上该插件目录的绝对路径。README 要求不要把 compaction-basic 写进插件自己的 bundle patch,而应写在 profile 的 patch 层(~/.dsh/profiles/<profile>/cordis.patch.yml),且该 patch 在每一层 bundle 之后应用:
# Compaction backend for the ask subagent's scoped auto-compaction.
# `auto: false` keeps GLOBAL automatic compaction off; the plugin calls
# ctx.compaction.compactIfNeeded() itself, scoped to its own ask subagents.
- id: compaction-basic
name: "@deepseek-ai/dsh-compaction-basic"
disabled: false
config:
auto: false
修改 host 侧代码后需重启 DSH,再刷新页面。可用版本接口确认当前加载的构建:
curl -s http://127.0.0.1:19387/api/dsh-session-cleaner/version
# {"ok":true,"name":"dsh-session-cleaner","build":"…","features":{…}}
典型用法¶
Quote / Ask¶
- 在聊天消息中选中一段文字。
- 在选中区域内右键。
- 菜单出现 Copy / Quote / Ask(Copy 在前,其后为分隔线)。
- 选 Quote 会在 composer 末尾追加引用块;选 Ask 会换成问题输入框,发送后右侧打开 Follow-up 并流式显示回答。
删除对话¶
侧边栏会话行 → ⋯ → Delete session。
HTTP API(host 同源,浏览器 cookie 鉴权)¶
| Method | Path | Body | 用途 |
|---|---|---|---|
| GET | /api/dsh-session-cleaner/version |
— | 诊断当前构建 |
| POST | /api/dsh-session-cleaner/ask |
{ sessionId, text } |
向复用的 ask subagent 投递问题,必要时创建一次 |
| POST | /api/dsh-session-cleaner/delete-session |
{ sessionId } |
删除整段会话并级联 subagent 子节点 |
| POST | /api/dsh-session-cleaner/delete-subagent |
{ childId, parentId } |
删除一个直接 subagent 子节点(有 lineage 校验) |
| POST | /api/dsh-session-cleaner/terminate-children |
{ sessionId } |
排空某会话下所有可继续的后代 |
适用场景与注意¶
适合谁:长期在 DSH Web GUI 里开多会话、需要清理磁盘与会话列表的开发者;需要在不离开当前主对话的前提下,对消息片段做引用或侧栏追问的用户。
实现上的硬约束(README Design notes,违反可能导致静默数据丢失):DSH 无官方删会话 API,插件做的是经身份校验的磁盘侧操作;默认不重写父会话 log(rewriteParentLog 为 false);不修改 append-only 的 subagent/catalog 行;delete-subagent 带 parent/child lineage 校验。压缩只能在 agent/pre-step、子智能体 turn 仍存活时触发,无法对已结束的 subagent 按需压缩。
安全与信任:插件以当前 DSH 进程权限运行,删除会话会直接操作会话目录。安装前请自行阅读 GitHub 仓库 源码与 MIT 许可证。SkillHub 为社区插件目录,与 DeepSeek / 幻方无官方从属关系。
本地可运行 README 中的测试:
npm test
结尾¶
dsh-session-cleaner-host 用一个小 bundle 补上 Web 侧「删会话」和「选文 Copy / Quote / Ask」两条路径,Ask 通过单会话复用 subagent 与定向 compaction 控制上下文膨胀。需要安装步骤与 API 细节时,以仓库 README 为准。
- 目录页:https://www.skillhub.cn/plugins/jingleboat/dsh-session-cleaner-host
- GitHub:https://github.com/jingleboat/dsh-session-cleaner-host