前言¶
DSH(DeepSeek Harness)的理念是「一切皆插件」,但默認的會話視圖偏列表式,同時盯多條會話時來回切換、翻找某次工具調用結果都比較費勁。下面介紹的客戶端插件 tom143tc/dsh-session-card(倉庫內標題寫作 dsh-session-cards,維護者 tom143tc)把會話做成一張張卡片,鋪在會話詳情畫布上,支持拖動、縮放、最小化、最大化,並可把任意一張卡片彈出成原生獨立窗口。它只依賴 DSH 的公開契約,按能力分級降級,不白屏、不拋錯。
這是什麼¶
一句話定位:在會話畫布上開一塊卡片桌布,把多個會話並排鋪開,用於多會話並行查看與快速切換。插件當前版本 0.4.3,要求宿主 DSH >= 0.2.1-rc.2,許可證 MIT,已在 macOS + DSH NEXT Desktop(0.2.2)與 dsh web(0.2.1-rc.2)上實測。
核心功能¶
三種佈局¶
| 佈局 | 行爲 |
|---|---|
| 網格 | 卡片佔 1–4 × 1–4 格;拖到空位落位,拖到已佔格交換;拖邊緣/角連續縮放,鬆手吸附到格 |
| 宮格 | 均分鋪滿:≤9 張 3×3,10–12 張 3×4;窄窗(<720px)退 2 列 |
| 自由 | 絕對定位,卡片可任意移動、疊放;拖四邊/四角縮放(左/上邊緣向外生長) |
卡片內容¶
- 渲染真實會話記錄:用戶氣泡、助手正文(粗體、行內代碼),工具調用行只在卡片最大化時顯示。
- 每張卡片顯示標題、狀態色點、工作區、相對時間;對話條數隨卡片尺寸變化。
- 已過濾 DSH 注入的上下文塊(runtime context、技能目錄、壓縮摘要等),不會把注入文本當成對話展示。
卡片內發消息¶
- 默認只顯示最後一行輸入框;鼠標移入卡片才浮出輸入條,
Enter發送、Shift+Enter換行,中文輸入法選詞不誤發。 - 發送走插件 host 路由調用宿主的
sessionController.prompt,不切換當前會話;成功後清空草稿並刷新該卡片的對話。
卡片操作¶
| 按鈕 | 作用 |
|---|---|
− |
最小化到畫布底部 dock,點擊還原 |
⧉ |
彈出爲原生獨立窗口 |
⤢ / ⤡ |
最大化鋪滿畫布 / 還原(最大化時 Esc 也可退出) |
✕ |
從桌布移除(不刪除會話) |
原生浮窗¶
- 插件自建 Electron 管家進程,只通過公開
webServer/connection通信,不碰 desktop 私有 API。 - 原生標題欄,可拖動、可縮放;默認 520×420,多開時按 +28px 級聯。
- 記住每個窗口的位置和尺寸;拖回主窗口自動收回;同一會話去重;最多 8 個窗口。
- 默認不置頂,需要時點浮窗裏的「📌 置頂」。
主題¶
支持 light / dark / system 跟隨宿主;輸入條、按鈕、卡片文字都提供明暗兩套色值。
安裝與啓用¶
桌面端 / dsh web(GitHub)¶
安裝命令如下,兩條命令分別對應桌面 profile 與 web profile:
dsh plugin --profile desktop add github:tom143tc/dsh-session-card
# 或
dsh plugin --profile web add github:tom143tc/dsh-session-card
安裝後需要完全退出並重啓 DSH NEXT;使用 dsh web 的則重啓進程並刷新頁面。該路徑已在 dsh 0.2.1-rc.2 上實測通過(安裝 0.4.3),桌面端 0.2.2 直接運行同一份代碼。
本地開發安裝¶
從本地目錄安裝時使用如下命令,路徑必須是絕對路徑:
dsh plugin --profile desktop add file:/absolute/path/to/dsh-session-card
原生浮窗的前置條件¶
浮窗依賴本機可執行的 Electron,插件按以下順序查找:
- 環境變量
DSH_CARDS_ELECTRON指向的可執行文件 - macOS:
~/.dsh/electron/Electron.app/Contents/MacOS/Electron - Windows / Linux:同名目錄下的對應可執行文件
找不到時彈出會返回 NO_ELECTRON,卡片桌布本身不受影響。
典型用法¶
- 打開任意會話,點擊畫布頂部頁籤 卡片桌布。
- 點 + 當前會話 把當前會話加進桌布(上限 12 張)。
- 從左側會話列表把會話拖進畫布也可以加卡。
- 切換 網格 / 宮格 / 自由 換佈局;自動排列 按更新時間/運行中優先重排。
- 懸停卡片:右上出現操作按鈕,底部浮出輸入條,可在卡片內直接發消息。
- 點
⧉彈出原生窗口;在浮窗裏點「回到畫布」,或直接把窗口拖回主窗口,即可收回。
數據、隱私與降級¶
插件的數據落點如下表:
| 數據 | 位置 |
|---|---|
| 桌布佈局(卡片、佈局、跨度/矩形、最大化) | 宿主 localStorage 的 dsh-session-cards/board/v1 |
| 上次手動調整的卡片尺寸 | localStorage 的 dsh-session-cards/default-span/v1 |
| 浮窗管家信息 / 窗口位置 / 錯誤日誌 | ~/.dsh/dsh-session-cards/(JSON 權限 0600) |
會話內容爲只讀(GET /plugins/dsh-session-cards/transcript),不寫入宿主存儲;發消息只經過宿主公開的 sessionController.prompt。卡片上限 12 是數據層硬限制。
兼容降級分五級:
| 級別 | 觸發條件 | 表現 |
|---|---|---|
| L0 | conversation.view 可用 |
卡片桌布頁籤(完整功能) |
| L1 | 頁籤不可用、shell.overlay 可用 |
右側 560px 降級浮層 |
| L2 | 前兩者不可用、conversation.session.header.actions 可用 |
會話頭部按鈕打開浮層 |
| L3 | 會話目錄不可讀 | 只讀模式,禁用拖拽/發送 |
| L4 | 以上都不可用 | 不註冊任何 UI,寫 compat-report.json 並在設置頁說明原因 |
已知限制¶
- 卡片上限 12 張;宮格在窄窗下會退成 2 列。
- 自由佈局允許卡片重疊(這是它的用途,不是 bug)。
- 輪次/Token 摘要只在宿主提供
projectionValues.sessionStats時顯示,多數會話沒有。 - 原生浮窗只在 macOS 實測,Windows / Linux 未驗證。
- 工具調用行只在最大化時顯示。
適用場景與注意¶
適合需要同時跟蹤多條會話、在畫布上並排查看和切換的場景,尤其是習慣了 DSH 會話畫布、希望擴展成卡片式工作區的用戶。
兩點需要注意:一是插件以當前 dsh 進程的權限運行,安裝前應檢查源碼與許可證(MIT);二是安裝路徑依賴 dsh plugin 命令和網絡可達的 GitHub 倉庫。社區目錄 site 是獨立站點,與 DeepSeek / 幻方無官方從屬關係,不等同於官方應用商店。
開發與自測¶
插件源碼分純函數層與瀏覽器側:
src/lib/ 純函數:佈局計算(layout)、桌布模型(board)、能力探測(caps)
src/client/ 瀏覽器側:ui.js(渲染與交互)、apply.js(探測與掛載)
index.js host 側:prompt / transcript / popout 路由
popout/ Electron 管家(原生窗口)
scripts/ build-client.mjs
test/ node:test 用例
本地自測與打包命令如下:
node --test test/ # 純函數測試(layout / board / caps)
node scripts/build-client.mjs # 把 src/lib + src/client 內聯成 client.js
npm pack --dry-run # 檢查發佈內容
結語¶
tom143tc/dsh-session-card 的價值在於把多會話查看從「來回切換」變成「一桌卡片」:三種佈局覆蓋規整擺放與自由排布,卡片內可讀可發,必要時還能彈出原生窗口。當前版本 0.4.3(相對 0.4.2 僅改 engines.dsh,代碼未變),0.4.2 已用 LOCK.md + releases/0.4.2/SHA256SUMS 鎖定。更多信息見目錄頁與倉庫:
- 目錄頁:https://www.skillhub.cn/plugins/tom143tc/dsh-session-card
- GitHub:https://github.com/tom143tc/dsh-session-card