dsh-chat-columns:給 DSH Web 長會話加「報紙式」多列讀法

前言

DeepSeek Harness(DSH)的 Web 會話可以拉得很長:一輪裏往往夾雜着代碼、工具調用和思考過程,但界面默認仍是單列縱向滾動。寬屏兩側留白,回顧幾輪之前的結論也要靠滾輪和記憶。DSH 生態裏能力一般以插件形式擴展;社區目錄 SkillHub 收錄了維護者 WuZiyi521 的客戶端插件 dsh-chat-columns,目標不是簡單「排版好看」,而是讓同一段對話能換幾種讀法。當前可用的是 報紙模式(CSS 多列、共用宿主滾動容器);無縫與複製兩種模式在路線圖中,尚未實現。

這是什麼

dsh-chat-columns 把 DSH Web 會話正文排成報紙式多列:所有列共用宿主唯一的滾動容器,滾動、錨點與「加載更早」仍由宿主負責,插件只負責列寬與分欄邏輯。README 強調這不是給 flex 容器隨手加 column-count——宿主 [data-chat-flow] 帶 .column 且爲 display:flex,CSS 多列對 flex 無效,插件需改回 display:block 並配合調整 --dsh-chat-content-width 等變量。插件無構建步驟,主要邏輯在 lib/client.js。package.json 版本爲 0.1.5,許可證 MIT;GitHub 倉庫當前星標爲 0。

核心功能(以當前版本爲準)

下面只列資料中已寫明、且報紙模式已實現或驗收中的能力。

報紙模式

  • 按滾動容器寬度自動在 1~3 列間切換(自動模式下每列可讀寬度下限約 420px)。
  • 支持手動指定 1 / 2 / 3 列或 auto;右下角徽標可點擊切換。
  • 所有列共用宿主唯一滾動容器,插件不寫 scrollTop。
  • 矮卡片(高度 ≤420px)不被列邊界切斷;較長消息允許跨列,屬報紙讀法設計。
  • 滾到頂可觸發宿主「加載更早」(需用戶自行滾到距頂約 24px,並有防抖)。
  • 多面板場景下嘗試識別主會話容器([data-conversation-scroll] 內內容行最多者),僅在容器內選取 flow;分不清時凍結佈局並提示。
  • 暗色主題跟隨宿主 token;列數寫入 localStorage,刷新後保持。
  • 卸載時清理樣式、徽標、內聯變量、調試 API 與 html 上的 data-dshc* 標記。

計劃中、尚未交付的模式

README 將三種讀法統一命名爲 報紙 / 無縫 / 複製(0.2.0 目標)。無縫側重一屏一列、接縫連續上移;複製側重只讀副本分欄、各欄獨立滾動(受 React 單節點樹約束,交互須用靜態副本,不能點按鈕)。二者當前未實現。

安裝與啓用

插件歸屬 web profile。資料中的安裝步驟在取得插件本地目錄後,用 DSH CLI 加入 bundle(勿自行拼接未在文檔出現的 github:owner/repo 形式):

dsh plugin --profile web add "$PWD/dsh-chat-columns"

將 $PWD/dsh-chat-columns 換爲你本機上的插件目錄絕對路徑即可。裝完後會進入 ~/.dsh/profiles/web/package.json 的 dsh.profile.bundles;dsh-hmr 在線時通常幾秒內熱生效,無需重啓。若未生效,可重啓 web 進程(README 提醒:dsh-web 即當前會話環境,重啓會打斷當前對話)。

安裝前建議自行查看倉庫源碼與 MIT 許可證:客戶端插件隨 DSH Web 進程加載,權限與當前 DSH 運行環境一致。

徹底卸載:

dsh plugin --profile web remove dsh-chat-columns

README 另注:配置熱重載後若未刷新頁面,新實例可能要等下一次佈局事件才接管當前會話;啓用或重裝後刷新一次頁面是推薦做法。

典型用法

切換列數

在瀏覽器開發者工具控制台調用全局調試 API:

__dshChatColumns.set(1)      // 關掉(恢復單列)
__dshChatColumns.set(2)      // 固定兩列
__dshChatColumns.set(3)      // 固定三列
__dshChatColumns.set("auto") // 按窗口寬度自動(默認)
__dshChatColumns.get()       // 查看當前狀態

偏好保存在 localStorage["dsh-chat-columns:cols"]。

列數計算規則(資料摘錄)

自動與手動模式使用固定公式(gap = 40,須與 CSS column-gap 一致):

fit(w) = max(1, floor((W + gap) / (w + gap)))
自動    = max(1, min(3, fit(420)))
手動 n  = max(1, min(n, 3, fit(260)))

列數依據滾動容器 clientWidth;窗口或側欄變化由 ResizeObserver 監聽。

本地開發與沙盒

無構建步驟,修改 lib/client.js 保存後依賴 dsh-hmr 熱替換。可用倉庫內 harness/index.html 配合本地 HTTP 服務查看多列效果(詳見倉庫 README「開發」一節)。

適用場景與注意

適合誰: 經常在 DSH Web 裏閱讀或復盤超長對話、希望寬屏橫向利用空間、快速掃讀全貌的開發者。報紙模式風險相對低:不接管滾動,與宿主錨點、加載更早的分工較清晰。

應注意:

  1. 當前僅是 CSS column-count 的報紙模式,不是「一屏一頁」的無縫閱讀。
  2. 頁面存在多個 [data-chat-flow](軌跡、子代理等)時,插件依賴主會話容器啓發式;多個滾動容器且行數接近時仍可能誤判,資料標明未充分驗證。
  3. 超寬表格、sticky 元素在多列下的表現資料中標註爲未驗證。
  4. 移動端未專門適配;420px 列寬下限在手機上通常恆爲 1 列。
  5. 維護方 README 寫明穩定性處於 0.1.x 驗收階段,不宣稱全部穩定性用例通過;細節見倉庫 docs/testing.md 與已知限制列表。

結尾

dsh-chat-columns 在插件層爲 DSH Web 長會話提供了第一種額外讀法——報紙式多列,並預留無縫、複製兩種模式的設計空間。若你要試用或跟進版本,可從社區目錄與 GitHub 倉庫獲取說明與源碼:

  • 目錄頁:https://www.skillhub.cn/plugins/WuZiyi521/dsh-chat-columns
  • GitHub:https://github.com/WuZiyi521/dsh-chat-columns

社區目錄爲獨立站點,與 DeepSeek / 幻方無官方從屬關係;安裝與權限請以你本機 DSH 環境與倉庫最新 README 爲準。

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

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

小夜