dsh-plugin-table-zoom:DSH 聊天表格一鍵彈出可滾動浮窗

前言

在 DSH(DeepSeek Harness)的 Web GUI 裏,模型輸出的 markdown 表格經常很長或很寬:行數多的表格要在對話流裏上下滾動才能看全,超寬的表格要左右拖動才能看到右側列。dsh 從 0.1.1-rc.2 起爲 4 列以上的寬表加了 md-table-wide 分支,把表格擴展到內容列兩側留白,但默認 overflow-x:hidden、只在 hover 時出現滾動條,閱讀體驗仍然受限。

dsh-plugin-table-zoom 針對的就是這個問題:在長表格旁自動注入一個「⛶ 浮窗查看」按鈕,點擊後彈出獨立可滾動的浮窗完整展示表格,並支持一鍵複製爲 Markdown。DSH 的理念是「一切皆插件」,這類 Web GUI 增強正是通過 bundle 機制掛進 profile 實現的。下面介紹它的功能、安裝方式和工作原理。

這是什麼

dsh-plugin-table-zoom 是 DeepSeek Harness (dsh) Web GUI 的聊天表格浮窗插件,由 Pasumao 維護,MIT 協議,當前版本 0.3.4。定位是純前端 DOM 增強:不改核心包、不註冊工具、無服務端邏輯、零運行時依賴。

它解決的問題很具體:聊天裏行數多的長表和橫向溢出的寬表在對話流裏一次看不完。插件把這些表格變成可以獨立滾動、縮放、移動、複製的浮窗,聊天本身不受影響。

核心功能

浮窗查看與複製

  • 長表判定:≥ 9 行(含表頭),或橫向溢出超過 2px 的表格,下方自動出現右對齊的「⛶ 浮窗查看」按鈕;短表不打擾。
  • 點擊按鈕彈出浮窗:標題顯示「表格 · N 行 × M 列」,正文橫豎均可滾動;關閉按鈕、Esc、點擊遮罩均可關閉,打開期間鎖定聊天頁滾動。
  • 浮窗頭部的「複製爲 Markdown」按鈕一鍵複製整表,單元格內聯換行摺疊、管道符轉義。
  • 浮窗裏展示的是原表格的克隆,聊天裏的表格保持不變,也不會被重複增強。

尺寸、位置與縮放

  • 右下角手柄拖拽改尺寸,最小 320×200,最大到視口留白。
  • 每次打開自適應:寬度按表格內容決定(窄表不撐滿、超級大表鋪滿視口可用寬度,下限 320),位置居中,縮放 100%。插件不記憶任何佈局,關掉再開即回到自適應狀態。
  • 按住標題欄可把浮窗拖到任意位置,自動限制在頁面內;位置隻影響當次打開。
  • Ctrl+滾輪縮放表格字體,範圍 60%–250%,步進 10%,標題欄即時顯示百分比;縮放不記憶,每次打開回到 100%。

閱讀與選擇

  • 普通左鍵在表格(含放大後)裏拖動即可框選文字,不會被平移劫持。
  • 表格超寬/超高時,按住空格再拖動正文可左右/上下平移;grab 光標只在按住空格時出現,觸屏走原生滾動。
  • 滾動條加深加粗,淺色主題下也能看清。
  • 列寬上限與聊天內一致(min(30vw, 320px)),超寬列自動換行收縮。

兼容性處理

  • 針對 dsh 0.1.1-rc.2 起的 md-table-wide 寬表分支,插件注入一條覆蓋規則,把寬表拉回內容列寬度並常駐橫向滾動條,恢復舊版「超寬在會話列內滾動查看」的體驗;舊版 dsh 沒有該類名,規則不命中,行爲不變。
  • 只認 tableScroll 容器內的表格,跳過浮窗自身與 image-tools lightbox 內的表格,不影響其他插件。
  • 依賴瀏覽器的 MutationObserver / requestAnimationFrame,無 DOM 環境自動禁用。

安裝與啓用

