用 dsh-tianshu-build 把視覺、記憶和全屏 TUI 裝進 DeepSeek Harness

前言

DeepSeek Harness(dsh)是 DeepSeek AI 開源的智能體框架,核心設計是「一切皆插件」:模型、工具、會話、沙箱、界面都可以用 Cordis 插件替換或重組。官方倉庫目前仍處於開發者預覽階段,兼容性會持續變化。社區裏也出現了獨立的插件目錄站點,用來收錄可安裝的擴展,它和 DeepSeek / 幻方沒有官方從屬關係,不能當成官方應用商店。

對日常寫代碼的人來說,單獨裝一個皮膚或側邊欄往往不夠。截圖要讀、跨會話要記得住、改 bug 希望先驗證再落盤、倉庫大了還要語義檢索和影響分析——這些能力如果全靠自己拼插件,成本不低。dsh-tianshu-build 走的是另一條路:在 2026-08 的 dsh 基線上做友好 fork,把視覺、跨會話記憶、驗證門、agent 路由、語義與圖譜檢索、文件回滾和全屏終端 UI 預先組合成一套可運行的發行。

這是什麼

dsh-tianshu-build 由 huiliyi37 維護,社區目錄把它歸在「界面增強」。打開倉庫會發現,它並不只是掛在官方 dsh 上的一個 UI 插件,而是獨立的集成發行,產品名是天樞 Harness(Tianshu Harness),命令行與 npm 包名是 oh-my-tianshu。GitHub 上的舊地址 huiliyi37/dsh-tianshu-build 會重定向到 huiliyi37/oh-my-tianshu。截至 2026-08-17,該倉庫約 32 星,主要語言是 TypeScript。

許可證需要分兩層看。上游 DeepSeek Harness 是 MIT;本倉庫在 NOTICE 裏保留了這段署名,並寫明自己是基於快照的獨立 fork,與 DeepSeek 無隸屬、無背書,也不追蹤上游發佈。發行許可證是 Apache-2.0,目錄頁、GitHub LICENSE 和 npm 包信息一致。倉庫描述裏的「友好 MIT fork」指的是上游許可,不是本倉庫自己改成了 MIT。

維護者把兩條發行線寫得很清楚,安裝前先對上號:

  1. 官方 dsh + dsh-tianshu-tui:只給官方 Harness 加交互式終端 UI,數據目錄固定在 ~/.dsh
  2. 本倉庫(oh-my-tianshu,曾用名 tianshu-public):自帶 CLI 的獨立發行。與官方 dsh 共存時,應設置獨立的 $DSH_HOME(文檔示例是 ~/.dsh-tianshu),避免會話和配置互相覆蓋。

如果你只想給現有的官方 dsh 換一層終端界面,應走第一條;如果要一次性拿到下面這些差異化能力,纔是 dsh-tianshu-build 的目標讀者。

核心功能

官方基線已經包含文件與 shell/PTY、技能、任務/目標/計劃、subagent 與工作流、沙箱審批、可恢復會話、LSP、Web 訪問、上下文壓縮等。本 monorepo 在此之上額外打包了若干插件,全部仍按「組合插件」的方式裝配,而不是改死 agent 循環。

1、視覺橋與視覺副駕。@huiliyi37/dsh-vision-bridge 給純文本主模型補讀圖:在 agent/pre-step 用獨立視覺模型描述附件,再把描述注入上下文。橋失敗會降級成可見提示,不會整輪失敗。@huiliyi37/dsh-vision-ask 再進一步,把本會話裏的圖片登記爲 img_1 這類短 id,主模型可通過 ask_image 反覆追問,不必讓用戶重發。

2、跨會話記憶。@huiliyi37/dsh-memory 在結構化 claim 和知識筆記上做 BM25 混合召回,寫入帶質量門,終端裏用 /memory/remember 管理。

3、驗證門與路由。@huiliyi37/dsh-evidence-gate 面向修 bug:先看到失敗再允許編輯,走 RED→GREEN。@huiliyi37/dsh-agent-router 根據指標把工作 MoE 式派發到原生 subagent。

4、檢索。@huiliyi37/dsh-semantic-index 按定義對齊分塊做文件級 BM25(對 CJK bigram 有處理),可選向量層再用 RRF 融合,對應 semantic_search@huiliyi37/dsh-meridian 用 tree-sitter 建 sqlite 代碼圖譜,提供 repo map、影響分析和流查詢,對應 repo_graph@huiliyi37/dsh-pheromone 則是文件級、會指數衰減的會話空間記憶,用來標記 fragile、entry-point 一類信號。

