Repository navigation
Releases: Laplace-bit/dsh-smooth-stream
Release list
v0.8.0-rc.1 — Harness 兼容性验证候选版
Harness 兼容性验证候选版
- 整合 #35、#40,修复 #36:Harness 0.1.7 / 0.2.x 的插件详情设置页、实时偏好和 Think 自动展开恢复正常。
- 修复动态 Agent slot 注册重入、卸载组件恢复、通用 Agent 文本队列排空后无法唤醒。
- 设置写入使用真实 volatile 配置及 revision 校验;移除绕过校验的回退。
- 现代配置投影内核默认使用 Harness 原生滚动,设置中仍可开启插件接管;旧设置注册表保持默认开启。
- 含跨行行内代码的段落禁用 text-box-trim,避免 #34 所描述的裁剪组合;保留代码换行。
- 保留 #39 的助手原地替换、流程分流和单一滚动所有者。
验证状态
独立完整构建 Harness 0.1.7-rc.2、0.2.0-rc.2,真实 Chrome 设置保存/刷新、Think 展开/回答时折叠验证通过,控制台无错误。typecheck、build、产物新鲜度、8 项设置卡产物校验和真实配置服务集成测试通过。
完整 Vitest:275 通过 / 8 失败;剩余失败均在 main 对照中存在,涉及滚动几何与终态测试,仍保留待验证。Windows #25 重影与 #34 中文绘制丢失尚待同平台回归,因此本版为 prerelease,npm 发布到 next,latest 保持 0.7.0。
此版本的 peer 范围面向 Harness 0.1.7-rc.1 起及 0.2.0 预发布线;更旧内核的兼容分支保留,但不再属于声明支持范围。
v0.7.0
更新内容
- 新增流式输出速度预设,可通过设置界面与 RPC 选择。
- 调整流式渲染与帧协调,改善对数渐显、结束贴底和行入场动画。
- 适配 Harness 0.2.x 的 groupPart 行拆分、响应行滚动所有权与状态尾行。
- 优化思考块折叠时机、高度限制及本地化显示。
- 合入 PR #39:#39
验证与已知限制
- 发布前类型检查、构建和产物新鲜度检查通过;设置与设置通道相关的 10 项测试通过。
- 已在 Harness 0.2.0-rc.2 验证插件加载、设置读取及浏览器生命周期。
- 旧全量测试尚未全部通过,部分测试仍依赖旧 Harness 接口和注册优先级。
- Harness 0.2.x 中自定义设置卡仍需迁移至新的设置表单接口。
- 在内置 assistant-step 尚未注册、插件先使用回退组件的组合下,后续动态注册仍可能触发重复 slot;卸载也可能留下行包装组件。内置组件已注册的常规流程验证正常。
安装 / 更新
dsh plugin --profile web add dsh-smooth-stream@0.7.0完整变更:v0.6.1...v0.7.0
v0.6.1
🛠 修复:设置卡片恒显示「当前连接无法访问插件设置。」(#29)
DSH 0.1.5-rc.1+ 上,插件 Host 半区加载正常(逐字揭示、滚动接管都在跑),但 /smooth-stream RPC 通道从未挂载:内核 connection.rpc.handle() 在服务内部用未注入 webServer 的上下文解析 webServer,被 cordis 4.0.2 的 inject 守卫拒绝(cannot get property "webServer" without inject)。抛错发生在 inject fiber 内被吞掉,浏览器请求落到静态回退(POST 一律 405),卡片因此恒为「无法访问」,点「重试」无效。
本版新增插件侧兼容层(src/settings-channel.ts):
connection.rpc.handle()仍是首选路径,老内核行为完全不变;- 服务调用抛错时,把同一
/smooth-stream前缀路由直接挂到webServer上,鉴权沿用 connection 的公开方法requestRejection(与/api同一套 Host/Origin + 浏览器会话闸门;该方法缺失时拒绝挂载,不做无鉴权暴露); - 请求/响应信封与端点词汇不变(
settings-api.ts原样保留),卡片控制器零改动; - 隔离宿主实测:
POST /smooth-stream/settings.read405 → 401(挂载),认证后读写均 200;新增 3 条宿主回归测试。
内核侧同根因影响面更大(生态内其它插件同样命中),仍在 deepseek-harness#5926 与 #6105 跟进;内核修复后,本插件的回退分支自然退役。
🛠 修复:流式结束时刻的 Y 轴上跳与回弹漂移(#28)
流式输出结束(揭示排空)瞬间,宿主执行 DOM 替换(卸载 turnStatus、挂载 turn-process/turn-tail、live→settled re-key),高度塌缩导致视口单帧上跳或数帧 ±20px 拉锯;此后为排水撑开的临时跑道(runway)与 flowPad 以约 1px/帧慢速退休(约 1.5s),表现为整屏内容像电梯一样缓慢下滑归位。
- 锚点公式引入
scrollDelta校正:measureReadingAnchor此前未剔除滚动增量,把纯视口滚动(宿主贴底、用户滚动)误判为「布局把内容向下推」,向flowPad错误发放补偿; - 完成时刻快速交接(Fast Handoff):检测到流式结束立即清空跑道与临时 Pad、对齐自然贴底并释放所有权标记,不再启动 1.5s 的垫高与慢速退休循环——结束瞬间的拉锯与下沉回弹随之消除。
📦 安装 / 更新
dsh plugin --profile web add dsh-smooth-stream@0.6.1 # npm(镜像源同步完成后)
dsh plugin --profile web add github:Laplace-bit/dsh-smooth-stream#v0.6.1 # 或从 tag 安装Full Changelog: v0.6.0...v0.6.1
v0.6.0
✨ 新特性:动效偏好设置(closes #21)
系统开启「减少动态效果」时,插件的平滑打字机此前被静默绕过——不报错、面板灰灯、正文按官方原生渲染,且用户无从选择。新增三态设置 动效偏好(默认 跟随系统,保持无障碍语义):
- 跟随系统:系统要求减少动效时直接呈现原始文本(现状默认);
- 始终平滑:即使系统要求减少动效,仍保持平滑流式渲染(RDP 会话、性能工具、强制浏览器 flags 下的用户可选);
- 始终原始:无论系统偏好如何,直接呈现原始文本。
修复配套问题:radio 选项若嵌套在外层 <label> 内属非法 HTML,浏览器会把点击路由走导致 onChange 永不触发——设置卡改为外层 div + 选项独立 label。同时修复:会话行挂载早于流式状态翻转时打字机不再启动的重臂问题。
设计与原始验证来自 @Zn-Dk(#21 / PR #22),已在提交中署名致谢;为保留 v0.5.0 的接管滚动设置与既有引用稳定性架构,在 main 重新实现而非直接合并。
🛠 修复:任务完成后折叠中间过程在接管下失效(closes #20)
回复任务完成后,官方宿主会把中间过程折叠为「已思考」摘要行。接管渲染后该折叠对答案内联 Think 失效(过程行折叠由宿主包装层完成,与渲染器无关;但答案内联思考的折叠需要渲染器消费 turnProcess prop 配合)。
修复后:完成后 Think 块正确折入官方摘要行,点击摘要行或浏览器页内查找可重新展开,与内置渲染器行为一致。
📦 安装 / 更新
dsh plugin --profile web add dsh-smooth-stream@0.6.0 # npm(镜像源同步完成后)
dsh plugin --profile web add github:Laplace-bit/dsh-smooth-stream#v0.6.0 # 或从 tag 安装Full Changelog: v0.5.0...v0.6.0
dsh-smooth-stream v0.5.0
✨ 新特性:默认接管滚动
controlScroll 现在默认开启:插件默认接管会话滚动的底部跟随(此前需手动开启)。不希望接管的会话可在设置中关闭,滚动将完全交还宿主。
🛠 修复:完成期滚动回弹(“滚上去又弹回来”)
本次把完成级联期的视觉回弹按根因逐层消除,全部由逐帧轨迹黑匣子实证(新增 scripts/verify-follow-stability.mjs,pnpm probe:stability):
- 塌缩衰减截断:完成级联(think 收拢 / 状态行交换)使滚动 floor 每帧塌缩 20-30px,
scrollTop1:1 跟随,而 paint-shift 衰减被 8px/帧封顶,未补偿余量直接画成 14-26px/帧的持续视觉下坠。衰减上限改为max(8, 本帧 floor 降幅);引擎自身的退休滑移不受影响。 - drain 起点过覆盖:handoff 重开跑道(baseline +72px)与塌缩并发时,任务内绘制的测量在 paint 落地前被 CSS 过渡前进作废,过覆盖量恰为塌缩回撤量(单帧 3-10px dip)。修复:完成期 observer/cleanup 的 shiftCeiling 冻结上升(入场软化契约豁免),上升一律由 settle 的 rAF 原子读-绘帧按确认增长资助;流式路径零接触,换行补偿保持不限。
- 连同此前入库的交换帧领导权抢占、共享锚点账本、pad 退休循环修复,完成期抖动根因链七层全部关闭。
验证:vitest 182/182;test:smooth 全绿(Y 轴五场景 0 回弹);run-render-audit 10/10(历史 9/10 残余收口)。
🧹 其他
- 新增滚动稳定性黑匣子探针(setter 间谍调用栈归因 + rAF 采样 + transform 变更监听;
--inject-drop阴性对照自校验、--seed复现、违规导出 JSON 轨迹)。 - 清理仓库内会话产物文档与工具残留文件。
- 文档:记录 DSH 内核兼容版本范围。
📦 安装 / 更新
dsh plugin --profile web add dsh-smooth-stream@0.5.0 # npm(镜像源同步完成后)
dsh plugin --profile web add github:Laplace-bit/dsh-smooth-stream#v0.5.0 # 或从 tag 安装Full Changelog: v0.4.3...v0.5.0
dsh-smooth-stream v0.4.3
🛠 修复:0.1.2-alpha.2+ 内核上主机端(host)入口崩溃
继 v0.4.2 的客户端双内核兼容之后,host 侧还有一处静态导入没覆盖到:@deepseek-ai/dsh-settings 在 0.1.2-alpha.2 起移除了 settingsNamespace() 辅助函数(rc 代际上它只是个校验恒等函数),host 入口的静态 ESM import 在模块链接阶段直接报 does not provide an export named 'settingsNamespace',整个插件树启动失败。
修复方式:host 入口不再导入该辅助函数,直接传原始命名空间字符串(两代行为一致);SettingsNamespace 品牌类型改为 type-only 导入,构建时擦除,host bundle 对 dsh-settings 已零运行时依赖。
已在真实内核台架上双代实测通过:@deepseek-ai/dsh@0.1.0-rc.6 ✅ / @deepseek-ai/dsh@0.1.2-alpha.3 ✅
📦 安装 / 更新
dsh plugin --profile web add dsh-smooth-stream@0.4.3 # npm(镜像源同步完成后)
dsh plugin --profile web add github:Laplace-bit/dsh-smooth-stream#v0.4.3 # 或从 tag 安装Full Changelog: v0.4.2...v0.4.3
dsh-smooth-stream v0.4.2
🛠 修复:DSH 桌面版 2.0.4(内核 0.1.2-alpha)安装后白屏无法启动(#17)
内核 0.1.2 把 store 能力从 @deepseek-ai/dsh-client-runtime 拆分为独立的 @deepseek-ai/dsh-client-store 模块表种子,插件客户端入口顶层 require("@deepseek-ai/dsh-client-runtime/client") 在 0.1.2 内核上找不到模块,加载器一票否决整个插件树——桌面端表现为窗口白屏、仅剩「打开恢复模式」。现在改为运行时探针:优先 @deepseek-ai/dsh-client-store,回退旧路径,0.1.1-rc 与 0.1.2-alpha 两代内核同时兼容。
同时修复打包层:@deepseek-ai/dsh-settings 不再作为固定版本 dependencies 发布(会平铺进桌面 hoisted profile 顶层,触发内核版本一致性拦截),改为 required peerDependency,运行时经模块回退链解析宿主自带副本。
感谢 @MichengAI 在 dsh-archive-manager 的双内核适配先例,以及 issue #17 反馈者的完整复现信息。
✨ 此前未发版的提交(随本版一并发布)
- 行内代码换行不再与下一列表项重叠(#13):根因是插件自家
li的text-box-trim与宿主inline-flexcode 元素叠加,已实证修复并附probe-overlap回归台架 - 换行平滑激进版定稿:尾行平滑优先、头部允许步进,新增
FOLLOW_PAINT_SHIFT_MAX_STEP_PX平衡旋钮与悬停挂起守卫 - 平滑度审计台架:
scripts/run-render-audit.mjs与跟随探针(probe-tailbob/verify-overflow)入库 - 文档:README 与营销页围绕「丝滑流式、0 重排、0 抖动」重新组织
📦 安装 / 更新
dsh plugin --profile web add dsh-smooth-stream@0.4.2 # npm(镜像源同步完成后)
dsh plugin --profile web add github:Laplace-bit/dsh-smooth-stream#v0.4.2 # 或从 tag 安装Full Changelog: v0.4.1...v0.4.2
dsh-smooth-stream v0.4.1
🔧 修复:外部插件的 flow 兄弟元素随会话滚动(PR #10)
感谢 @qq564020069!其他插件注入会话流的兄弟元素(如 dsh-meow-memory 的折叠栏)此前不参与跟随滚动的位移变换,在滚动到底部时会被滑动的消息行盖住。现在 flow 列的所有直接子级统一参与等量位移,视觉顺序恒定。
同时修复:从 github: 安装时 esbuild 构建脚本被 pnpm 拦截导致 prepare 失败——已在 package.json 声明允许清单,git 安装开箱即用。
📦 安装 / 更新
dsh plugin --profile web add dsh-smooth-stream@0.4.1 # npm(镜像源同步完成后)
dsh plugin --profile web add github:Laplace-bit/dsh-smooth-stream#v0.4.1 # 或从 tag 安装注意:git 安装首次使用时按 CLI 提示把打印的精确 key 加入 profile 的
pnpm-workspace.yamlallowBuilds。
Full Changelog: v0.4.0...v0.4.1
dsh-smooth-stream v0.4.0
✨ 新功能:回合处理完成后自动折叠(#4)
回合结束后(出现结束标记且无运行中工作),思考块、工具调用、上下文注入与中间过程输出收起为一行「已处理 X秒」摘要,只展示最终回复——接近 Codex 的阅读体验。
- 设置 → 插件 → 丝滑流式 → 完成后自动折叠(默认开启),持久化、即时生效
- 流式期间不干预;点击摘要可随时展开 / 收起,手动状态独立保留
- 纯文本回复不生成摘要行
- 其他插件的自定义工具视图不会被误折叠(如 dsh-pianist 的钢琴卡)
- 摘要行参与跟随滚动位移,滚动时与上下文严丝合缝
同时从根源解决了 #9:原生实现取代外挂 dsh-auto-collapse,两者不再需要共存。
Full Changelog: b8c5eef...05e1fe2
dsh-smooth-stream v0.3.4
dsh-smooth-stream brings fluid streaming rendering and silky scrolling to the DeepSeek Harness Web UI.
v0.3.4
- Keeps the progressive renderer active through stream completion, including the final Markdown layout change.
- Holds the continuous scroll follower until growing content has settled.
- Separates screen-reader announcements from visual animation frames and announces only newly revealed text.
- Expands the streaming and follow test coverage around completion, layout growth, and accessibility updates.
Install
pnpm dsh plugin --profile web add dsh-smooth-streamUpdate
dsh plugin --profile web update dsh-smooth-stream