メインコンテンツへスキップ
R

dsh-streamfold

rezon-aki/dsh-streamfold

Streaming-transcript fold for the DSH web UI: thinking and tool rows fold away while the newest thinking window opens itself; a finished turn scrolls back to your question, which also stays pinned at the top while you read; blue sparks fly from the thinking window edge and the answer writing head.

インストール

dsh plugin --profile web add github:rezon-aki/dsh-streamfold

README

dsh-streamfold · 流式折叠

license format tests

一个更好的会话窗口:运行时自动展开最新的思考小窗,旧小窗自动折叠,跑完自动将思考过程与工具调用折起,并且可以保留穿插的正文不折叠,全程水流般的动效。

为什么有这个项目:官方「紧凑」在会话还有未加载历史时会折叠失效;本插件的折叠按自己的规则走,不受历史是否加载完影响。

  • 顺便「视奸」dsh 现在在想什么。 运行中自动展开最新的思考小窗——它此刻在想什么你看得见,界面又保持整洁。
  • 动效。 我们要的是一个看着就很舒服的界面:小窗高度、折叠与滚动跟随都按帧推进,水流一样,不跳不顿。右下角那颗「回到底部」外观仍是官方的,但何时出现由本插件决定——跟随中的正常落后不会再让它一闪一闪,点它是平滑滑回底部。
  • 小窗火花。 运行中思考小窗底部往上冒火星——像滚筒碾过金属:小窗滚得越快,火星越亮也越密(亮度跟着滚动速度走,慢输出暗、快输出烫),停住就不磨了;底边左右两端更密,火星朝窗口内迸。颜色与密度可调,关掉即完全不运行。
  • 正文锻打。 正文流式输出时,每写一段就从写头(最后一行末尾)向四周飘出一扇火星,像溅出来的一小团火。写了才有,停笔就不发,火星烧完自动收手。颜色、密度、速度、寿命都可调。
  • 跑完回到提问处。 一轮结束,视图平滑滑回你这轮那句话的位置——不用自己往上翻找回"我当初问的是什么"(你已经自己上滚过就不动你;可关,默认开)。
  • 置顶显示提问。 读到哪一轮,那一轮的提问就钉在会话顶端(一行,超出省略);它自己在屏幕上时自动让位,点它一下平滑滑回那句发言(可关,默认开)。

它轻在哪

  • 不另开视图。 直接在官方对话流上做 DOM 增强(靠语义属性定位行),不自己实现会话壳、不接管渲染管线、不依赖内部渲染器契约——升级面小。
  • 零依赖、零构建。 手写 lib/,没有构建步骤、没有运行时依赖,也不读写任何文件:宿主半区只是一个占位条目(客户端清单据它把浏览器半区交给页面),设置存在浏览器 localStorage。
  • 不碰官方源码,卸载即净。

安装

# 两种等价写法
dsh plugin --profile web add github:rezon-aki/dsh-streamfold
dsh plugin --profile web add https://github.com/rezon-aki/dsh-streamfold

装完重启 profile,然后刷新浏览器页面(客户端代码在页面加载时注入)。

要求 DSH >= 0.1.7-alpha.1(官方「对话显示」档位改由 configForms 服务托管;0.1.5 及更早请用 0.4.x)。

0.4 → 0.5 的变化:设置不再写宿主文件(~/.dsh/streamfold.json 与 /streamfold/api/settings 路由已移除),改为只存浏览器 localStorage——你在页面上已经调好的值不受影响;0.1.7 把「对话显示」换成四档(简洁/标准/详细/完全展开),本插件把「折叠」作为第五项接在官方下拉里,选它时官方自动停在「完全展开」,两层折叠不会打架。

卸载:

dsh plugin --profile web remove dsh-streamfold

重启 profile 即恢复官方行为。

用法

设置 → 通用设置 → 工作步骤展示:官方那四档原样保留(简洁 / 标准 / 详细 / 完全展开),末尾多一项「折叠」——本插件接管的那一档:

选项行为
简洁 / 标准 / 详细 / 完全展开官方原本的四档,文案与行为都跟官方一致
折叠本插件:运行中的一轮只留一个窗,其余过程收成一行