5、文件回滾與 Git。寫工具落盤前,@huiliyi37/dsh-fs-snapshot 先做快照,支撐 /rewind 的 code/both 粒度。@huiliyi37/dsh-git 提供類型化的本地 Git 能力,給工具和 UI 調用。

6、全屏終端 UI。@huiliyi37/dsh-tui 把天樞(opencode-tui)渲染核接到 harness 接縫上,界面對標 oh-my-pi:歡迎卡、段式狀態欄、按狀態着色的工具塊,以及 17 套主題(默認琥珀色 omp)。渲染核的 Apache-2.0 來源鏈保留在包內的 LICENSE / NOTICE / SOURCE-MAP。

7、DeepSeek Spark 錨點。deepseek-spark 這條 provider 路由會在傳輸層截斷 assistant 推理(flash 保留尾部 300 token,pro 需顯式打開),@huiliyi37/dsh-spark-anchors 再把被裁掉的排除路徑注回去,減少模型把已經否決的選項重新推一遍。

架構上仍是 Cordis 插件:模型、工具、策略、存儲、上下文和界面都可以替換。會話流是權威日誌,UI、恢復、fork 都從同一組事件派生。Code Mode 和自指 Cordis 工具(運行中檢查並掛載/卸載插件)都是顯式啓用,不是默認打開。遙測默認關閉,不會往外傳;只有你自己設置了 DSH_TELEMETRY_OTLP_URL,纔會把日誌打到你指定的 OTLP/HTTP 收集器。

安裝與啓用

運行環境是 Node ^22.19 || >=24,以及 DeepSeek API key(DEEPSEEK_API_KEY)。社區目錄給出的安裝命令如下,在 DeepSeek Harness 終端裏執行:

dsh plugin add github:huiliyi37/dsh-tianshu-build

如需可復現安裝,按目錄頁的寫法固定 commit:

dsh plugin add github:huiliyi37/dsh-tianshu-build#commit

#commit 換成實際哈希即可。需要強調的是:這條命令來自社區目錄;倉庫自己的 README 把本項目定位成獨立 CLI,推薦直接走 npm,而不是把它當作官方 dsh 上的普通插件往裏塞。

已發佈的 npm 包是 @huiliyi37/oh-my-tianshu(本文覈對到的版本是 0.2.7)。一條命令直接跑終端 UI:

npx @huiliyi37/oh-my-tianshu tui

或全局安裝:

npm i -g @huiliyi37/oh-my-tianshu
oh-my-tianshu tui

npm 11 及以上會攔截未放行的生命週期腳本。本包裝了若干原生依賴:koffi 要編譯、node-pty 要構建 PTY 二進制、@huiliyi37/dsh-subprocess-local 要恢復 spawn-helper 的可執行位、@google/genaiprotobufjs 要生成運行時資源。全局安裝時需要顯式放行:

npm i -g --allow-scripts=koffi,node-pty,@huiliyi37/dsh-subprocess-local,@google/genai,protobufjs @huiliyi37/oh-my-tianshu

如果 npm 還警告列表外的包,按提示追加後再裝。靜默跳過的原生構建,運行時往往會變成 Cannot find module

API key 可以先導出,也可以寫入用戶環境文件,之後每次啓動會自動加載:

export DEEPSEEK_API_KEY=sk-…
echo 'DEEPSEEK_API_KEY=sk-…' >> ~/.dsh/.env

第一行只對當前 shell 生效,第二行持久化。啓動後看歡迎頁環境行:API Key ✓ 表示讀到了,API Key ✗ 表示沒讀到,設好後重啓。退出用 Ctrl+Q/exit

在 Termux(或 proot-distro 的 root)上,process.platformandroidkoffi 沒有 Android 預編譯包,CMake 還依賴 Termux 前綴。安裝前需要:

export PREFIX=/data/data/com.termux/files/usr
npm i -g @huiliyi37/oh-my-tianshu

從源碼開發則需要 git、上述 Node 版本和 pnpm。倉庫檢出地址以當前名爲準:

git clone https://github.com/huiliyi37/oh-my-tianshu.git
cd oh-my-tianshu
pnpm install
pnpm run build
pnpm oh-my-tianshu tui
pnpm oh-my-tianshu web

與官方 dsh 同時安裝時,先隔開數據目錄:

export DSH_HOME=~/.dsh-tianshu

優先級是:顯式配置 > $DSH_HOME > 默認 home。文檔寫明默認 home 獨立化還在計劃中,落地前不要省略這一步。

典型用法

終端 UI 和 Web UI 是兩條常用入口。全屏終端:

oh-my-tianshu tui

