packages/dsh-task-board
zhu1090093659/dsh-web侧边栏多列任务看板:卡片交给真实 DSH 智能体会话执行,支持 cron 定时(Host 侧到点执行,关浏览器也生效)。
让 AI 的长篇生成如提词器般温润流淌。
为 DeepSeek Harness(dsh)打造的二阶弹簧物理流式渲染与零重排跟随引擎。English · 项目主页 · 工作原理与基准 · npm
无论是阅读数百行的长篇推演,还是紧盯高速吐字的代码生成,dsh-smooth-stream 带来的是一种沉浸、连贯且零视觉负担的阅读质感:
大模型输出是通过网络分块到达的。一个数据包可能在几毫秒内送达数百字符,下一个分块却需要数十毫秒。
如果直接将 DOM 渲染和视口滚动绑定在离散的到达事件上,通常会引发两个阅读体验问题:
scrollTop = scrollHeight 进行瞬时硬跳;即使用 CSS scroll-behavior: smooth,高频写入也会不断重置缓动曲线,导致动画永远无法收敛,高速流下伴随剧烈的主线程重排。dsh-smooth-stream 将内容呈现与视口运动拆分为两个独立的物理状态机,在每一帧动画回调(rAF)中连续积分,彻底消除跳跃感。
[ 模型 SSE 分块流 ]
│
▼
┌─────────────────┐ 背压阻尼 (0.55x ~ 1.0x) ┌─────────────────┐
│ 揭示节奏引擎 │ ◄──────────────────────────────── │ 弹簧跟随引擎 │
│ (Reveal Engine) │ │ (Follow Engine) │
└────────┬────────┘ └────────┬────────┘
│ 字符积压与分数积分 │ 二阶阻尼弹簧积分 (k=130, c=24)
▼ ▼
[ 逐帧平滑展开 DOM ] ───────────────────────────────► [ 合成层 Transform 补偿 ]
(单帧视觉位移 ≤ 8px) (0 Reflow / 纯 GPU 合成)transform: translate3d 吸收。跟随过程不读写任何触发 Layout 的属性,杜绝重排风暴。已处理 X 秒 摘要,保持工作区专注;支持随时点击无缝展开。左:默认 Web UI。右:dsh-smooth-stream。
平滑度与稳定性基于本地自动化审计台架验证:
验证闸门 · 测试项目 · 指标要求 流式渲染审计 · node scripts/run-render-audit.mjs · 5 种典型生成场景下 10/10 Clean,零位移回退 视口溢出闸门 · node scripts/verify-overflow.mjs · 极限输出场景下零过滚、零反弹 尾行晃动抑制 · pnpm test · 单帧跳变 ≤30px,7 帧振幅峰值 ≤32px
在 DeepSeek Harness 源码根目录运行:
pnpm dsh plugin --profile web add dsh-smooth-stream如果系统 PATH 中已有 dsh:
dsh plugin --profile web add dsh-smooth-stream启动界面:
pnpm dsh webHost 日志中显示 [dsh-smooth-stream] plugin loaded! 即表示已成功加载。
卸载命令:pnpm dsh plugin --profile web remove dsh-smooth-stream。
DSH 内核 · 本插件支持情况 0.2.x(@deepseek-ai/dsh-client-* ≥ 0.2.0-rc.0) · ✅ peerDependencies 已声明。助手步骤的接管改为原地替换内置行(0.2.x 每个 keyed 条目各占一个座位),因此保留了内核的 children/locale/inject 座位;思考正文新增的 conversation.chat.reasoning.body 槽位已接入(见下) 0.1.7(@deepseek-ai/dsh-client-* ≥ 0.1.7-rc.1) · ✅ 当前声明范围:peerDependencies 的下限即此版本。插件配置页迁到侧栏 Plugins(plugins.bundle.config)、助手步骤的双流程座位(groupPart)、图标与 primitive 改名、settings 投影 seam(describe() / update())均已适配 ≤ 0.1.6(含 0.1.5-rc 桌面内核) · ⚠️ 代码里保留了旧 seam 的兼容分支(设置注册表、size 后缀图标名),但已不在 `peerDependencies` 声明范围内,本版未实测 0.1.0-rc.5 ~ 0.1.0-rc.7 · ✅ 旧版本(≤ 0.6.1)支持 0.1.1-rc.2 · ✅ 旧版本(≤ 0.6.1)支持 0.1.2-alpha.1 ~ 0.1.2-alpha.3 · ✅ 0.4.3 起
0.1.7 线是本版的目标内核,已按“同一份构建、运行时探测”的方式适配;0.1.5-rc 的兼容分支保留在代码中,便于回退到旧内核时仍能加载。plugins.bundle.config 槽位),并给助手步骤同时挂上 reasoning / response 两个流程座位(groupPart)、把图标导出从 size 后缀改名为权重后缀。本版对三者都做了运行时适配:槽位不存在时旧路径继续生效,groupPart 缺失时按“全部块归属本渲染”处理,图标按候选名逐个探测。SettingsNamespace 类型。@deepseek-ai/* 包的运行时符号做静态导入**。宿主 CLI 经 node --import tsx/esm 启动,tsx 会应用宿主 tsconfig 的 paths 映射,外部插件对 @deepseek-ai/* 的裸导入可能被重定向进宿主源码,一旦宿主侧改名/删符号就会以模块实例化错误的形式炸掉启动。类型导入(import type)不受影响;本版对 primitive 的读取因此改走模块表探测(harnessIcons.ts / primitives-compat.tsx)。插件默认采用 preset: balanced。如需切换手感,可在对应 profile 的 cordis.patch.yml 中修改:
preset · 动态特性 realtime · 紧跟模型分块到达节奏,缓冲更小 balanced · 默认推荐,兼顾阅读流畅度与响应延迟 silky · 增大缓冲区,追赶更平缓柔和
在 Web 界面打开 设置 → 插件 → 插件配置,可对 丝滑流式(Smooth stream) 卡片进行个性化调节:
本地淡入预览:执行 pnpm build:repro,在仓库根目录启动 python3 -m http.server 8765 --bind 127.0.0.1,打开 http://127.0.0.1:8765/repro/index.html?demo=fade。预览包含暂停、停止、深浅主题、高速分片和代码/公式保护样例,复用真实输出引擎,富文本为测试样例。
执行 node scripts/verify-logarithmic-fade.mjs 可验证并录制预览(需要 Chrome 和 pnpm exec playwright-core install ffmpeg;其他 Chrome 路径可用 CHROME_BIN 指定),报告与视频保存在未跟踪的 repro/artifacts/logarithmic-fade/。