前言¶
DeepSeek Harness(下稱 DSH)的 Web 界面佈局是固定的:頂欄、狀態欄、任務條、輸入欄各佔一處。想在錄屏、投屏或者專注閱讀時讓對話區更乾淨,通常只有改源碼這一條路,改完還得跟着上游更新維護。
dsh-layout-control 提供了另一種做法:以插件形式往頁面裏注入一枚可拖動的「佈局」浮層,隱藏會話裝飾、把輸入欄停靠到四角、按類型過濾對話內容,全程不改 DSH 源碼。下面介紹它的功能、安裝方法和使用細節。
這是什麼¶
dsh-layout-control 是面向 DSH Web 端的獨立佈局插件,作者 LzqSuShi,代碼以 MIT 許可證發佈。它只使用 DSH 的公開服務(ctx.layout、ctx.slots)和穩定 DOM 屬性([data-slot]、[data-composer-seat]、[data-chat-flow-kind] 等),不碰 CSS Module 哈希類名,因此不依賴對 DSH 內部實現的猜測。
它能解決三類問題:
- 隱藏界面裝飾(頂欄、狀態欄、任務條、其它浮層);
- 把輸入欄停靠到屏幕四角,騰出中間的對話區;
- 按類型過濾對話內容(比如只看回覆正文、隱藏思考過程)。
核心功能¶
- 入口:右下角圓形按鈕打開「佈局」面板,可拖動;拖到屏幕邊緣會貼邊收進一半,鼠標移上去再展開。
- 佈局快照:默認 / 專注 / 沉浸三檔。
- 側邊欄:展開 / 圖標欄 / 隱藏,通過
ctx.layout控制。 - 輸入欄:完整 / 緊湊 / 不顯示三檔;停靠位置是四個角——左上 / 右上 / 左下 / 右下。
- 詳情欄:開關;「清空內容」會派發
dsh-details-clear事件。 - 會話裝飾:可分別隱藏頂欄、狀態欄、任務條、其它浮層。
- 對話內容過濾:全部 AI 輸出、用戶消息、思考、工具調用、任務清單、回覆正文,可按需隱藏。
- 寬度調節:停靠後內側有 8px 拖動手柄,寬度可在 280–560px 之間調整。
四個角停靠後,對話仍在中間縱向滾動,輸入卡片連同待辦一起貼在選中的角上;同側空出來的位置放可摺疊的會話摘要卡,點卡片標題即可摺疊 / 展開。
圓形入口的位置記在本次標籤頁的 sessionStorage,刷新標籤頁前不會跑回右下角。
安裝與啓用¶
先裝插件,再重啓 dsh web,最後在瀏覽器裏按 Ctrl+F5 強刷頁面。
GitHub 安裝(推薦):
dsh plugin --profile web add github:LzqSuShi/dsh-layout-control
本地開發安裝:
dsh plugin --profile web add "link:C:\liZhiQi\dsh-layout-control"
npm 發佈之後,也可以直接按包名安裝:
dsh plugin --profile web add dsh-layout-control
本包已提交預構建的 lib/,git 安裝不需要 prepare 構建許可。包內的 package.json 聲明瞭 dsh.bundle.patch(可被 dsh plugin add 安裝)和 dsh.client(Web 端注入 layout),所以上面一條命令就能完成安裝。
卸載時執行:
dsh plugin --profile web remove dsh-layout-control
重啓 dsh web 生效。
典型用法¶
經過上面的步驟,頁面右下角會出現圓形按鈕。日常操作如下:
- 打開面板:單擊圓形入口;再次單擊或按 ESC 關閉。
- 切換快照:在「佈局」面板裏選默認 / 專注 / 沉浸,一鍵切到不同佈局檔位。
- 停靠輸入欄:選「輸入欄」的左上 / 右上 / 左下 / 右下,把輸入單元停到對應角;拖內側 8px 手柄改寬度(280–560px)。
- 清理畫面:勾選隱藏頂欄、狀態欄、任務條;在「對話內容」裏按需隱藏思考、工具調用、任務清單等節點,只留回覆正文。
- 收起摘要:停靠後同側的會話摘要卡,點標題可摺疊。
實現方式¶
插件客戶端模塊通過 window.__ModuleLoader__.load() 註冊,導出 { isPlugin, inject: ["layout", "slots"], apply }。apply(ctx) 向 shell.overlay 註冊一枚 React 浮層(id:dsh-layout-control),根節點帶 data-layout-control 屬性,所以「隱藏裝飾層」不會把本按鈕一起藏掉。
隱藏、停靠、過濾全部落在 document.documentElement 的屬性加一張樣式表上,選擇器只打公開錨點。左右停靠時 [data-conversation-scroll] 仍是縱向滾動容器,對話列 height: max-content,輸入座 position: sticky 且高度等於滾動口可視高度。拖動手柄用 CSS ::before 繪製,寬度調整走 window 指針事件,不往 React 樹裏插節點。
適用場景與注意¶
適合需要錄屏、投屏演示、截圖歸檔,或者想在海量對話裏按類型篩選內容的 DSH 使用者。裝好即用,不污染 DSH 源碼,卸載乾淨。
使用前有幾點需要知道:
- 隱藏只是
display: none,對應的 React 樹仍掛在頁面上,並不省運行時開銷。 - 「清空詳情內容」有前提:依賴頁面裏已有的清空控件,或監聽
dsh-details-clear的 DSH 版本;原版可能清不掉 Inspect 選中項。 - 停靠後模型選擇不變:Model / Effort 仍在輸入卡片工具條裏,插件不改 DSH 就無法把它移到卡片上方。
- 狀態大多不持久化:除圓形入口位置記在
sessionStorage外,其它查看狀態刷新後回到默認快照;其它浮層仍可能與停靠後的輸入欄重疊。
另外提醒一點:插件以當前 dsh 進程的權限運行,安裝任何第三方插件前,建議先查看源碼和許可證再決定。本插件代碼爲 MIT 許可證,與 DeepSeek 無官方關聯。
結尾¶
dsh-layout-control 把「調佈局」從改源碼變成點幾次面板:隱藏裝飾、停靠輸入欄、過濾對話節點,裝上就能用,卸載也不留痕跡。項目地址與社區目錄頁如下:
- GitHub:https://github.com/LzqSuShi/dsh-layout-control
- 社區目錄頁:https://www.skillhub.cn/plugins/LzqSuShi/dsh-layout-control