等價於 oh-my-tianshu --profile tui。Web UI 默認聽 http://127.0.0.1:3080

oh-my-tianshu web

無界面跑完一個任務再退出:

oh-my-tianshu run "summarize this workspace"

oh-my-tianshu 啓動的是 profile:按順序疊插件組合包,再疊 $DSH_HOME/profiles/ 裏你自己的覆蓋層。例如把插件裝進 tui profile:

oh-my-tianshu plugin --profile tui add <package>
oh-my-tianshu --profile tui

TUI 裏輸入 / 打開命令菜單,↑↓ 選擇、Tab 接受、Enter 提交、Esc 關閉;Ctrl+. 隨時看鍵位表。和本發行差異化能力直接相關的命令包括:

  • /memory/remember:瀏覽或寫入跨會話記憶
  • /rewind:兩階段回滾,先選消息再選粒度
  • /model spark-flash/model spark-pro:切到 DeepSeek Spark(對應 deepseek-spark/deepseek-v4-flashdeepseek-spark/deepseek-v4-pro
  • /session/fork:列會話、複製歷史後分叉
  • /permission:在 workspace-writedanger-full-access 之間切換

工具審批以內聯 ⚠ 允許執行 …?[y/N] 出現,上方帶 unified diff。Ctrl+V 會讀系統剪貼板裏的圖片(macOS osascript、Linux wl-paste/xclip、Windows PowerShell);粘貼內容像路徑時則按文件附件加載。支持識圖的主模型直接看圖;純文本主模型若配了視覺橋,會先轉成描述;兩者都沒有時,界面會提示圖片未發送,也不會提交。

視覺橋需要在裝配里加上插件,並指定能看圖的 provider/model:

# cordis.yml
- id: vision-bridge
  name: '@huiliyi37/dsh-vision-bridge'
  config:
    provider: deepseek-official
    model: <vision-capable model>

同時在 tui-runner 組合包配置裏把 TUI 的 vision 狀態設成與橋一致:supportsVision: falsebridgeEnabled: true

Spark 模式與同一把 DeepSeek API key 共用,打開一次即可熱加載:

# settings.yaml
llm-deepseek:
  spark:
    enabled: true

dsh-spark-anchorstui 組合包裝配;切到 deepseek-spark 路由後錨點補償生效。自己拼的 profile 需要按包 README 顯式加上這一項。

適用場景與注意事項

適合已經在用或準備用 DeepSeek Harness,又希望少自己拼插件的人:終端裏寫代碼、偶爾貼截圖、需要跨會話記住項目約定、修 bug 時希望先失敗再改、以及在較大倉庫裏做語義檢索或影響分析。自動化側可以用 oh-my-tianshu run、ACP demo 和倉庫裏的 Python SDK,這些都以源碼文檔爲準。

不適合把它誤當成「往官方 dsh 裏丟一個主題包」。目錄分類是界面增強,倉庫本體卻是完整 harness fork,包發佈在 @huiliyi37/* 下,獨立演進、不跟隨官方發版節奏。只要終端 UI、仍想留在官方 CLI 上,應安裝 dsh-tianshu-tui,而不是本倉庫。

安裝前要讀源碼和許可證。社區目錄也寫了:插件以當前 dsh 進程的權限運行,安裝時可能執行代碼。本發行還包含原生編譯步驟,權限面比普通主題插件更大。遙測默認關閉;若你打開了 OTLP 上報,目標必須是自己的收集器。Code Mode 和運行中改插件裝配都是 opt-in,生產環境不要順手打開。

維護者計劃第二批把倉庫名、啓動命令和 npm 包名進一步統一,以減少和 dsh-tianshu-tui 的混淆。在那之前,以 README 裏的命名備忘爲準:dsh-tianshu-tui 是官方 dsh 的 TUI 插件,oh-my-tianshu 纔是這套獨立發行。

小結

dsh-tianshu-build 解決的是「dsh 可以插件化,但完整 coding agent 仍要自己拼」這件事。它從 2026-08 的 DeepSeek Harness 基線分叉,保留一切皆插件,把視覺、記憶、驗證門、檢索、回滾和全屏 TUI 預裝成 oh-my-tianshu。目錄頁仍提供 dsh plugin add github:huiliyi37/dsh-tianshu-build;實際使用以倉庫 README 的 npm/CLI 爲準,並和官方 dsh 隔開 $DSH_HOME

目錄頁:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-tianshu-build/

GitHub(舊名會跳轉到當前倉庫):https://github.com/huiliyi37/dsh-tianshu-build

當前倉庫:https://github.com/huiliyi37/oh-my-tianshu

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

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

小夜