dsh-chat-answer-anchor:凍結 DSH 聊天區滾動位置

前言

DeepSeek Harness(DSH)默認的聊天行爲是「貼底跟隨」:只要沒有主動往上滾動,新內容出現時視口會自動拉到底部。這導致在長回答生成過程中,屏幕會不斷向下滾動,用戶被迫一路追着內容滾,或者等它寫完再手動滾回開頭。

dsh-chat-answer-anchor 專門解決這個問題。它讓視口在你最後停留的位置「凍結」,新回答出現時不再拖拽視口,只有你自己發消息時纔會先幫你滾到底部。這個插件不修改 DSH 的核心組件,只通過旁路觀察渲染後的 DOM 來控制滾動位置。

這是什麼

dsh-chat-answer-anchor 是一個純客戶端插件,用於凍結 DSH 聊天區的滾動位置。它由 arcnapan 維護,開源 MIT 許可。安裝後,新回答出現時視口不會自動貼底,而是停在用戶最後停留的地方;只有用戶主動發送消息時,插件纔會把視口滾到底,讓用戶看到自己剛發的消息。

核心功能

  1. 凍結滾動位置:新回答出現時,視口不會自動貼底,而是停留在用戶最後停留的位置。滾輪、觸摸、點擊、翻頁鍵、空格等操作都算用戶主動滾動,插件不會搶奪控制權。

  2. 發消息後先跟到底:用戶自己發送的消息需要能看見。插件會在用戶發送消息後主動把視口滾到底,讓用戶看到自己剛發的內容。

  3. 識別用戶意圖:插件會區分「用戶主動滾動」和「被插件或 DSH 拖拽」兩種情況。在用戶手勢之後的一段時間內,即使有新內容出現,也會認爲這是用戶的滾動意圖,不會把視口拉回原處。

  4. 攔截自動貼底:在沒有用戶手勢的情況下,如果視口被 DSH 或其他因素往下拽,插件會立即把它拉回原處,並關閉 DSH 的「跟隨底部」模式。拉回動作有 120ms 的限速,避免與 DSH 每幀搶奪 scrollTop 導致頁面卡頓。

  5. 會話位置記憶:每個會話會記錄自己的滾動位置。切換到其他會話再切回來時,會回到上次停的地方。如果切換時內容還沒渲染完,插件會等待內容長夠再對齊位置。

  6. 頁面刷新後位置保留:滾動位置按會話存入 sessionStorage,頁面重載後可以恢復到之前的位置。

  7. 可隨時關閉:插件提供開關,位於「設置 → 通用 → 新回答不搶視口」。關閉後插件完全停止接管,刷新頁面後也會記住這個選擇。

  8. 內容變短不硬撐:如果內容縮短導致滾動位置被瀏覽器夾回,插件會接受新位置,不會反覆往上頂。

安裝與啓用

dsh plugin --profile web add github:arcnapan/dsh-chat-answer-anchor

安裝後需要完全退出並重新打開 DSH(Desktop 版關窗口可能只是隱藏,進程還在跑)。安裝完成後,在「設置 → 通用」裏找到「新回答不搶視口」開關並啓用即可。

典型用法

啓用插件後,正常使用 DSH 聊天即可。當你閱讀長回答時,視口會停留在你最後滾動到的位置,不會因爲新內容出現而自動往下跑。只有當你自己發送消息時,視口才會先滾到底讓你看到剛發的消息。

插件通過觀察以下 DOM 元素來工作:
- 滾動容器:[data-conversation-scroll]
- 會話 id:滾動容器祖先上的 [data-conversation-session]
- 輪次行:[data-chat-turn="<數字>"]
- 跟隨狀態:[data-chat-following-tail]

這些選擇器集中在 lib/client.js 頂部的 SELECTORS 裏。如果 DOM 結構發生變化導致某個選擇器找不到,控制台會打印一條警告,但不會靜默失效。

診斷面板

插件在 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 進程的權限運行,安裝前建議查看源碼確認沒有額外權限請求。MIT 許可證允許自由使用和修改。

短結尾

dsh-chat-answer-anchor 通過旁路觀察 DOM 來控制滾動位置,在不修改 DSH 核心組件的前提下解決了「長回答生成時視口不斷下滾」的問題。它尊重用戶的滾動意圖,支持會話位置記憶和開關控制,適合需要頻繁閱讀長內容的用戶。更多信息請查看插件目錄頁和 GitHub 倉庫。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