dsh-session-cards 插件介紹:把 DSH 會話鋪成卡片桌布

前言

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,插件按以下順序查找:

  1. 環境變量 DSH_CARDS_ELECTRON 指向的可執行文件
  2. macOS:~/.dsh/electron/Electron.app/Contents/MacOS/Electron
  3. Windows / Linux:同名目錄下的對應可執行文件

找不到時彈出會返回 NO_ELECTRON,卡片桌布本身不受影響。

典型用法

  1. 打開任意會話,點擊畫布頂部頁籤 卡片桌布。
  2. 點 + 當前會話 把當前會話加進桌布(上限 12 張)。
  3. 從左側會話列表把會話拖進畫布也可以加卡。
  4. 切換 網格 / 宮格 / 自由 換佈局;自動排列 按更新時間/運行中優先重排。
  5. 懸停卡片:右上出現操作按鈕,底部浮出輸入條,可在卡片內直接發消息。
  6. 點 ⧉ 彈出原生窗口;在浮窗裏點「回到畫布」,或直接把窗口拖回主窗口,即可收回。

數據、隱私與降級

插件的數據落點如下表:

數據 位置
桌布佈局(卡片、佈局、跨度/矩形、最大化) 宿主 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
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