前言¶
DSH 的客戶端 GUI 裏,左側同一列塞了兩個部分:一是全局面板列表(Plugins、Plugin market、Automation、MCP connectors、Learn、Remotion、More),它不滾動,在 1234 px 高的窗口裏喫掉約 396 px;二是下面的 workspace / session 區域,只剩約 120–140 px,也就是兩行會話的高度。
外殼沒有提供把上下兩部分高度互相讓出來的辦法,所以會話列表長一點就會被裁掉,想點的那條根本點不到。這篇介紹的插件就是把這種取捨做成一個拖拽把手。
這個插件是什麼¶
dsh-sidebar-flex,倉庫 yuyu121704/dsh-sidebar-flex,維護者 yuyu121704,分類「客戶端」。它是一個 client bundle 插件,做的事只有一件:在全局面板列表下方加一條 10 px 的分割條,讓你能把面板列表的高度壓下去,把騰出來的垂直空間留給真正要讀的會話列表。
它只改高度,不改側欄寬度。
核心功能¶
拖拽分割條。 上下拖動,面板列表隨之收縮或增長,騰出的高度給 workspace + session 區域。
雙擊或右鍵分割條。 面板列表回到它自己的自然高度。
鍵盤微調。 分割條獲得焦點後按 ↑ / ↓,每次調整 24 px。
高度記憶。 重載、重啓、下次啓動都會從 localStorage["dsh-sidebar-flex:nav-height"] 恢復。
有下限,不丟內容。 面板列表最低 54 px(一行)。低於自然高度時列表自己變成可滾動,內容不是被裁掉,只是重新分配了空間。
不動寬度。 側欄寬度由外殼自己管,維持 264–420 px 的 clamp 和外殼自帶的邊緣把手。早先試過接管寬度,如今留在 lib/client.js 裏由 ENABLE_WIDTH 控制,默認 false,處於關閉狀態。
改動作用範圍。 插件只改面板列表的高度,不碰會話內容列。
安裝與啓用¶
安裝不走包管理器,需要手工把包放進 profile。profile 位於 <DSH data dir>/profiles/<profile>,例如 C:\Users\<you>\.dsh\profiles\desktop;client bundle 必須是該 profile 的 node_modules 裏的一個包,並登記在 profile manifest 裏。
Windows 下從本倉庫 checkout 建立 junction:
# Windows, from a checkout of this repo
New-Item -ItemType Junction `
-Path "$env:USERPROFILE\.dsh\profiles\desktop\node_modules\dsh-sidebar-flex" `
-Target (Resolve-Path .)
然後把包名加進該 profile 的 package.json 裏 dsh.profile.bundles:
{
"dsh": {
"profile": {
"bundles": ["...", "dsh-sidebar-flex"]
}
}
}
保存文件即可。@deepseek-ai/dsh-hmr 會監視 profile manifest,重新組合 profile 並通過 SSE 推送新的 client graph,分割條無需重啓應用就會出現;如果沒有,重載一次窗口。
這裏刻意不把包登記進 dependencies:插件管理器的 reconcile() 會丟棄「曾經是 dependencies、現在不是了」的 bundle,所以讓 bundle 處於 unmanaged 狀態反而更穩。
典型用法¶
裝好之後不需要額外配置,分割條就在面板列表正下方。
1、面板列表太高、會話只剩兩行時,按住分割條往下拖,直到會話列表出現足夠多可見行。
2、拖多了想回到原樣,雙擊或右鍵點分割條。
3、只想微調 24 px,Tab 到分割條後按方向鍵。
4、關掉窗口再打開,高度還是上次拖到的位置。
適用場景與注意¶
適合會話列表較長、想直接在側欄裏翻會話的人,以及希望每個會話行都可見、不必反覆滾動的人。
幾點需要知道的:
- 這是客戶端插件,以當前 DSH 進程的權限運行。安裝前先讀一遍源碼和許可證(MIT © 2026 yuyu121704),確認來源可信再放進 profile 的
node_modules。 - client 端的實現方式是輪詢側欄列,找到裏面的全局面板列表,寫入 inline
height並加上一個讓它可滾動的 class。React 每次渲染都會重寫 inline style,所以用MutationObserver在重渲染後重新應用高度;外殼若替換了列表節點,把手會被重新掛回父節點。沒有 client service、沒有 React state,啓動階段不容易出問題。 - 選擇器用
[class*='panelList']/[class*='sidebarCol']這類子串匹配,因爲 DSH 會 hash 自己的 CSS-module 類名。 - host 端(
lib/index.js)被刻意留成惰性,佈局完全在瀏覽器裏渲染,所以沒有 host service,也沒有重啓開銷。 - 兼容性邊界:
peerDependencies: @deepseek-ai/dsh >=0.2.0-rc.2 <0.3.0-0。作者用@deepseek-ai/dsh-client-ui-layout、-ui-sidebar、-ui-workspace的 0.2.2 client bundles 構建並驗證過。 - 版本 0.2.2,社區目錄頁顯示星標爲 0,屬於起步階段的小工具,用前自己驗證一遍。
- 卸載:從
dsh.profile.bundles移除"dsh-sidebar-flex",刪掉node_modules/dsh-sidebar-flex(junction 或拷貝),可選清除localStorage["dsh-sidebar-flex:nav-height"]。 - 目錄頁是獨立的社區站點,與 DeepSeek / 幻方沒有官方從屬關係,別當成官方應用商店。
結尾¶
dsh-sidebar-flex 做的事很窄:給 DSH 側欄的全局面板列表加一條可拖拽、可記憶的分割條,把垂直空間從面板列表讓給會話列表,寬度和會話內容都不動。DSH 的理念是「一切皆插件」,這類只在客戶端改佈局的小插件正好落在這個模型裏。目錄頁與源碼分別在 https://www.skillhub.cn/plugins/yuyu121704/dsh-sidebar-flex 和 https://github.com/yuyu121704/dsh-sidebar-flex。