DSH Web 会话流式折叠:运行中只展开最新的思考小窗、其余过程行折成一条摘要,一轮结束滑回你提的那句话;读到哪一轮那轮提问就钉在顶部。
安装
# npm 包(预构建)
dsh plugin --profile web add dsh-streamfold
# Release 预构建包
dsh plugin --profile web add "https://github.com/rezon-aki/dsh-streamfold/releases/latest/download/dsh-streamfold.tgz"
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:rezon-aki/dsh-streamfold
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
运行中只保留最新那一个思考窗,其余过程行折成一条摘要;一轮跑完,滑回你的提问。折叠逐帧推进,折起的内容仍可 Ctrl+F 搜到。

为什么需要它
长会话里,工具调用与思考过程会把正文淹掉;官方的「紧凑」档在会话还有未加载历史时会折叠失效,历史加载完之前帮不上忙。本插件在官方对话流上做展示增强,折叠按自己的规则走,不依赖历史是否加载完:
- 过程不再淹没正文:非运行轮次收成一条「已折叠 N 行 · 点击展开」;
- 想看的随时看得见:运行中只留最新那一个思考窗,限高、内部自滚;
- 读完一轮不用往回翻:跑完自动回到你这轮的提问处。
和官方「工作步骤展示」的差别
| 官方「工作步骤展示」 | 本插件「折叠」 | |
|---|---|---|
| 什么时候折 | 历史加载完才开始折;还有未加载历史时折不动 | 自己管折叠,不依赖历史是否加载完 |
| 运行中的思考 | 过程行一并折起,只看得到摘要 | 只展开本轮最新那一个思考窗(限高、内部自滚) |
| 跑完一轮 | 停在底部,要自己往回找 | 平滑滑回你这轮的提问处 |
| 找折叠内容 | 折起后要再展开 | hidden=until-found,Ctrl+F 仍能命中 |
| 读到哪一轮 | 往上翻着找 | 在顶端固定一个快速导航 |
装完是什么样
- 运行中看得到思考。 自动展开本轮最新的思考窗(限高可调),旧的按宽限折回一行摘要;被取代的、上一轮的窗不再抢滚动。
- 折叠有节奏,不闪。 收起从下往上、一组 3 行、组间 70ms;展开从最上面往下、同样一组 3 行。加载页面、切会话这类跨轮批量场景直接瞬时完成;单轮再长也逐组推进(只有单轮超过 84 行才走瞬时护栏)。
- 正文超过一屏时。 设置页最上面的「正文到顶时」点「停下读正文」那条:正文输出时到页面顶部自动停止滑动,停在正文开头方便直接阅读;默认仍是「跑完回到提问处」。
- 跑完回到提问处。 一轮结束,视图平滑滑回你这轮那句话的位置;开启「提问不入折叠」且这一轮里 LLM 问过你(
ask_user_question)时,落点改在这一轮最后那张提问卡上并自动把它展开(要你答的是它)。你自己上滚过就不动你。到位后 2 秒内还会纠正图片/代码块迟到落版造成的偏移。 - 顶端固定快速导航。 读到哪一轮,会话顶端就固定一条快速导航(显示那一轮的提问,一行、超出省略);它自己在屏幕上时自动让位,点它滑回那句发言。
- 跟随够稳。 底部跟随按帧推进;上滚即停跟,离底出现「回到底部」;在思考小窗或工具正文里滚动不会误触发「停止跟随」。
- 搜索也照顾。 折叠的内容仍可被 Ctrl+F 搜到;搜索期间不抢滚动,滚回窗尾或点回底恢复。
- 小窗火花 / 正文锻打。 思考窗底部的火星随滚动速度变亮变密;正文流式写头每写一段砸出一扇火星。颜色、密度、速度、寿命都可调,关掉即完全不运行。


