前言¶
DeepSeek Harness(DSH)桌面端在 agent 执行过程中,模型往往会在 reasoning 里犹豫、自问,却很少把这些话写进正式对话。你只有事后翻思考记录,才可能发现它其实卡在某个拍板点上。常见做法是盯着日志或等任务结束再补一句——会打断当前步,也容易错过「刚卡住」的那一瞬间。
Question Bubbles(dsh-question-bubbles)面向这类场景:Host 订阅 agent/assistant-stream 的 reasoning-delta,从思考流里抽出疑问,用一小段客户端脚本画成气泡;你点气泡作答时走 steer,在下一个 step 边界并入会话,而不是中途插话。下面按定位、依赖、安装、用法与机制说明如何接入。
这是什么¶
dsh-question-bubbles 是 DSH 桌面端的一个 bundle 插件(维护者 3341284397-max,当前版本 0.3.0,许可证 MIT)。它解决的是:模型思考里的隐性疑问可见、可答,且尽量不破坏任务节奏。
要点(与 README 一致):
- 不打断 —— 气泡旁路显示,不进入对话上下文。
- 不落盘 —— 疑问只在内存里,重启 DSH 即清空(刻意设计:价值在于「被恰好看见」)。
- 就地作答 —— 点气泡输入一行,经
steer排队到下一轮。 - 依赖鲸鱼挂件 —— 需
dsh-whale-widget作定位;未安装时仅有右下角圆点,气泡无锚点。
插件分类为客户端侧能力,与 DSH「一切皆插件」的 bundle 形态一致;社区目录见 SkillHub 条目,源码在 GitHub。
核心功能¶
思考流订阅与展示¶
Host 侧处理实时思考流,客户端通过注入脚本把疑问渲染为气泡(默认浮在 Balance Whale Widget 的鲸鱼上方)。正文开始输出或调用工具时,尚未回答的条目会标为「已自行推进」(变暗,仍可补答)。
两种疑问捕获¶
- 提示词标记协议(默认
markers: true):向 system prompt 挂约 120 tokens 的约定,模型在思考里写⟦问⟧…⟦/问⟧/⟦答⟧…⟦/答⟧;带标记的气泡显示 ✦,自解后快速收起。 - 正则兜底:以
?/?结尾,或含犹豫词且不像复述用户原话;按语言过滤长度,跳过代码块与 URL 等,同义句合并,单步最多 6 条、每分钟 20 条。
多语种与主题¶
语言模式支持 auto(跟随当前思考语言)、all,或锁定 zh / en / ja / ko / ru。界面主题与 DSH 一致(深/浅/跟随系统)。面板文案随浏览器语言,不支持语言回落英文。
本地 HTTP 与作答路径¶
路由挂在 Host 回环上(拒绝跨站 Sec-Fetch-Site,有 Origin 时要求同源),例如:
GET /dsh-qb/client.js—— 客户端脚本GET /dsh-qb/events—— SSE(hello/q/resolve/config/counters)POST /dsh-qb/answer——{ id, text },经sessionController.prompt(mode: 'steer')注入
完整路由表见项目 README。
安装与启用¶
README 写明为纯本地 bundle,无构建步骤;没有 dsh plugin add github:… 一类命令,需手动放入 profile 并登记依赖。
- 将插件目录放到 desktop profile 的
node_modules下,或用 junction/软链接指向源码目录:
<DSH_HOME>/profiles/desktop/node_modules/dsh-question-bubbles
- 编辑
<DSH_HOME>/profiles/desktop/package.json,在 bundles 与 dependencies 中登记:
{
"dsh": { "profile": { "bundles": [ "...", "dsh-question-bubbles" ] } },
"dependencies": { "dsh-question-bubbles": "link:<该目录的绝对路径>" }
}
- 重启 DSH(Host 仅在启动时读取 bundle);改客户端脚本后刷新页面即可热更新。
bundle 通过 package.json → dsh.bundle.patch → cordis.patch.yml 自我声明。安装前请自行审阅源码与 MIT 许可;插件以当前 DSH 进程权限运行。
前置依赖:DSH 桌面端本体,以及 dsh-whale-widget(气泡锚点与中键打开面板的入口)。
典型用法¶
面板与气泡交互¶
- 中键点鲸鱼(或右下角 💭)打开面板:总开关、气泡数量上限(1–9)、语言模式、主题,以及出现 / 你答了 / 自己往下走三个计数器。
- 点气泡 → 输入 → 「发过去」(
steer)或「算了」;右键展开全文,右上角 × 可关闭。 - 30 秒无人操作气泡会淡出;你已回答的会亮到下一轮结束。
持久配置写在 <DSH_HOME>/dsh-question-bubbles/config.json:
{ "enabled": true, "maxBubbles": 9, "langMode": "auto", "markers": true }
也可 POST /dsh-qb/config 更新 enabled / maxBubbles / langMode / markers。
验证渲染¶
GET /dsh-qb/demo?text=… 可塞一条假疑问,用于检查客户端渲染而不必等真实思考流。
Host 自测(不启动 DSH)¶
仓库提供 Node 测试,覆盖注入、SSE、/state、/answer、标记协议等:
node test/host.test.mjs
适用场景与注意¶
适合:你经常开着 DSH 桌面端跑 agent,且已装鲸鱼挂件;希望在模型「默默纠结」时轻量补一句拍板,又不想中断当前 step。
务必注意(README「已知限制」):
- 正则兜底会漏报或误报;标记协议更好,但依赖模型遵守约定。
- 答案只在下一 step 边界生效,回得太晚可能帮不上正在卡的那一步。
- 模型不流式输出
reasoning时不会有气泡。 - 所有 agent 共用一条 SSE,气泡暂不区分来源会话。
- 无鲸鱼挂件时体验退化为右下角圆点。
社区目录的星标数会变动;接入前以 GitHub 仓库与本地 package.json 版本为准。
结尾¶
Question Bubbles 把 DSH 思考流里的隐性疑问接到界面旁路:看见、点选、用 steer 排队注入,而不是把整条 reasoning 倒进对话。若你在做 Harness 周边或客户端插件,可对照其 SSE、steer 与标记协议实现。
- 目录页:https://www.skillhub.cn/plugins/3341284397-max/dsh-question-bubbles
- 源码:https://github.com/3341284397-max/dsh-question-bubbles