dsh-mosaic:爲 DeepSeek Harness 提供輕量可視化回答

前言

在 DeepSeek Harness(DSH)裏,模型輸出多半是 Markdown 與純文本。指標對比、流程分支、表格排序這類信息,讀者往往要在長段文字裏自己「腦補結構」。社區裏也有各類增強方案;Mosaic 的定位是可選增強:需要時用緊湊的 React 組件呈現,不需要時純文字回答同樣有效,不必爲了用插件而強行加 UI。

下面介紹維護者 imwhatiam 發佈的 dsh-mosaic(分類:模型推理)。它在 SkillHub 目錄頁可見,GitHub 倉庫爲 imwhatiam/dsh-mosaic。插件 npm 包名 dsh-mosaic,當前版本 1.1.3,許可證 MIT。

這是什麼

Mosaic 是一個輕量的 DSH 可視化回答插件(README 簡介:Lightweight visual answers for DeepSeek Harness)。它把回答從純文本升級爲緊湊的原生 React 組件,並保留受控的沙箱 HTML/JS「逃生艙」(widget),用於固定組件難以覆蓋的遊戲、模擬器、音頻、地圖或自定義畫布。

插件刻意不追求「什麼都能畫」:主包不帶 ECharts / Three.js;部分 diagram 用官方 Mermaid 發行包懶加載,其餘示意圖由插件自行排布。普通文件與 Office 文檔只給鏈接,不在聊天裏硬解。

兩個輸出通道

模型可以通過兩種方式讓界面出現 Mosaic 視圖。

正文圍欄 dsh-view

在 assistant 回答裏寫 JSON,圍欄標記必須正好是 dsh-view(誤用 json 時客戶端有一層兼容,但不要依賴)。

    {"title":"Ops snapshot","items":[
      {"type":"stat","label":"Uptime","value":"99.96%","delta":"+0.02%"},
      {"type":"callout","content":"No incidents in the last 7 days."}
    ]}
圍欄渲染依賴掃描 assistant 行內的代碼塊;Harness 0.2.1 起 Shiki 渲染的 `<code>` 沒有 `language-*` 類,識別路徑是「位於 assistant 行內且正文能解析成合法視圖 spec」。

## 工具 `render_view` / `validate_view`

適合獨立面板、表格、圖表或小組件。`validate_view` 可在發出前校驗;兩者除報錯外還可返回 `warnings=` 規模提示(詳見倉庫 SKILL.md)。

# 組件與示意圖

