packages/dsh-task-board
zhu1090093659/dsh-web侧边栏多列任务看板:卡片交给真实 DSH 智能体会话执行,支持 cron 定时(Host 侧到点执行,关浏览器也生效)。
冻结 DSH 聊天区的滚动位置:新回答出现时视口不再自动贴到底部,停在你最后停留的地方。只有你发消息时才先跟到底,好让你看见自己发的话;回答一开始出字就重新锁住。每个会话各记各的位置(刷新还在),设置里有总开关,你自己滚动时永远不被拦。
关掉 DSH 聊天区的自动贴底滚动:新回答出现时视口不再自己往下跑,你想什么时候往下读就自己滚;发消息之后仍会先帮你到底,好让你看见自己刚发的话。
DSH 默认的滚动策略是「贴底跟随」:只要没主动往上滚,任何新内容出现都会把视口拉到底部。 结果是一段长回答还在生成,屏幕就一直往下跑,你被迫一路追着它滚,或者等它写完再手动滚回开头。
装上这个插件之后:视口冻结在你最后停留的位置。新内容往下长、DSH 想把视口拽到底,都会被拉回原处;只有你自己发消息时,它才先帮你滚到底看一眼自己发的话。
scrollTop 把页面拖卡。sessionStorage,页面重载后回来还能接上。纯客户端插件,不替换、不劫持 DSH 自带的聊天视图组件,只旁路观察它渲染出来的 DOM:
[data-conversation-scroll][data-conversation-session][data-chat-turn="<数字>"][data-chat-following-tail]这些选择器集中在 lib/client.js 顶部的 SELECTORS 里,DSH 改名字时只用改这一处。
万一一个滚动容器都找不到(说明 DOM 结构变了),控制台会打一条警告,不会静默失效。
宿主侧没有任何服务、路由或持久化,lib/index.js 是空实现。
lib/client.js 顶部有 SHOW_PROBE 开关,当前为 false(已关闭)。改成 true 会在右下角显示四行状态:
冻结 v15 · 容器 1 · 行 16 · 会话 3f2a9c1d
rest 1200 cur 1200 max 3400
tail 0 跟 0 拦 3 催 1
user 9
拦下贴底
会话 是当前滚动容器所属的会话 id 前 8 位rest 记住的位置,cur 当前位置,max 最大可滚值tail 是否还处在「跟随底部」状态,跟 是否处在「发送后跟随」的放手期拦 拉回次数,催 补发 scrollend 的次数user 当前识别到的用户消息行数排查问题时改回 true,改完重新加载页面即可,不需要改别的地方。
dsh-chat-answer-anchor/
├─ lib/
│ ├─ index.js 宿主侧入口(空实现,纯客户端插件)
│ └─ client.js 全部逻辑:冻结视口、发送后跟随、会话记忆、设置开关
├─ test/
│ ├─ selftest.mjs 静态自测:模拟 __ModuleLoader__ 校验导出与注册参数
│ ├─ behav.mjs 行为自测:假 DOM 跑 91 条断言
│ └─ bench.mjs 微基准:量热路径开销
├─ docs/screenshots/ 插件市场用的截图
├─ screenshots.json 截图清单(DSH 插件市场读取)
├─ cordis.patch.yml bundle 插入声明
└─ package.json
设置 → 通用 里的开关:

npm run check # 语法检查(node --check 两个入口)
npm test # 静态自测 + 行为自测
npm run bench # 热路径微基准
# 从 GitHub 安装
dsh plugin --profile web add github:arcnapan/dsh-chat-answer-anchor
# 或者在 DSH 里用本地路径安装
# plugin_manager install_bundle /absolute/path/to/dsh-chat-answer-anchor
安装后需要完全退出并重新打开 DSH(Desktop 版关窗口可能只是隐藏,进程还在跑)。
Freezes the scroll position of the DSH chat pane. New replies no longer drag the viewport to the bottom — it stays where you left it, and you scroll when you want to.
Works by watching the rendered chat DOM from a shell.overlay slot: gestures are followed,
unprompted downward drift is pulled back and a synthetic scrollend turns off DSH's
follow-the-bottom mode. Each session remembers its own position; the toggle lives in
Settings → General.
MIT