前言¶
用 DeepSeek Harness(DSH)久了會遇到兩個界面問題:左側面板列表有幾個條目就佔幾行,選項一多,底部的「工作區」就被擠出窗口;右側欄有些 tab 的內容比盒子高,卻被 overflow: hidden/clip 裁掉,既看不見也滾不到。這兩處都不是配置項,插件註冊接口也只接受 id / order / label,沒有尺寸參數。下面介紹的 gusong1729/dsh-panel-scroll 就是一個客戶端插件,直接在 DOM 層補這兩個缺口。
這是什麼¶
dsh-panel-scroll 由 gusong1729 維護,分類是客戶端插件,給 DSH 的 Web / Desktop 界面打一個小布局補丁:左側面板列表封頂 4 行、剩下的用滾輪滑出來;右側欄被裁掉內容的容器改成可以上下滾動。倉庫地址是 https://github.com/gusong1729/dsh-panel-scroll ,社區目錄頁是 https://www.skillhub.cn/plugins/gusong1729/dsh-panel-scroll 。許可證爲 MIT,package.json 裏版本號爲 0.2.4。
核心功能¶
- 左側面板列表封頂:默認只顯示 4 行(學習 / 插件 / 插件市場 / 自動化任務等),剩下的用滾輪滑出來,「工作區」往上升、會話列表多露幾條。
- 右側欄不再裁內容:右欄裏凡是「內容比盒子高、卻被
overflow: hidden/clip切掉」的容器,改成可以上下滾動,滑到底能看到原本夠不到的項。
安裝與啓用¶
README 給出的安裝方式有兩種。方式一是本地目錄,適合開發或自用,把插件所在的絕對路徑交給 dsh plugin add:
dsh plugin --profile <你的 profile> add /絕對路徑/dsh-panel-scroll
也可以在 DSH 裏讓 agent 用 plugin_manager 的 install_bundle 指向該目錄。方式二是 npm,README 標註爲「如果已發佈」:
dsh plugin --profile <你的 profile> add dsh-panel-scroll
無論哪種方式,裝完都要重啓一次 DSH 才生效,因爲客戶端插件代碼是在啓動時裝載的。
配置¶
配置全部走 localStorage,改完刷新頁面即可,不需要重啓。可用鍵有兩個:
| 鍵 | 默認 | 說明 |
|---|---|---|
dsh-panel-scroll:rows |
4 |
面板列表顯示幾行,取值 1–20。設成 3 時算上「學習」那一行正好 4 行 |
dsh-panel-scroll:unclog |
開 | 設爲 "off" 關閉右欄的滾動修復,只保留左側 4 行封頂 |
在 DevTools Console 裏改值後刷新即可:
localStorage['dsh-panel-scroll:rows'] = 3
location.reload()
工作原理¶
左欄的做法是向 sidebar.panellist 註冊一個不可見的標記行,它的 DOM 節點必然落在真正的面板列表裏,插件從這個錨點往上走,找到「自己那一行」和「行列表」,判據是有沒有同 tag 同 class 的兄弟,而不是硬編碼的類名,再給列表發佈一條 max-height: N × 行距 的樣式表規則。這裏刻意用樣式表加 !important,不用內聯樣式,因爲 shell 重渲染會把內聯值沖掉。
右欄的做法是先不認類名,按「貼着視口右邊緣、高度 ≥ 70% 視口的最寬容器」定位右欄,再掃描其子樹:內容比盒子高、且被 hidden/clip 裁掉的容器改成 overflow-y: auto;另外還處理起始側溢出——justify-content: flex-end/center 這類末端或居中對齊時,多出的內容會落在容器上邊界之外,scrollHeight 不計入、任何 scrollTop 都夠不到,表現爲「滾到頂也看不到第一項」,這類容器往往還是 overflow: visible,所以這條判據先於 overflow 判斷執行:檢測到有子元素跑到容器上邊界之上,就先把對齊改成 flex-start,讓溢出變成正常的下方溢出、可滾動。
適用場景與注意¶
適合在 DSH 里長期開多個面板、右側欄有長內容、又不想動 shell 源碼的人。安裝前應檢查源碼與許可證。下面是 README 列出的已知限制:
- 依賴 shell 的 DOM 結構。插件刻意避開類名(DSH 用的是 CSS Module 哈希類名),但 shell 若改了層級關係,插件可能失效,失效時表現爲「沒效果」,不會破壞界面。
- 在
dsh 0.2.1-rc.2上驗證過,package.json裏dsh.engines.dsh聲明爲>=0.2.1-rc.2 <0.3.0。 - 右欄關閉時,「貼右邊的那條」是主區,因此右欄規則也會作用到主區。不想要就把
dsh-panel-scroll:unclog設成"off"。 - 註冊的標記項
label爲空,會出現在面板列表的「更多」菜單和無障礙樹裏,是一個空項。 - 面板少於 2 個時左側封頂邏輯不生效,因爲沒有兄弟行可判定。
- 高度小於 60px 的被裁容器不處理,閾值內是滾動條比內容還高的區域,修了反而更糟。
- 開發時改完
client.js,刷新頁面即可生效,不需要重啓 DSH。
驗收與開發¶
插件包是 link: 安裝到 profile 的,相關文件都在 client.js,通過 window.__ModuleLoader__.load({ id, factory }) 暴露 apply/inject。兩種驗證方式都不需要裝進 DSH:
node tests/smoke.mjs
這條命令用無依賴的冒煙測試裝載 client.js,跑 apply()/註冊/銷燬。瀏覽器驗收頁 tests/harness.html 復刻了 shell 骨架,打開後底部打印 HARNESS PASS。也可以用無頭 Edge 跑一遍並截圖:
msedge --headless=new --disable-gpu --window-size=1400,900 \
--screenshot=harness.png tests/harness.html
卸載¶
dsh plugin --profile <你的 profile> remove dsh-panel-scroll
或者在 Plugins 頁面把 dsh-panel-scroll 關掉或卸載。插件全部效果都走注入的樣式表加類名,卸載時樣式表移除、加過的類在 dispose() 裏清掉,不殘留。README 提到 0.2.2 及更早版本曾用內聯樣式,卸載後左欄會保持封頂直到刷新,0.2.3 起修正。
小結¶
dsh-panel-scroll 的價值不在新功能,而是把兩個沒有配置項可用的界面問題在 DOM 層補掉:左欄封頂滾動、右欄解除裁剪。改動面小、回退也乾淨,適合需要面板列表更緊湊、又希望右側長內容可滾動的人。目錄頁 https://www.skillhub.cn/plugins/gusong1729/dsh-panel-scroll ,源碼 https://github.com/gusong1729/dsh-panel-scroll 。
說明:社區目錄是獨立站點,與 DeepSeek / 幻方無官方從屬關係,不是官方應用商店。