deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
INSTALL REFERENCE
dsh plugin --profile web add github:TYOPXN360/dsh-web-scroll-flow
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README
DSH Web 对话滚动动效插件:自动跟随滚动动画、边缘橡皮筋回弹、流式逐字打字机。
纯客户端插件,源码 + 预构建产物都在仓库里,安装后无需自己构建即可直接看到效果。
prefers-reduced-motion(系统减动效)下自动跟随动画与回弹禁用,保持瞬时行为。
仓库自带预构建产物(lib/index.js、lib/client.js),克隆后无需构建,直接安装即可看到效果:
git clone https://github.com/<owner>/dsh-web-scroll-flow.git
cd dsh-web-scroll-flow
pnpm install # 安装 link 解析需要的依赖(不构建插件)
pnpm dsh plugin --profile web add "$PWD"
这会向 $DSH_HOME/profiles/web/package.json 写入
"dsh-web-scroll-flow": "link:<本目录>" 依赖,并把包加入
dsh.profile.bundles 层列表。首次安装需要重启 pnpm dsh web:
# 停掉当前 dsh web,然后:
pnpm dsh web
打开 http://127.0.0.1:3080:window.__DSH_BOOT__ 中出现
dsh-web-scroll-flow 条目,/plugins/dsh-web-scroll-flow/client.js
可访问,即加载成功。
每次 pnpm run build 后刷新 http://127.0.0.1:3080 即可(服务器实时读取
lib/client.js),无需重启服务器;只有首次安装需要重启 pnpm dsh web
使 profile 组合生效。
pnpm install # 安装构建 / 测试依赖
pnpm run typecheck # tsc --noEmit
pnpm run test # vitest(jsdom)
pnpm run build # tsdown → lib/(index.js + client.js)
pnpm run check # 三者一起
仓库提交了预构建产物(lib/index.js、lib/client.js、lib/index.d.ts),
sourcemap 与依赖目录不入库。修改源码后请重新 pnpm run build 再提交,
确保 lib/client.js 与源码同步。
src/
index.ts 节点半入口(空 apply,使行成为合法 loader 条目)
client/
index.ts 浏览器半入口:扫描 + 挂载 + 设置接线
scroll-flow-controller.ts 滚动控制器:跟随动画 / 橡皮筋回弹(零依赖,可独立测试)
scroll-flow-settings.ts 设置类型 / 持久化 policy
settings-row.tsx General 设置行(动画档位 + 回弹 + 打字机开关)
typewriter.ts 逐字打字机:思维链 + 正文,段落间距 / 光标 / 提速
tests/ vitest + jsdom 测试
cordis.patch.yml bundle patch:插入 dsh.client 行
tsdown.config.ts 构建配置(node 半 ESM + client 半 CJS bundle)
lib/ 预构建产物(client.js 供运行时加载,index.js 供 loader 解析)
插件是纯 DOM 层增强,不修改 DSH 本体代码:
MutationObserver 监听文档中的对话滚动容器
[data-conversation-scroll](ConversationRoot 的 scrollBody),挂载
ScrollFlowController 与 TypewriterController。scrollTop(configurable,dispose 时
删除还原)。程序性"贴底跟随"写入(目标 == scrollHeight)被拦截:
小增量贴底跟随瞬时落底并播放整列入场推升(ChatAnimation 式,新内容
从底部出现、旧消息整体上推);大距离跳转(回到底部)保留平滑缓动。
其它写入(恢复位置、prepend 锚定)原样瞬时通过。只有明确的用户输入
(滚轮 / 触摸 / 鼠标按下 / 键盘滚动)会打断动画。releaseDelay 后弹簧回中。display:none 不占高,覆盖层
正常流逐字显示,按 \n\n 拆段并复制段落 margin,光标跟随正在输入的
段落;停止增长后恢复原始 Markdown,并在恢复瞬间抑制入场推升避免回弹。ctx.settingsScope 绑定 dsh-web-scroll-flow 命名空间,
General 设置行通过 settings.general.item 插槽注册;切换档位 / 开关时
实时更新已挂载的所有控制器。默认参数在 src/client/scroll-flow-controller.ts 顶部的
DEFAULT_FOLLOW / DEFAULT_BOUNCE,以及 src/client/typewriter.ts 的
DEFAULT_OPTIONS:
修改后重新 pnpm run build 并刷新页面。
用户也可以在 General 设置里直接切换动画档位(优雅 = 380ms 慢速上推)、 回弹开关、打字机开关,无需改代码。
pnpm dsh plugin --profile web remove dsh-web-scroll-flow
重启 dsh web 后插件不再加载,浏览器行为完全还原。
MIT
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。