dsh-plugin-live-diff:DSH 文件編輯的流式 Diff 與磨砂玻璃背景

前言

在 DeepSeek Harness(DSH)裏讓模型改文件時,宿主會一邊接收流式工具調用、一邊把 argsRaw 拼起來。默認對話卡片卻要在 JSON.parse 成功之後才能渲染 diff,流式過程中參數往往是截斷的 JSON,於是卡片會一直空白,直到調用結束才一次性出現變更。

如果你希望在模型還在輸出 edit / write 時就能看到逐字增長的 diff,並可選地把同一條流畫在整個應用背後做磨砂玻璃效果,維護者 phoenixyun 的客戶端插件 dsh-plugin-live-diff(當前包版本 0.2.1,MIT)針對的就是這個缺口。它只改渲染層,不寫你的文件,也不動其他包。

這是什麼

包自帶 cordis.patch.yml 並聲明 dsh.bundle.patch,安裝後一步掛載,無需手寫 patch 行或手動 junction(舊版手裝方式需先清理,否則會加載兩次)。

它解決什麼問題

DSH 已有 diff 卡片,且宿主會用 argsRaw: base.argsRaw + chunk.argumentsDelta 累積流式參數。客戶端 UI 在解析時若遇到未完成 JSON 會直接失敗:

// dsh-client-ui-tool
value = JSON.parse(call.argsRaw);          // throws on a truncated document
if (typeof oldText !== "string" || typeof newText !== "string") return null;

本插件提供對半到達參數字符串的容錯讀取器,並把結果放到可讀的界面上;自 0.2.0 起,同一條流還可作爲全窗磨砂玻璃背景繪製。

核心功能

流式 Diff 展示

  1. 浮動面板 Live Diffs:字符到達時原地修補 diff;左緣可拖寬度,刷新後記憶。
  2. 對話區卡片:對 edit / write 使用 DSH 自帶的 DiffBlock,與殼層 diff 卡片一致;通過 keyed 註冊替換內置的 FileMutationRow(升級 DSH 若改動 tool 鍵或 toolview 契約,可能表現爲空面板而非報錯)。
  3. 容錯 JSON 讀取:未閉合的字符串字段返回可用但不完整的結果,而不是 null。
  4. 流式語法高亮:支持 Python、JS/TS、JSON、YAML、shell、Markdown 等語言配置。
  5. 滾動與 DOM:流式時盯住最新行;編輯結束後面板不立刻清空;已完成編輯按增量 patch DOM,避免每輪輪詢重播淡入。

全窗磨砂玻璃背景(0.2.0+)

同一份 diff 流畫在應用背後。大不透明區域按視口面積與計算背景測量(不靠類名匹配):覆蓋 ≥85% 窗口的表面被清空以便透出背景,不透明面板 ≥0.1% 變爲磨砂玻璃;祖先已玻璃化的嵌套表面會跳過,避免雙層發灰。

  • 支持 液態玻璃(backdrop-filter: url(#dshld-lg-lens) 折射)或退化爲普通模糊。
  • 指針高光、默認白色前景(可調透明度)等可在調諧面板中改。
  • 標題欄保持殼層原樣;樣式表從磁盤 serve,瀏覽器約每 1.5 s 重拉,style.css 改動約 1 秒內生效,無需重啓或重構建。

右下角圓鈕打開 外觀調諧(中文,9 個滑條 + 2 個開關),取值寫入 localStorage 鍵 dshld.tuner.v2;重置恢復默認。

Windows 桌面標題欄(可選樣式)

在標記了 data-windows-titlebar 的 Windows 桌面應用中,插件用純 CSS 將會話頭整體上移到原生標題欄保留帶,與側欄、原生最小化/關閉按鈕留白配合;全屏與普通瀏覽器頁面不啓用此規則。

逃生與調試

  • 在 serve 的 style.css 中加入 /* dshld-off */ 可即時關閉整套背景效果。
  • URL 加 ?dshld-demo=1 可播放合成、持續增長的 diff,便於調樣式。
  • 控制台:window.__dshldDebug.state() / .probe() / .scan() / .demo()。

演示視頻見 README 中的 Bilibili 26 秒 Demo。

環境要求

README 寫明在 DSH 0.1.5-rc.1、桌面端 0.2.1-rc.5(Windows,cordis 4.0.2)上構建驗證。package.json 中 engines.dsh 爲 >=0.1.5-rc.1,peerDependencies 含 @deepseek-ai/cordis ^4.0.2。

插件通過 DSH 內部客戶端面(ctx.sessions、ctx.slots、ctx.webServer 等)工作,無穩定公開擴展 API;換 DSH 構建後建議查看診斷信息。

安裝與啓用

插件市場(推薦):打開 Settings → Plugins → Plugin Market(設置 → 插件 → 插件市場),搜索 Live Diffs 或 dsh-plugin-live-diff 安裝。多數客戶端插件刷新頁面即可;若市場提示,需一鍵重啓進程。

命令行(dsh web 或自定義 profile):

dsh plugin --profile <profile> add github:phoenixyun/dsh-plugin-live-diff

DSH Desktop:使用應用內 Settings → Plugins;桌面端自有插件管理器與 profile,CLI 裝到 web profile 不會作用到桌面端。

新裝的主機包需在啓動時被看見,安裝後請重啓;插件內容支持 patchReload: live,但 client bundle 變更仍需重啓並硬刷新(Ctrl+Shift+R)。

典型用法

  1. 安裝並重啓(或按市場指引刷新 / 重啓)。
  2. 在 DSH 會話中讓模型對文件執行 edit 或 write。
  3. 觀察右側或浮動的 Live Diffs 面板隨流式增長;對話區對應工具卡片亦以 DiffBlock 展示。
  4. 需要調背景時:點右下角調諧鈕,或編輯插件目錄下由宿主 serve 的 style.css(約 1 秒生效)。
  5. 面板空白時:看面板底部診斷,或查主機日誌(默認 …/dsh-plugin-live-diff/diag.log,可用環境變量 DSH_LIVE_DIFF_LOG 覆蓋);亦可訪問宿主路由 /live-diff-diag。

開發者在倉庫根目錄可運行:

npm test

README 說明會跑六套測試並各打印一行,全部 exit 0。

適用場景與注意

適合誰:經常在 DSH 裏看模型改代碼、希望流式過程可見、或想用 diff 流做沉浸式背景的開發者。

務必知曉:

  • 插件在當前 DSH 進程權限下運行,安裝前請閱讀 源碼 與 MIT 許可證,自行判斷信任邊界。
  • 僅替換 UI 渲染,不寫入工作區文件。
  • 依賴未文檔化的內部鉤子;DSH 大版本升級後先試用並看診斷。
  • 社區目錄 SkillHub 爲獨立站點,與 DeepSeek / 幻方無官方從屬關係;生態上 DSH 傾向「一切皆插件」,本插件可從市場或上述命令安裝。

結尾

dsh-plugin-live-diff 補上 DSH 流式 edit / write 的容錯 diff 閱讀器,並把同一流延伸到浮動面板、對話卡片與可選的全窗磨砂背景;對跟模型一起「邊寫邊看」改文件的場景,能減少等到工具調用結束纔看到 diff 的空窗期。

羽毛球分组比赛记分
小程序二维码

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

小夜