deepseek-harness-tui:爲 DeepSeek Harness 提供終端原生聊天界面

前言

DeepSeek Harness(命令行工具是 dsh)是 DeepSeek 開源的智能體運行時,核心理念是「一切皆插件」:模型適配、工具、會話、沙箱,以及界面本身,都可以換成插件。官方入門路徑很直接,裝好 Node.js 之後執行 npx @deepseek-ai/dsh web,默認會起一套 Web UI。

這條路徑適合瀏覽器裏點選、看任務。但如果你長期待在 SSH、tmux 或純終端環境裏,打開瀏覽器並不是最順手的方式。社區因此做了若干終端界面(TUI)插件。本文介紹的是其中定位比較剋制的一個:deepseek-harness-tui。它不重寫 harness,只用 Ink(React 的終端渲染器)把現有會話畫到終端上。

需要先說清楚來源。插件由 gxinxing 維護,許可證是 MIT,目錄分類爲「界面增強」。社區插件目錄頁與 GitHub 倉庫在寫作時均顯示 7 個 star。目錄站點是獨立的社區索引,與 DeepSeek / 幻方沒有官方從屬關係;倉庫 README 也寫明這是獨立社區項目,與 DeepSeek、TokenDance 均無關聯。

這是什麼

一句話定位:deepseek-harness-tui 是掛在 dsh 上的終端聊天界面插件。準備好 TokenDance 的 API Key 和一份可用的 dsh 安裝,運行 dsh --profile tui,就能得到一個幾乎沒有邊框裝飾的終端對話界面。

倉庫 README 把它寫成「約 800 行 UI 的精簡插件,不是對 harness 的重實現」。package.json 也印證了這一點:它聲明瞭 dsh.bundle.patch,依賴 @deepseek-ai/dsh-agent@deepseek-ai/dsh-sessioninkreact 等包,版本徽章對準的是 dsh 0.1.0-rc.6。也就是說,模型調用、工具執行、會話持久化仍由 Harness 自己的服務負責,這個插件主要負責把 session/event 投影成終端畫面。

package.json"private": true,當前不是作爲公開 npm 包分發的。目錄頁給出的安裝入口是 GitHub 源,而不是 npm install 某個 scoped 包名。

核心功能

下面這些能力來自插件目錄頁與倉庫 README,兩邊描述一致。

1、對話流就是界面。 沒有額外的盒子和裝飾層。空會話時會顯示 DeepSeek 品牌 banner(ANSI Shadow logo、漸變配色);一旦開始對話,主體就是 transcript。當前模型和當前工作目錄放在底部較暗的 footer 裏。

2、工具調用收成 cell。 執行中顯示 ⠋ Running,結束後變成 ✓ • 1.2s(失敗爲 )。工具輸出合併進同一個 cell,顏色變暗,並按頭尾截斷(… +N lines),避免終端被原始日誌刷滿。

3、主題跟終端走。 通過 OSC 11 探測真實背景色,消息底色和行內代碼 chip 按背景混合:深色終端疊 12% 白,淺色終端疊 4% 黑,不寫死十六進制色值。調試時可以用環境變量強制背景:

DSH_TUI_BG=#ffffff

4、Thinking 可以摺疊。 ctrl + t 切換推理軌跡的展開與收起。任意時刻按 esc,會通過 agent.cancel({ kind: 'user' }) 中止當前回合。

5、Markdown 儘量保持原形。 標題仍帶 #,圍欄代碼塊保留圍欄,行內代碼有 chip 底色。中英文和 emoji 按字符寬度折行,gutter 對齊。

6、視口釘在底部。 最新內容始終可見。忙碌時顯示 braille spinner 和緊湊計時,例如 Working 5s

倉庫還附了 INTEGRATION-NOTES.md,記錄 session/event 如何映射到 UI、patch 語義以及和 dsh profile / bundle 的銜接。那是給要改事件橋的人看的,日常使用不必先讀完。

安裝與啓用

運行環境:Node.js ≥ 20,以及已安裝的 DeepSeek Harness CLI。插件目錄頁給出的安裝命令如下,在 DeepSeek Harness 終端中執行即可:

dsh plugin add github:gxinxing/deepseek-harness-tui

如需可復現安裝,按目錄頁說明固定 commit 哈希:

dsh plugin add github:gxinxing/deepseek-harness-tui#<commit>

<commit> 換成倉庫裏實際的提交哈希。不要憑空猜測。

倉庫 README 另外寫了一條面向本地開發的裝配路徑:先全局安裝 dsh,再 clone 源碼並用 pnpm 安裝依賴,最後把插件掛到名爲 tui 的 profile 上。

