DSH 採用“一切皆插件”的架構,允許在不修改核心代碼的情況下擴展功能。在 DSH Web GUI 中,聊天組件是交互核心,但常駐的輸入框和工具條會佔用大量垂直空間,導致對話內容被壓縮。dsh-chat-collapse 插件提供了一種非侵入式的解決方案:通過在輸入框工具行增加一個收縮按鈕,將組件隱藏,並從角落喚出恢復球,從而釋放空間。
插件定位¶
這是一個由 cx2002302-lang 維護的 DSH Web GUI 插件。它運行在純瀏覽器側,不 patch 本體、不注入 bundle、不起宿主服務,完全符合 DSH 的插件化理念。
核心功能¶
-
一鍵收縮與恢復
點擊輸入框工具行最右側的按鈕,聊天組件會收起,釋放縱向空間。收起後,視口角落會浮出一個恢復球,點擊即可還原組件。組件收起時,草稿、貼的圖、光標位置全部保留。 -
目標切換
默認只收縮輸入框區域。通過右鍵點擊恢復球,可以在「輸入框」和「整個對話區」之間切換收縮目標。 -
快捷鍵與持久化
支持按Alt+H鍵盤快捷鍵切換收起/展開狀態。狀態通過localStorage['dsh.chatCollapse.v1']持久化,刷新頁面後保持。 -
隱私與安全
插件無網絡請求、無遙測、無宿主服務。唯一的落盤操作是本地存儲的狀態數據,不接觸會話內容,不讀取草稿文本。
安裝與啓用¶
安裝前請確保 DSH 版本不低於 0.1.2-rc.1。
- 安裝插件:
dsh plugin --profile web add github:cx2002302-lang/dsh-chat-collapse
- 安裝完成後,需要重啓 DSH Web 服務以加載新插件(根據 README 示例):
systemctl --user restart dsh-web.service
- 重啓並刷新頁面後,輸入框工具行最右側會出現收縮按鈕。
典型用法¶
- 收起組件:點擊輸入框工具行最右側的按鈕。
- 恢復組件:點擊角落浮出的恢復球。
- 鍵盤切換:按
Alt+H。 - 切換收縮目標:在組件收起狀態下,右鍵點擊恢復球,選擇目標。
技術細節¶
- 依賴鉤子:插件依賴官方源碼中的字面量屬性鉤子,包括
[data-composer-card]、[data-composer-seat]和[data-conversation-scroll]。 - 實現方式:通過在
<html>上設置data-dsh-cc和data-dsh-cc-target屬性,配合 CSS 選擇器驅動顯隱。這種方式避免了使用 class 名稱,防止 React 重渲染時樣式丟失。
卸載¶
如果需要移除插件:
dsh plugin --profile web remove dsh-chat-collapse
卸載時會自動清理注入的樣式、按鈕、恢復球及 HTML 屬性,不留殘留。