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

会话清理与划词追问 jingleboat/dsh-session-cleaner-host

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

删除会话,划词引用或交给子智能体追问

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

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

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

状态速览

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

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

验证判据与等级说明 →

可信度证据

安全扫描自动 · 静态分析源码
v2.7.0
🟢 扫描:未发现敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 3 处,展示前 3 条)
  • 写入剪贴板
    client.js:255
    await navigator.clipboard.writeText(text);
  • 发起网络请求
    client.js:435
    const r = await fetch("/api/dsh-session-cleaner/ask", {
  • 发起网络请求
    client.js:917
    const r = await fetch("/api/dsh-session-cleaner/delete-session", {
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

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

README

由 DeepSeek 最新模型翻译生成
dsh-session-cleaner 一个 DeepSeek Harness(DSH) 插件——宿主半边与 Web 客户端半边同一个 bundle——给 DSH Web GUI 加两件事: 1. 删除整个会话:侧栏会话行菜单里,带确认对话框。 2. 划词右键引用 / 提问:在聊天里划选一段文字后右键——插件接管右键菜单,弹出 复制 / 引用 / 提问,其中「复制」排第一,位置就是原来系统菜单项的位置: - 复制:把选中文本写入剪贴板(与原系统菜单同一个动作,只是改由插件绘制); - 引用:把带来源元数据(角色 + 回合)的 Markdown 引用块插入输入框; - 提问:把选中内容 + 你的问题交给一个并发子智能体,答案流式显示在右侧栏,不打断主对话。 功能 | 槽位 | 作用 | | sidebar.workspaces.session.menu.item | 删除会话:运行中的会话先 flush + detach → 从工作区登记摘除 → 作废投影缓存 → 物理删除会话目录 → 清理 spill → 级联删除 origin: subagent 的子会话(fork 分支绝不级联)→ 广播 api-session/removed。 | | shell.overlay | 划词右键菜单:复制(剪贴板)/ 引用(插入输入框)/ 提问(并发子智能体提问)。
展开完整文档(README 剩余 1 节)
dsh-session-cleaner

一个 DeepSeek Harness(DSH) 插件——宿主半边与 Web 客户端半边同一个 bundle——给 DSH Web GUI 加两件事:

1. 删除整个会话:侧栏会话行菜单里,带确认对话框。
2. 划词右键引用 / 提问:在聊天里划选一段文字后右键——插件接管右键菜单,弹出 复制 / 引用 / 提问,其中「复制」排第一,位置就是原来系统菜单项的位置:
- 复制:把选中文本写入剪贴板(与原系统菜单同一个动作,只是改由插件绘制);
- 引用:把带来源元数据(角色 + 回合)的 Markdown 引用块插入输入框;
- 提问:把选中内容 + 你的问题交给一个并发子智能体,答案流式显示在右侧栏,不打断主对话。

功能

| 槽位 | 作用 |
| sidebar.workspaces.session.menu.item | 删除会话:运行中的会话先 flush + detach → 从工作区登记摘除 → 作废投影缓存 → 物理删除会话目录 → 清理 spill → 级联删除 origin: subagent 的子会话(fork 分支绝不级联)→ 广播 api-session/removed。 |
| shell.overlay | 划词右键菜单:复制(剪贴板)/ 引用(插入输入框)/ 提问(并发子智能体提问)。菜单由插件自绘——桌面端的原生右键菜单是 Electron 主进程用 Menu.buildFromTemplate 弹的,渲染进程插件无法往里加条目;在 contextmenu 里 preventDefault() 就不会请求主进程弹菜单。 |
| sidebar.right.pane.tab | 追问 tab:在右侧栏流式显示该 ask 子智能体的回答(reasoning + text)。 |

提问只复用同一个子智能体

不是每问一次就新建。每个父会话只保留一个可继续子智能体,label 固定为 ask;后续提问通过官方
subagents.listChildren() 目录找回并投递给它(所以宿主重启后依然能复用)。

ask 子智能体的作用域内自动压缩

复用会让 ask 子智能体的上下文越积越大,因此宿主自己注册了一个 agent/pre-step 监听, 只对本插件的 ask 子智能体调用 ctx.compaction.compactIfNeeded(agent, "pressure", signal)。
全局自动压缩保持关闭(compaction-basic 以 auto: false 挂载),主会话不受影响。

安装

插件是普通 DSH bundle。在 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"
]
}
}
}

包名必须在三处保持一致:package.json 的 name、client.js 里
window.__ModuleLoader__.load({ id: "…" })、以及 profile 的 dsh.profile.bundles 条目。

然后在 profile 的补丁层(~/.dsh/profiles/<profile>/cordis.patch.yml,它在每个 bundle 层之后应用)加上压缩后端:

- id: compaction-basic
name: "@deepseek-ai/dsh-compaction-basic"
disabled: false
config:
auto: false

这一行属于 profile 补丁,不要写进本包的 bundle 补丁:装一个插件不应该悄悄替整个 profile 打开另一个包。