npm install -g @deepseek-ai/dsh        # harness(README 註明暫無 Homebrew tap)
git clone https://github.com/gxinxing/deepseek-harness-tui
cd deepseek-harness-tui && pnpm install

一次性寫入 tui profile:

dsh plugin --profile tui add @deepseek-ai/dsh-headless
dsh plugin --profile tui add /path/to/deepseek-harness-tui

第二條裏的路徑換成你本機 clone 下來的目錄。這條路徑會把包以本地 link: 的方式掛進 profile,適合要改 UI 源碼的人;只想試用的話,優先用目錄頁那條 github:gxinxing/deepseek-harness-tui

插件以當前 dsh 進程的權限運行,安裝時可能執行代碼。裝之前應檢查源代碼倉庫和許可證。

典型用法

按 README,啓動前需要 TokenDance 的 API Key。可以導出環境變量,或寫入 ~/.dsh/.credentials.yaml(權限 0600):

export TOKENDANCE_API_KEY=sk-...
dsh --profile tui

進入 TUI 之後:

  • ctrl + t:摺疊或展開 thinking
  • esc:中斷當前回合
  • /help:查看全部按鍵與命令

模型路由也寫在倉庫裏。profile 補丁 cordis.patch.ymlllm-deepseek 指到 TokenDance 網關:

llm-deepseek:
  apiKeyEnv: TOKENDANCE_API_KEY
  baseURL: https://tokendance.space/gateway/v1

README 說明 provider 註冊在 ~/.dsh/settings.yamlllm-pi-ai.providers.tokendance:OpenAI 兼容端點,thinkingFormat: deepseek,模型爲 deepseek-v4-flash(默認)和 deepseek-v4-pro。換模型可以改該列表,或在 profile patch 裏覆蓋 llm-deepseek.model

這裏有一個倉庫明確記錄的限制。TokenDance 在流式返回後續 tool-call 增量時,name / id 可能是空串;官方 @deepseek-ai/dsh-llm-deepseek 適配器若用空串覆蓋第一幀的 call id,Harness 會陷入 unknown tool "" 循環。README 給出了一次性地改全局安裝裏 node_modules/@deepseek-ai/dsh-llm-deepseek/lib/index.js 的守衛(把 !== void 0 改成對空串也拒絕),並註明該改動在升級 dsh 後會丟失,需要重新打。這不是插件本身的功能,而是當前網關與官方適配器組合下的已知問題;動手改 node_modules 前應對照倉庫 README 原文,也值得關注上游是否已經合入修復。

適用場景與注意事項

比較適合下面幾類用法:

  • 已經在用 dsh,希望 SSH / 本地終端裏直接對話,而不是再開 Web UI。
  • 想看一個儘量薄的 TUI 示例:界面用 Ink + React,agent 邏輯仍交給 Harness。
  • 能接受 TokenDance 這條模型路由,並準備好對應的 Key。

不那麼合適的情況也要說清楚:

  • 默認並不是「導出 DEEPSEEK_API_KEY 就能用官方 API」。當前 profile 把 llm-deepseek 指到 TokenDance。若你的環境不是這條網關,需要自己改 patch,不能假定開箱即連 DeepSeek 官方接口。
  • 社區目錄裏還有功能更完整的終端插件,例如同屬「界面增強」的 dsh-TUI(Claude Code 風格、npm 安裝)。deepseek-harness-tui 的取捨是薄和可讀,不是功能清單競賽。選哪一個取決於你要的是一層皮,還是一套帶會話工作流的完整 TUI。
  • 倉庫 package.jsonengines 要求 Node.js ≥ 20;README 徽章對準 dsh 0.1.0-rc.6。Harness 仍處於開發者預覽,插件 API 可能繼續變。
  • 插件以當前 dsh 進程權限運行。安裝社區插件前應閱讀源碼和 MIT 許可證,確認自己接受這一權限模型。

小結

deepseek-harness-tui 做的事情很集中:在不重寫 Harness 的前提下,用 Ink 給 dsh 加一個零邊框的終端聊天界面。工具調用收成 cell、thinking 可摺疊、主題跟終端背景走,這些都寫在目錄頁和 README 裏,並且兩邊能對上。

它是 gxinxing 維護的社區插件,MIT 許可,不是官方應用商店裏的一等公民。安裝命令以目錄頁爲準:

dsh plugin add github:gxinxing/deepseek-harness-tui

目錄頁:https://deepseek-harness-plugin.com/zh-CN/plugins/deepseek-harness-tui-gxinxing/

GitHub:https://github.com/gxinxing/deepseek-harness-tui

DeepSeek Harness 官方倉庫:https://github.com/deepseek-ai/deepseek-harness

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

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

小夜