組件目錄保持精簡,字段與校驗來自同一份定義(完整字段見倉庫 [`SKILL.md`](https://github.com/imwhatiam/dsh-mosaic/blob/main/SKILL.md))。

- 佈局:`text` `row` `col` `grid` `card` `divider` `spacer`
- 展示:`stat` `badge` `progress` `list` `table` `keyvalue` `steps` `callout` `code` `diff` `chart` `diagram`
- 媒體:`image` `video` `audio` `pdf` `link`
- 交互:`button` `input` `select` `slider` `tabs` `quiz`
- 高級:`widget`

`diagram` 支持 13 種 `kind`(如 `flowchart`、`sequence`、`timeline`、`tree`、`gantt`、`mindmap` 等)。`flowchart`、`sequence`、`state`、`er`、`gantt`、`mindmap` 走 Mermaid 懶加載(約 5.5 MB 原始包,gzip 約 1.3 MB);`timeline`、`layers`、`quadrant` 等由插件排布。每張 diagram 卡片右上角提供 `svg` / `png` / `drawio` 導出。

界面只有一套輕卡片風格,顏色取自主題令牌 `--dsw-alias-*`,隨 DSH 淺色/深色與字號變化,無獨立主題切換器。

# 模型 Prompt 與設置頁

插件向模型貢獻一段說明可視化能力的 Prompt,默認來自包內文本。在 DSH 裏打開 **Settings → Mosaic** 可編輯當前生效內容,保存後從下一輪模型請求開始生效;可「恢復默認」。生效順序爲:你在頁面保存的內容 > 配置文件 `config.prompt` > 內置文本。也可在 `cordis.patch.yml` 的 mosaic 行設置 `config.prompt`(留空、類型不對或超過 128 KB 會回落)。覆蓋內容落在 Host 數據目錄的 `mosaic/prompt.json`,讀寫僅接受同源請求。

# 本地優先與沙箱 widget

表格排序/篩選/導出、tabs、quiz、slider 等默認在瀏覽器內完成。`button` 的 `local` 支持 `reset`、`copy`、`open`、`fullscreen`;只有聲明 `action` 的組件會把用戶動作發回模型。狀態按「會話 + 槽位 + 內容指紋」寫入 `localStorage`,最多 100 塊。

`widget.code` 渲染在 sandbox iframe 中(`allow-scripts allow-forms allow-popups`,無 `allow-same-origin`),CSP 禁止外網腳本;需庫時內聯進 widget。`window.mosaic.action()` 僅在真實用戶手勢後回模型(除非節點聲明 `actions: "programmatic"`),會話級限額爲每分鐘 10 次、單次 payload 16 KB(UTF-8 字節)。

# 安裝與啓用

在 DSH Plugin Manager 中安裝,或使用 README 給出的命令行:
```bash
# 發佈到 npm 後(普通 dsh web profile)
dsh plugin --profile web add dsh-mosaic

# 本地開發目錄
dsh plugin --profile desktop add link:/absolute/path/to/dsh-mosaic

安裝後重啓或刷新 DSH Web,新會話即可使用。bundle patch 只插入本插件一行,不會關閉或覆蓋其他插件。

兼容性(摘自 README):npm 版本獨立於 Harness;package.json 聲明 engines.dsh 爲 >=0.2.1-rc.1 <0.3.0-0。插件 1.1.3 在 Harness 0.2.1-rc.5 上實測通過。Node 要求 >=24。

日誌與排查

運行情況寫入 JSONL:

# 未設置 DSH_HOME 時路徑爲 ~/.dsh/logs/dsh-mosaic/YYYY-MM-DD.jsonl
$DSH_HOME/logs/dsh-mosaic/YYYY-MM-DD.jsonl

默認級別 info;可在 mosaic 配置行加 config.logLevel: debug。日誌不記錄 Prompt 正文與組件 JSON 全文。排查示例:

grep -h '"level":"error"' "$DSH_HOME"/logs/dsh-mosaic/*.jsonl

適用場景與注意

適合誰:希望在 DSH 對話裏用 stat、表格、步驟、示意圖表達結構化答案,又希望 bundle 相對輕、交互儘量本地完成的開發者與使用者。

使用前請知悉:

  • DSH 生態理念是「一切皆插件」;SkillHub 目錄 爲社區站點,與 DeepSeek / 幻方無官方從屬關係。
  • 插件以當前 DSH 進程權限運行;安裝前應自行查看 GitHub 源碼 與 MIT 許可證,確認符合你的安全與合規要求。
  • 自有路由(如 Prompt 編輯、POST /dsh-mosaic/log)要求 Host 爲本機權威(loopback 或 config.trustedHosts),並校驗同源,避免 DNS rebinding 場景誤配。
  • 若同時安裝其他圍欄類插件,可能對同一段圍欄各渲染一套,可在 profile 中按需關閉其一。
  • Harness 綁到非 loopback 地址時,需把主機名寫入 config.trustedHosts,否則 Mosaic 自有路由會拒絕請求。

結尾

dsh-mosaic 把「可選的可視化回答」收進一套主題一致的組件體系,並用 dsh-view 圍欄與 render_view 工具兩條通道接入模型;複雜交互交給沙箱 widget,重資源 diagram 按需懶加載。需要細節時以倉庫 README、SKILL.md 與 CHANGELOG 爲準。

  • 目錄頁:https://www.skillhub.cn/plugins/imwhatiam/dsh-mosaic
  • GitHub:https://github.com/imwhatiam/dsh-mosaic
羽毛球分组比赛记分
小程序二维码

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

小夜