改过宿主代码后需要重启 DSH,然后刷新页面。确认当前生效的是哪一版:

curl -s http://127.0.0.1:19387/api/dsh-session-cleaner/version

用法

引用 / 提问:在聊天里划选文字 → 在选区内右键 → 菜单出现「复制 / 引用 / 提问」(复制在最上,下面一条分隔线)→ 点「引用」插入引用块,或点「提问」把菜单换成问题输入框,发送后右侧栏自动打开「追问」tab 并流式显示回答。

在输入框里右键、以及没有选区时右键,仍然是系统菜单(剪切 / 粘贴 / 全选)。

删除会话:侧栏会话行 → ⋯ → 删除会话。删除当前打开的会话会先停止它,并把页面切到新会话。

HTTP API

| 方法 | 路径 | 请求体 | 用途 |
| GET | /api/dsh-session-cleaner/version | — | 当前生效的构建标记(诊断用)。 |
| POST | /api/dsh-session-cleaner/ask | { sessionId, text } | 把问题投递给复用的 ask 子智能体;首次不存在时创建。 |
| POST | /api/dsh-session-cleaner/delete-session | { sessionId } | 删除整个会话(并级联其子智能体子会话)。 |
| POST | /api/dsh-session-cleaner/delete-subagent | { childId, parentId } | 删除一个直接子智能体会话;有血缘闸门。 |
| POST | /api/dsh-session-cleaner/terminate-children | { sessionId } | 排空某会话的全部可继续后代。 |

设计约束(都是踩过坑换来的)

1. DSH 没有"删除会话"的 API。 sessions / sessionPersistence / sessionProjectionCache / sessionController 全是追加式;持久化 seam 的文档原话是 "Nothing deletes session files … the seam has no deletion API." 所以本插件做的是有意的磁盘手术——因此配了严格的身份校验。
2. 绝不改写别的会话的日志。 早期版本会改写父会话日志来抹掉一行 subagent/catalog。日志是追加式的,宿主可能正在并发写入,于是"读 → 过滤 → 原子 rename"有可能把整段对话截断。rewriteParentLog 现在默认 false。
3. 会话目录查找是身份校验式的。 任何候选目录都必须能读到 header.id 等于目标 id 的日志;绝不猜目录。
4. subagent/catalog 只能追加。 没有官方移除某一行的办法;删了子会话却留着目录行会产生"打不开的悬空行"。
本插件不碰目录行。
5. 子智能体操作有血缘闸门。 delete-subagent 要求
header.parentSession === parentId && header.origin === "subagent",并拒绝 childId === parentId
——少了这条,所谓"删除子智能体"会删掉你正在看的这个会话。
6. 压缩需要"活的空闲 Agent"。 compaction.compactNow(agent, signal) 要的是 ManualCompactAgentContext(必须有 runMaintenance()),而可继续子智能体一轮答完就不再驻留。
因此"答完之后手动压缩"没有受支持的入口;只有 agent/pre-step(轮次打开、agent 活着)才压得动——这就是本插件挂 agent/pre-step 而不是给一个按钮的原因。
7. 刻意自包含。 宿主半边只用 Node 内置模块,不依赖任何 @deepseek-ai/* 运行时包,以免在 profile 的 node_modules 里遮蔽官方包;package.json 没有任何 dependencies。
8. 划词按原文引用,上限 2000 字符;跨两条消息、或落在流式输出中的选区会被忽略。

测试

npm test

两套自包含测试,不依赖 DSH、浏览器或真实会话数据:

| 文件 | 覆盖内容 |
| test/internals.test.mjs | 宿主半边:zstd 会话日志分帧、投影键、日志解码/编码 |
| test/client-context-menu.test.mjs | 客户端半边:用最小 DOM/React/ctx 桩加载真实 client.js,验证右键链路——捕获阶段监听、只在"选中消息"时 preventDefault()、菜单顺序(复制 → 引用 → 提问)、视口钳制、输入框/无选区时放行系统菜单、dispose 后监听摘除 |

test/verify-served-bundle.mjs 是可选的活体检查(需要 DSH 在跑):它按 client.js 的元数据重算宿主 bundle 的 rev,拉取宿主正在下发的那一份,如果仍在发旧副本就以非零退出码失败。用 DSH_WEB_URL 可以指向别的实例。

兼容性

针对 DSH 0.2.0-rc.2(桌面/Web profile:@deepseek-ai/dsh-base + @deepseek-ai/dsh-web-app)开发与测试。只使用公开 seam:slots、locale、sessions、subagents、agents、 sessionPersistence、sessionProjectionCache、workspaceRegistry、spillStore、compaction;可选服务缺失时降级而非报错。

许可证

MIT —— 见 LICENSE。
预览分享卡片长什么样 ↓jingleboat/dsh-session-cleaner-host
分享 · DeepSeek Harness Hub
jingleboat/dsh-session-cleaner-host

删除会话,划词引用或交给子智能体追问

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