前言¶
在 DSH 里跑智能体时,一轮对话往往同时有思考块、工具调用和正文流式输出。官方提供 Compact、Standard、Detailed、Verbose 四档「工作步骤」展示模式,折叠与平铺策略各不相同。流式进行中如果过程组高度跳动、外层会话跟着上下滚,或者旧行和新行抢焦点,读运行状态会很费劲。
下面介绍社区客户端插件 dsh-stream-focus(维护者 timho1047)。它在不改 Session、不发请求的前提下,针对正在运行的轮次增强思考与工具的展示:Compact / Standard 用限高贴底窗口跟当前过程组;Detailed / Verbose 在平铺结构里自动展开当前行。安装后无需配置,插件面板里启用或禁用即可。
这是什么¶
dsh-stream-focus 是 DSH 的纯 Web 客户端展示增强插件,分类为「客户端」。一句话定位:在 DSH 内置的四档 Work details 展示模式上,让运行中的思考与工具输出更平滑、更聚焦,并尽量把当前过程保持在视野内。
插件不写 Session、不注册模型工具、不接触凭据;一轮结束或卸载后恢复官方展示。历史轮次仍按各模式官方的折叠方式显示,只有当前运行轮次会套用插件逻辑。
四档模式分别做什么¶
官方四档与插件增强行为如下(摘自项目 README)。
| 模式 | 插件增强 |
|---|---|
| Compact / Standard | 自动展开当前过程组,形成限高、贴底、保持高度的运行窗口;切换行时自动收起旧窗口。 |
| Detailed | 当前轮次在官方容器内平铺,不伪造组级窗口;自动展开当前思考/工具行,并收起旧的自动展开行。 |
| Verbose | 平铺显示,自动展开当前思考/工具行,但不自动收起旧行,尊重「永远展开」的语义。 |
四档共享的能力包括:思考正文逐字平滑揭示;普通正文行级渐隐与字符淡入;新段落、列表、代码块淡入;自动展开/收起时尽量不抢焦点。窗口外观不另加背景、边框或圆角,沿用官方过程组样式。
Compact / Standard 的运行窗口¶
思考流式输出时,插件会自动展开当前思考行;官方过程组本身成为限高、内部自动贴底的窗口。窗口禁止横向溢出,并关闭过程组自带的上下渐隐遮罩,减轻横向滚动条间歇出现、纵向滚动条被遮罩虚化的问题。活动窗口会保持已经出现过的最大高度,思考切换到工具时主要滚动窗口内部,避免外层会话因窗口变矮而回滚。窗口底部有 16px 轻渐隐,滚动跟随更柔和。
只有这两档有官方过程组;窗口高度沿用官方的 min(400px, 50vh)。内部滚动跟随使用官方 process scroll,插件不重复写 scrollTop。
Detailed / Verbose 的平铺行¶
这两档保持官方平铺结构,不添加组级限高。插件根据模式策略自动展开当前思考或工具行;Detailed 会收起上一轮自动展开的行,Verbose 则保留已展开行以符合该档语义。并行工具会一起展开,包括带 data-sample="bash" 的独立 Bash 行。
流式与动画细节(实现层面)¶
- 思考正文通过官方
conversation.chat.reasoning.bodySlot 与conversation.chat.reasoning.contentFactory 包装,用 CSS Custom Highlight API 对尾部新字素做透明度淡入,不插入 span、不改 Markdown DOM;揭示速度按 elapsed time 归一化,目标是在 60Hz / 120Hz 下手感一致。 - 过程组首次自动展开约 180ms 透明度淡入;自动切换行时展开/收起约 180ms 高度与透明度过渡;手动点击行仍走官方即时切换。
- 思考结束、工具开始后,先收起思考窗再展开工具行,切换前冻结窗口高度,外层总高度不变。下一次思考开始时,自动收起上一批自动展开的思考/工具窗口,只保留新思考窗;手动打开的行不会被自动收起,手动关掉的组或行不会被强行重开。
- 普通助手正文流式时,在消息根部加 20px 底部行渐隐,结束后移除;新块约 600ms ease-in 淡入。正文目前没有官方 Content Factory,无法实现与思考相同的逐字 pacing,README 中说明这是已知限制。
- 外层会话不在底部时不主动滚动;若过渡导致官方 follow 丢失,插件会做单次自愈:滚回窗口底部并派发
scrollend以重新激活 follow。
字符平滑会带来约 100ms 视觉延迟;流式期间显示的是思考原文的可见前缀,结束后切回完整文本。复制流式中的内容会得到当前可见前缀。
安装与启用¶
安装命令(来自 README,针对 Web profile):
dsh plugin --profile web add dsh-stream-focus
安装后刷新浏览器页面,四档 Work details 下都会生效。零设置、零持久化;插件面板中的启用/禁用即总开关。
目录页:timho1047/dsh-stream-focus @ SkillHub
源码与说明:GitHub - timho1047/dsh-stream-focus
四档演示视频(30fps、1080p):Landing page
当前 package 版本为 0.1.2,许可证 MIT;要求 Node >=22.19.0、DSH >=0.2.1-rc.2(见 package.json)。
典型用法¶
没有单独的配置文件或 CLI 子命令。典型流程是:
- 用上述命令把插件装进 Web profile。
- 在 DSH 客户端插件列表中保持启用。
- 在设置里选择你常用的 Work details 档位(Compact / Standard / Detailed / Verbose 任一)。
- 发起一轮会触发思考与工具调用的对话,观察当前过程组或当前行是否自动展开、窗口是否贴底跟随。
若要对比四档差异,可打开 GitHub Pages 上的分段演示(Compact、Standard、Detailed、Verbose 各有一段约 25–32 秒的录制)。
本地开发或贡献时,仓库提供:
pnpm install
pnpm run verify # typecheck + build + 56 个测试
适用场景与注意¶
适合谁:经常在 DSH Web 端盯运行轮次、需要在四档展示模式之间切换、又希望思考与工具输出少抢焦点、少抖动的开发者。若你主要关心服务端 Session 或模型工具注册,这个插件不涉及那些层面。
权限与安全:插件以当前 DSH 进程及浏览器页面的权限运行,仍是第三方社区组件。安装前建议阅读 源码 与 LICENSE,确认符合你的合规要求。SkillHub 等社区目录独立于 DeepSeek / 幻方,并非官方应用商店。
已知限制(README 原文要点):
- 字符淡入依赖 CSS Custom Highlight API;不支持的浏览器回退为普通文本渲染。
- 依赖 ui-chat 的语义 DOM(如
data-chat-group-key、data-variant="think"、data-tool、data-chat-running等);上游改名时插件可能静默不生效,需跟进更新。 - 自动切换与首次展开使用约 180ms 过渡;与手动操作的即时性不同。
项目致谢中提到受 dsh-streamfold、dsh-smooth-stream 启发;GitHub 上当前约 3 stars。
结尾¶
dsh-stream-focus 把「跟住当前思考与工具」做成零配置的客户端增强:Compact / Standard 用限高贴底窗口,Detailed / Verbose 用平铺行自动展开,并统一处理流式淡入与焦点。若你正在 DSH 里调试智能体,可以按官方安装命令装上、刷新页面,在你常用的 Work details 档位下跑一轮对比官方默认展示。