dsh-user-code-block:讓用戶消息裏的圍欄代碼塊像助手回覆一樣渲染

前言

在 DeepSeek Harness Desktop(DSH)裏,助手側消息走 Markdown 渲染,用戶自己發出的內容則走 UserText:純文本、white-space: pre-wrap。你在對話裏粘貼一段帶圍欄的代碼時,反引號往往原樣顯示,沒有邊框、沒有語言標籤、也沒有高亮。若你經常在用戶消息裏貼配置片段、命令或腳本,這種體驗會和助手回覆裏的代碼塊形成明顯反差。下面介紹社區插件 dsh-user-code-block(維護者 VictorKozachek,GitHub VictorKozachek/dsh-user-code-block),它只針對用戶消息中的圍欄塊做例外處理,其餘鏈接、@ 提及等仍按內置 UserText 行爲工作。

這是什麼

dsh-user-code-block 是掛載在 DSH 客戶端(ui-chat)上的插件:識別用戶消息裏的 fenced code block,爲其加上邊框、語言橫幅、語法高亮和複製按鈕;消息其餘部分保持純文本。運行時無第三方依賴,無需構建步驟。npm 包當前版本爲 0.4.0(MIT 許可證)。在 README 中,已在 DeepSeek Harness Desktop 0.2.1-rc.3 上驗證;0.1.x 同樣暴露文檔中的擴展點。任何掛載 ui-chat 的 DSH profile(desktop 或 web)均可使用。

核心功能

圍欄識別規則

插件同步匹配用戶文本,規則包括:

  • 三個及以上反引號或波浪線構成的圍欄;
  • 行首最多三個空格縮進(四個空格不再視爲圍欄);
  • info string 的第一個詞作爲語言標識,例如 ```python title=x 識別爲 python;
  • 四反引號圍欄可正確包裹內含三反引號的內容;
  • 未閉合的圍欄不當作代碼塊,避免漏寫結束符時誤把後續文字染成代碼。

單行反引號 `inline code` 不處理。

語法高亮

顏色來自 DSH 主題已發佈的 --shiki-token-* CSS 變量(@deepseek-ai/dsh-client-ui-theme 中的 shiki.css)。亮/暗主題通過 body[data-ds-dark-theme] 切換,插件無需自行探測主題。

高亮由內置小型 lexer 完成,不引入 shiki,也不 import DSH 禁止插件使用的 client primitives。README 列出的語言包括 Python、JavaScript/TypeScript、JSON、Bash、Go、Rust、Java、HTML/XML、SQL、CSS/SCSS 等;各語言着色的 token 類型(關鍵字、字符串、註釋、數字等)以倉庫表格爲準。

單色模式:圍欄語言爲 text、txt、plain、output、log、console、terminal、diff、md 時保留邊框與語言條,但不着色,適合終端輸出與日誌。其他未內置 lexer 的語言同樣以等寬無高亮文本展示,避免錯誤配色。

複製按鈕

代碼塊標題欄右側提供 Copy:寫入剪貼板的是原始源碼,不含高亮 markup。點擊後標籤約 1.5 秒恢復。若瀏覽器未授予 navigator.clipboard,按鈕不渲染。

擴展點

插件通過 ui-chat 文檔「Sent user text」所述機制接入:

  • ctx.uiConversation.userText.register({ id, order, match(text, from) }) 同步匹配;
  • conversation.user.text.node 槽位渲染,key 與 matcher 的 id 一致。

宿主側 lib/index.js 導出空的 apply(),僅用於在 profile 的 cordis 樹中顯示插件條目。

安裝與啓用

推薦從 npm 安裝到指定 profile(以 desktop 爲例):

dsh plugin --profile desktop add dsh-user-code-block

插件管理器會安裝包、寫入 profile 的 package.json 與 dsh.profile.bundles,下次啓動 DSH 後加載;僅刷新頁面不會重建客戶端模塊圖。

本地 checkout 也可用 CLI 指向路徑:

dsh plugin --profile desktop add /path/to/dsh-user-code-block

README 還說明從源碼運行 ./install.sh、手動編輯 package.json 與 node_modules 符號鏈接等方式;web profile 可通過 DSH_PROFILE_DIR="$HOME/.dsh/profiles/web" ./install.sh 切換目錄。卸載可用倉庫中的 ./uninstall.sh,或從 dsh.profile.bundles 移除包名並刪除對應 symlink。

典型用法

安裝並重啓 DSH 後,在用戶消息中發送帶圍欄的塊,例如:

```python
print("hi")
```

預期效果:該段以帶框、帶 python 語言條的高亮塊顯示,同一條消息裏的普通文字仍爲純文本。對 ```log 或 ```output 類圍欄,應看到邊框與標籤但無語法色。

驗證步驟與 README「Verification」一致:發一條含 fenced block 的消息,檢查框線、語言橫幅及非代碼部分是否仍爲 plaintext。

適用場景與注意

適合:經常在用戶消息裏粘貼多行代碼、配置或命令、又希望視覺與助手 Markdown 代碼塊一致的 DSH 桌面或 web 使用者。

注意:

  • 插件在 客戶端 運行,分類爲社區目錄中的「客戶端」插件;DSH 生態強調「一切皆插件」,SkillHub 目錄頁 爲社區站點,與 DeepSeek / 幻方無官方從屬關係。
  • 安裝前建議瀏覽 GitHub 源碼與 MIT 許可證;插件隨當前 DSH 進程與用戶 profile 加載,安裝來源應可審計。
  • peer 依賴 @deepseek-ai/cordis ^4.0.2;開發與測試需 Node.js 20+。

結尾

dsh-user-code-block 用單一例外補齊用戶消息裏圍欄代碼塊的展示缺口:高亮、複製、日誌類單色模式,且無運行時依賴。若你需要上述能力,可用官方推薦的 dsh plugin --profile desktop add dsh-user-code-block 安裝後重啓驗證。

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

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

小夜