本插件是純客戶端插件,需作爲 bundle 掛載進 dsh 的 Web profile(與 dsh-notify / dsh-plugin-image-tools 同款機制)。

1、在 profile 目錄(例如 ~/.dsh/profiles/web)安裝依賴:

npm install dsh-plugin-table-zoom
# 或從 GitHub 直裝
npm install github:Pasumao/dsh-plugin-table-zoom

2、在 profile 的 package.jsondsh.profile.bundles 里加入該插件:

"dsh": {
  "profile": {
    "bundles": [
      /* ...已有的 bundle... */,
      "dsh-plugin-table-zoom"
    ]
  }
}

3、在 profile 目錄執行 pnpm install(或 npm install);

4、重啓 dsh web(launcher 重新拉起),新插件纔會進入瀏覽器 bundle。

無需配置

安裝即用,沒有配置項:

  • 不讀取環境變量,不需要 API Key / token,不寫配置文件;
  • 長表判定閾值(≥ 9 行 / 橫向溢出 2px)爲內置默認值;
  • 樣式跟隨 DSH 主題 CSS 變量自適應,不引入獨立主題配置。

依賴方面,package.json 聲明 peerDependencies@deepseek-ai/cordis ^4.0.1engines 要求 node >=18。

本地開發與調試

源碼安裝:

git clone https://github.com/Pasumao/dsh-plugin-table-zoom.git
cd dsh-plugin-table-zoom
npm install

若以本地目錄調試,可用 link: 依賴替換安裝步驟的第 1 步:

"dsh-plugin-table-zoom": "link:D:/path/to/dsh-plugin-table-zoom"

開發命令:

npm run selfcheck    # 純函數離線測試(識別/長表判定/Markdown 序列化)
npm run smoke        # selfcheck + 假 DOM 端到端冒煙(按鈕注入/浮窗開合/複製)
npm run pack         # 打包

工作原理

  • 服務端半邊(lib/index.js)是空實現。插件以「自帶 bundle patch」方式掛載進 profile,客戶端半邊由 dsh.client 聲明經 /plugins/dsh-plugin-table-zoom/client.js 送達瀏覽器。
  • 客戶端半邊(lib/client.js)用 MutationObserver 觀察 document.body,rAF 合幀掃描 markdown 表格(核心渲染器把表格包在類名含 tableScroll 的容器裏),對長表在容器後注入按鈕行。
  • 浮窗複用 image-tools 的 lightbox 模式:純 DOM 單節點變更,不插入/移除 React 管理的結構,重渲染時安全。

適用場景與注意

  • 適合經常在 dsh web 裏讓模型輸出對比表、參數表、長清單的用戶;偶爾纔出現短表的會話基本感知不到插件存在。
  • 插件以當前 dsh 進程的權限運行,安裝前建議先檢查源碼與許可證(MIT)。
  • 安裝後需重啓 dsh web 才生效。
  • 按倉庫聲明,代碼與文檔由 AI 輔助生成(DeepSeek Harness),均經人工審查與實機驗證(npm run smoke)。
  • 同系列已發佈插件可搭配使用:dsh-notify、dsh-plugin-choice-refresh、dsh-plugin-dev-kb、dsh-plugin-image-tools、dsh-plugin-workbench、dsh-plugin-windows-guard。

結尾

dsh-plugin-table-zoom 用一個按鈕解決了聊天表格「看不完、複製難」的問題:長表彈出浮窗獨立滾動,橫豎都能看全,還能縮放、平移、一鍵複製爲 Markdown,且不改核心包、無需配置。如果你常在 DSH Web GUI 裏讀表格,值得裝一個試試。

  • GitHub 倉庫:https://github.com/Pasumao/dsh-plugin-table-zoom
  • 社區插件目錄頁:https://www.skillhub.cn/plugins/Pasumao/dsh-plugin-table-zoom (目錄爲獨立社區站點,與 DeepSeek / 幻方無官方從屬關係;該地址來自插件收錄線索,倉庫資料中未出現,供參考)
羽毛球分组比赛记分
小程序二维码

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

小夜