选「折叠」时,官方那一档会被自动停在 完全展开(等价于 0.1.5 时代的「标准」语义)——官方自己不折、不分组,折叠只由本插件做,避免两层折叠打架;档位名与官方设置页同源(取自官方词典),官方改了文案这边跟着变。

专属设置页:设置 → 流式折叠(下面所有开关都在这里,改动即时生效)。

运行中只会自动展开最新那一个思考窗;你自己点开的窗不会被自动收起,被取代的旧窗按「旧窗折叠宽限」(默认 2 秒)折回一行摘要;上滚即停跟,离底时出现回底按钮(箭头图标;小窗与主窗口是同一个按钮)。

设置

设置项默认说明
折叠历史轮次开关掉后:加载页面不再自动折叠历史轮次(只在跑动时折前面的)
保留穿插正文关折叠时保留带正文的行,并给它套一个限高小窗(正式回答本身不套窗)
窗口高度260单个思考/穿插正文小窗的最大高度(px)
运行中自动展开思考开只自动展开本轮最新的那一个;被取代的旧窗按「旧窗折叠宽限」折回一行摘要
旧窗折叠宽限2 秒新的思考窗出现后,旧窗再等多久才自动折回(0~60,支持小数)
运行中自动展开工具关开:运行中最新的工具卡自动展开(用官方卡片自己的折叠/内滚,不套限高小窗)
触底自动跟随开内容增长时自动贴底;你上滚即停跟
平滑系数0.15跟随时每帧吃掉多少差距,越小越柔(0.05~0.9)
平滑最小步长1每 16ms 至少推进多少像素(与屏幕刷新率无关)
离底显示「回到底部」开离开底部时出现回底按钮(跟随中的轻微落后不显示,避免闪烁)
跑完回到提问处开一轮结束后平滑移到本轮你那句话的位置;你已经自己上滚过就不动你(动效关掉时直接到位)
置顶显示提问开把「你正在看的那一轮」的提问钉在会话顶端:往上滚会跟着换成那一轮,超过一行只显示一行;它自己在视口里时自动让位,点它滑回那句话
动效过渡开关掉则折叠/展开/回底全部瞬时
小窗火花开运行中思考小窗底部的火星(独立模块:关掉后不建画布、不排帧)
火花颜色#4fa8ff火星颜色;核心自动提亮成白热
火花密度1火星数量倍率(0.2~3),越高越密、绘制开销越大(两种火花共用)
正文锻打火花开正文流式写头砸出的火星;写头不动就不砸,跑完自动收手

设置存在浏览器 localStorage(按 DSH 页面源站隔离)。

诊断

浏览器控制台:

__dshStreamfold.stats()          // 窗口 / 折叠 / 折叠条计数(含动效状态)
__dshStreamfold.probe()          // 行状态、还看得见的思考行、小窗动画、回底按钮状态、火星开销(probe().sparks)
__dshStreamfold.state()          // 当前设置 + 官方「对话显示」取值快照
__dshStreamfold.set({ smoothGrow: 0.1, supersedeDelay: 3 })

报问题时附上 probe() 的输出与 DSH 版本,定位会快很多。

安全边界

  • 纯客户端展示增强:只读对话 DOM,不发网络请求、不接触凭据、不改官方源码。
  • 宿主半区不读写文件、不注册路由:设置只落浏览器 localStorage;对官方「对话显示」档位的读写走 DSH 自己的设置服务(configForms)。
  • 卸载即净:设置行、小窗标记与注入的样式全部撤掉。

开发

  • 手写、无构建:lib/client.js(浏览器半区,包在 window.__ModuleLoader__ 里)、lib/index.js(宿主半区)。
  • 改完 lib/*.js 重载插件并刷新页面。
  • 行锚点全部用官方语义属性:[data-chat-flow]、[data-chat-flow-kind]、[data-chat-turn]、[data-disclosure-row][aria-expanded]、[data-variant=think]、[data-tool]、[data-sample=bash]、[class*=_thinkBody]、[class*=_bodyWrap]、[data-context-injection-body]——不用 CSS module 哈希。
  • 已在 DSH 0.1.7-rc.1 验证。

License

MIT

関連プラグイン