安装
方式一:DSH 插件面板(推荐) —— 侧栏 →「插件」→「添加插件」,粘贴下面这一行,装完点「立即启用」:
dsh-streamfold
面板装的就是本版(npm 上
latest即本版,含 provenance)。方式二适合想跟仓库最新代码的人。
方式二:命令行(三种写法):
dsh plugin --profile web add dsh-streamfold # npm 包(推荐)
dsh plugin --profile web add github:rezon-aki/dsh-streamfold # 跟仓库最新
dsh plugin --profile web add https://github.com/rezon-aki/dsh-streamfold
装完重启 profile,然后刷新浏览器页面(客户端代码在页面加载时注入)。
兼容性(package.json 的 engines.dsh 是唯一真源,插件面板与市场也按它判断兼容):
| 插件版本 | 支持的 DSH |
|---|---|
| 0.7.x(本版) | >=0.2.1-rc.1 <0.3.0;契约面实测到 0.2.1-rc.4(rc.2→rc.4 客户端 bundle 逐字节一致 + 本机 rc.4 加载),0.2.0-rc.2 / 0.2.1-rc.2 登记为兼容 |
| 0.5.0 | 0.1.7 系列 |
| 0.4.x | 0.1.5 及更早 |
官方「对话显示」档位由 configForms 服务托管;Node >= 20。
卸载:在插件面板里移除,或
dsh plugin --profile web remove dsh-streamfold
重启 profile 即恢复官方行为。
用法
设置 → 通用设置 → 工作步骤展示:这一行由本插件提供(官方那一行在本插件的设置行可用时隐藏,只改可见性、可逆;0.2.1 起官方新增的「工作步骤收起时机」行在折叠档下一并隐藏、切到官方档恢复),里面是官方四档 + 本插件的「折叠」:
| 选项 | 行为 |
|---|---|
| 简洁 / 标准 / 详细 / 完全展开 | 官方原本的四档,文案与行为都跟官方一致 |
| 折叠 | 本插件:运行中的一轮只留一个窗,其余过程收成一条摘要 |
选「折叠」时,官方那一档会被自动停在 完全展开——官方自己不折、不分组,折叠只由本插件做,避免两层折叠打架;档位名与官方设置页同源(取自官方词典),官方改了文案这边跟着变。
专属设置页:设置 → 流式折叠(本文所有开关都在这里,改动即时生效)。
运行中只会自动展开最新那一个思考窗;你自己点开的窗不会被自动收起,被取代的旧窗按「旧窗折叠宽限」(默认 2 秒)折回一行摘要;上滚即停跟,离底时出现回底按钮(小窗与主窗口是同一个按钮)。
安全边界
- 纯客户端展示增强:只读对话 DOM,不发网络请求、不接触凭据、不改官方源码。
- 宿主半区不落任何东西:不读写文件、不注册路由、不导出 Config;设置只存浏览器 localStorage(key
dsh-streamfold,按页面源站隔离)。 - 对官方档位只做可逆改动:选「折叠」档时把官方
ui-chat的transcriptView写成 verbose(避免两层折叠)并隐藏官方设置行(0.2.1 起含「工作步骤收起时机」行);从本插件切回官方档会写回所选档并恢复收起时机行,卸载后官方档停在「完全展开」(需要时到官方设置里改回)。 - 卸载即净:设置行、小窗标记、回底按钮与注入样式全部撤掉,不留行内
max-height与隐藏属性。
配置(22 项)
| 设置项 | 键 | 默认 | 取值/范围 | 说明 |
|---|---|---|---|---|
| 正文到顶时 | settleToPrompt |
跑完回到提问处 | 跑完回到提问处 / 停下读正文 | 「跑完回到提问处」= 跟随到底,跑完滑回提问(已自己滚过就不动);「停下读正文」= 正文输出时到页面顶部自动停止滑动,停在正文开头方便直接阅读 |
| 工作步骤展示 | mode |
折叠 | 折叠 / 官方四档 | 选「折叠」时官方档自动停到「完全展开」,避免两层折叠 |
| 折叠历史轮次 | foldHistory |
开 | 开关 | 关掉后:加载页面不再自动折叠历史轮次(只在跑动时折前面的) |
| 保留穿插正文 | keepInterleavedText |
开 | 开关 | 折叠时保留带正文的行,用一条横线与正式回答分开(正文不套限高小窗) |
| 提问不入折叠 | keepUserQuestions |
开 | 开关 | LLM 的提问工具(ask_user_question)与其回复节点始终保留、不折进摘要,且「跑完回到提问处」改落到最后那张提问卡上;关掉则随其余内容一起折 |
| 跟随速度上限 | followMaxSpeed |
240 | 60~2000 px/s | 主动追赶时的速度上限;越小越柔、高速输出时落后越多。内容自身增长的速度不受它限制 |
| 跟随加速度上限 | followMaxAccel |
10000 | 2000~120000 px/s² | 速度变化的上限;调小起步/刹车更柔,调大更跟手 |
| 窗口高度 | windowHeight |
360 | 80~1200 px | 单个思考/穿插正文小窗的最大高度 |
| 运行中自动展开思考 | autoExpandReasoning |
开 | 开关 | 只自动展开本轮最新的那一个;被取代的旧窗按「旧窗折叠宽限」折回一行摘要 |
| 旧窗折叠宽限 | supersedeDelay |
2 | 0~60 秒 | 新的思考窗出现后,旧窗再等多久才自动折回(支持小数) |
| 运行中自动展开工具 | autoExpandTools |
关 | 开关 | 开:运行中最新的工具卡自动展开(用官方卡片自己的折叠/内滚,不套限高小窗) |
| 发消息回到尾部 | returnToTail |
开 | 开关 | 你停在中途(看过置顶、跳转过轮次)时,自己再发一条消息 ⇒ 视图滑回尾部;关掉后一律停在原地,只有滚到底或点「回到底部」才恢复跟随 |
| 平滑系数 | smoothGrow |
0.15 | 0.05~0.9 | 跟随时每帧吃掉多少差距,越小越柔 |
| 离底显示「回到底部」 | showJumpButton |
开 | 开关 | 离开底部时出现回底按钮(跟随中的轻微落后不显示,避免闪烁) |
| 置顶显示提问 | pinPrompt |
开 | 开关 | 把「你正在看的那一轮」的提问固定在会话顶端做成快速导航:往上滚会跟着换成那一轮,超过一行只显示一行;它自己在视口里时自动让位,点它滑回那句话 |
| 动效过渡 | animations |
开 | 开关 | 关掉则折叠/展开/回底全部瞬时 |
| 小窗火花 | sparks |
开 | 开关 | 运行中思考小窗底部的火星(关掉后不建画布、不排帧) |
| 火花颜色 | sparkColor |
#4fa8ff |
颜色 | 火星颜色;核心自动提亮成白热 |
| 正文锻打火花 | forgeSparks |
开 | 开关 | 正文流式写头砸出的火星;写头不动就不砸,跑完自动收手 |
| 锻打火花速度 | forgeSpeed |
1 | 0.2~4 × | 火星飘出去的速度倍率 |
| 锻打火花寿命 | forgeLife |
1.3 | 0.2~5 秒 | 单颗火星活多久(实际在 ±30% 内随机) |
| 火花密度 | sparkDensity |
1 | 0.2~3 × | 火星数量倍率,两种火花共用;越高越密、绘制开销越大 |
设置存在浏览器 localStorage(按 DSH 页面源站隔离)。
诊断
浏览器控制台(__dshStreamfold 是本插件公开的控制面/调试入口,其中 fx 为火花测试契约;本体不含日志、探针或逐帧采样):
__dshStreamfold.state() // 当前设置 + 官方「工作步骤展示」取值快照
__dshStreamfold.set({ smoothGrow: 0.1, supersedeDelay: 3 })
__dshStreamfold.scan() // 立即按当前 DOM 重扫一次(不改设置)
__dshStreamfold.dispose() // 撤掉全部注入(幂等;卸载后刷新页面即恢复原生)
报问题时附上 DSH 版本与 __dshStreamfold.state() 的输出。
开发与验收
- 手写、无构建:
lib/client.js(浏览器半区,包在window.__ModuleLoader__里)、lib/index.js(宿主半区,12 行占位)。 - 改完
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 哈希。 - 测试:
npm test(test/spark.mjs28 断言 +test/contract.mjs+test/client-apply.mjs),当前 EXIT=0。
License
MIT
链接
同类插件
zhu1090093659/dsh-web#packages/dsh-task-board★ 10209
侧边栏多列任务看板:卡片交给真实 DSH 智能体会话执行,支持 cron 定时(Host 侧到点执行,关浏览器也生效)。
zhu1090093659/dsh-web#packages/dsh-web-all★ 10209
DSH Web UI 插件与皮肤合集:任务看板、git 图、右侧面板、远程移动端 UI、桌宠、实时 token 统计与皮肤中心。
ccch1mneyyy/dsh-TUI★ 7166
Claude Code 风格全屏终端 UI:像素鲸鱼顶栏、实时工作状态行、思考流式展开。
MeteorNOX/DeepSeek-Balance-Whale-Widget★ 7008
右下角常驻的小鲸鱼挂件:余额、今日已用与每轮对话消耗(含峰谷价),余额预警与今日预算的泡泡内容都可编辑;泡泡点击序列模块化自定义,支持并列加权 A/B、随机台词与随机图片;内置 30+ 厂商模板(OpenAI / OpenRouter / Kimi / 硅基流动 / 方舟 / 智谱 / MiniMax 等),按模型查余额与订阅额度;另有任务结束音效、导入音频、自定义角色与资源管理。数据全在本机,无遥测。
omdsh-dev/DSH-better-sidebar★ 4985
侧边栏完整工作台:内置文件渲染编辑、终端、Git 与子代理,支持三方插件注册新 Tab。
Devin-AXIS/deepseek-design#deepseek-idesign★ 1762
可视化设计工作室,支持网站、App 原型、海报、信息卡、报告和杂志的模板创建、元素编辑、选区级 AI 草稿衔接与导出。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。