前言¶
DeepSeek Harness(dsh)是 DeepSeek AI 開源的智能體運行時,架構口號是「一切皆插件」:模型適配、工具、持久化、Agent 循環,以及 Web UI 本身,都以插件形式掛在 Cordis 上。官方倉庫給出的最快體驗方式是安裝 Node.js 之後執行:
npx @deepseek-ai/dsh web
服務默認監聽 http://127.0.0.1:3080。桌面瀏覽器裏,這套界面是三欄殼:左側會話/文件,中間對話,右側詳情。用鼠標拖拽還算順手;一旦把同一個頁面開到手機上,側邊欄、設置彈層、軌跡表格和底部統計就會擠在一起,輸入工具行也容易折成兩排。
社區插件 dsh-client-ui-mobile-adapt 針對的就是這件事。維護者 Hotsteel2901 在倉庫裏寫得很直接:爲在 Android Termux 裏寫代碼的開發者,把三欄桌面佈局收成單列。它不改 dsh 核心,只在窄屏視口下改客戶端佈局。
寫之前有兩點需要先說清楚。第一,DeepSeek Harness 目前仍是開發者預覽,官方 README 寫明會有破壞性變更。第二,插件目錄 deepseek-harness-plugin.com 是獨立的社區站點,和 DeepSeek / 幻方沒有官方從屬關係,不能把它當成官方應用商店。
這是什麼¶
dsh-client-ui-mobile-adapt 是一款界面增強類的客戶端插件,由 Hotsteel2901 維護,許可證爲 MIT,當前倉庫版本號是 0.1.0。目錄頁與 GitHub 倉庫均顯示 8 個 star。
它解決的問題很具體:默認 Web GUI 按桌面三欄設計,手機上不好用。插件在 max-width: 768px 時把中欄拉滿全寬,側邊欄改成左側抽屜,輸入工具強制單行,設置和軌跡詳情改成可滾動的全屏/懸浮面板。視口大於這個寬度時,桌面佈局保持原樣。
從 package.json 可以看到,它按官方客戶端插件格式聲明瞭 dsh.client(平臺爲 web),同時帶有 dsh.bundle.patch,因此既可以當普通客戶端插件注入,也可以作爲 profile 的組合包一層掛上去。入口是 lib/index.js(host 側幾乎是空的),真正幹活的是瀏覽器端的 lib/client.js。
peer 依賴釘在 DeepSeek Harness 0.1.0-rc.6 這一代客戶端包上,包括 @deepseek-ai/dsh-client-runtime、dsh-client-ui-slots、dsh-client-ui-layout、dsh-client-locale 以及 @deepseek-ai/cordis。README 也寫明:CSS 類名對應的是 0.1.0-rc.6 前端構建產物裏的 CSS Modules 哈希。dsh 升級、前端重新構建之後,這些類名可能對不上,需要重新覈對。
核心功能¶
倉庫 README 用一張表把改動拆開了,對照 lib/client.js 裏注入的樣式和槽位,可以確認下面這些能力是真實存在的。
1、整體佈局。手機寬度下,三欄 Grid 被寫成 0 minmax(0,1fr) 0,中間會話區佔滿全寬;右側詳情列和拖拽手柄直接隱藏。側邊欄脫離文檔流,改成 fixed 的左側抽屜,寬度大約是 min(320px, 86vw),用 left 位移而不是 transform 做顯隱,避免抽屜內部的 fixed 面板被裁切。
2、漢堡按鈕與遮罩。插件往 shell.overlay 槽位注入一個左上角浮動按鈕(帶安全區 env(safe-area-inset-*)),點一下調用 layout.toggleSidebar()。抽屜打開時有一層半透明遮罩,點遮罩即可關閉。桌面端這兩塊是 display: none。
3、會話頭部和輸入行。頭部給漢堡按鈕留出左邊距,標題和操作允許換行;「對話 / 軌跡」標籤按屏幕中線居中。輸入工具行(權限、計劃、附加、模型、上下文、發送)強制單行,觸發器寬度限制在 112px。模型選擇、上下文詳情、命令菜單的最大寬度是 calc(100vw - 16px),避免彈出層跑出屏幕。
4、設置與插件面板。設置面板在手機上改成全屏:頂部導航變成可橫滑的單行,內容區自己滾動,並帶關閉按鈕。運行中的插件列表面板改成 fixed 懸浮,底部抬高約 130px,避免擋住輸入區的觸發按鈕。
5、軌跡頁。表格拉滿全寬;詳情不再跟表格並排,而是變成底部附近的固定高度懸浮窗(min(52vh, 460px)),內部可滾動。
6、底部統計膠囊。插件替換了會話輸入區 conversation.composer.dock 裏的 stats 槽位。沒有數據時不渲染;有輪次或 Token 時顯示一顆膠囊,摘要包括輪數/步數、緩存命中率和輸入/輸出 Token。點一下展開完整面板,可以看到 LLM 耗時、工具調用耗時、平均首 Token 延遲、解碼速度、緩存讀寫拆分等。文案帶中英兩套字典,走插件自己的 mobileAdapt 語言包。
7、視口與安全區。html / body 使用 100dvh,輸入區底部補 safe-area-inset-bottom。README 把這一項標成 iOS 適配;源碼裏這些規則掛在 max-width: 768px 媒體查詢下,Android 窄屏同樣會生效。另外,源碼對 769px–1024px 的平板寬度只壓縮了會話頭部留白,並不會啓用整套單列改造。
它不做消息編輯、多模型搜索、PWA 或局域網暴露,只改佈局和統計展示。如果需要那些能力,要另找對應插件,不要指望這一包全包。
安裝與啓用¶
社區目錄頁給出的安裝命令原文是:
dsh plugin add github:Hotsteel2901/dsh-client-ui-mobile-adapt
如需可復現安裝,目錄頁建議固定 commit:
dsh plugin add github:Hotsteel2901/dsh-client-ui-mobile-adapt#<commit>
官方文檔裏,dsh plugin 實際是在某個 profile 目錄裏轉發給 pnpm。Web UI 對應的常見寫法是帶上 --profile,例如裝進默認的 web profile:
dsh plugin --profile web add github:Hotsteel2901/dsh-client-ui-mobile-adapt
維護者 README 還提供了另外兩條路,更貼近它「既是客戶端插件、又是 bundle」的形態。
方式一:單獨建一個 webmobile profile。 在 $DSH_HOME/profiles/webmobile/ 放一份 package.json,把本包寫進 dependencies,並在 dsh.profile.bundles 裏按順序掛上 @deepseek-ai/dsh-base、@deepseek-ai/dsh-web-app 和 dsh-client-ui-mobile-adapt。然後:
cd ~/.dsh/profiles/webmobile
npm install
dsh --profile webmobile
依賴地址倉庫推薦用 GitHub archive 的 tarball,而不是 github: 簡寫:
https://github.com/Hotsteel2901/dsh-client-ui-mobile-adapt/archive/refs/heads/main.tar.gz
方式二:裝進已有 profile。 README 給出的命令是:
dsh plugin --profile web <profile名> add https://github.com/Hotsteel2901/dsh-client-ui-mobile-adapt/archive/refs/heads/main.tar.gz
也可以在該 profile 的 cordis.patch.yml 裏手動插入一行(與倉庫自帶的 patch 一致):
- insert:
- id: ui-mobile-adapt
name: 'dsh-client-ui-mobile-adapt'
改完後重啓對應的 dsh 進程。倉庫寫的是「重啓即生效」。
這裏有一個安裝層面的衝突,需要按來源分開看。目錄頁推廣 github:Hotsteel2901/dsh-client-ui-mobile-adapt;維護者 README 則提醒:較新的 npm 默認會攔截 git://、github:用戶名/倉庫 以及部分遠程 tarball(EALLOWGIT / EALLOWREMOTE),所以它建議用上面的 .../archive/refs/heads/main.tar.gz。官方《打包與安裝插件》文檔另外說明:從 git 安裝時,若包帶 prepare 構建腳本,pnpm 10 及以上可能要求把包名寫入 profile 的 pnpm-workspace.yaml 的 allowBuilds。本倉庫已經帶上構建好的 lib/,沒有把構建步驟作爲使用前提。實際安裝時以本機包管理器報錯爲準,優先採用 README 的 tarball 形式通常更省事。
更新到最新代碼時,README 給出的清理方式是:
npm cache clean --force
rm -rf node_modules/dsh-client-ui-mobile-adapt
npm install
裝好之後怎麼用¶
插件沒有額外的斜槓命令或配置項。用法就是把 Web UI 開在窄屏瀏覽器裏。
1、用 npx @deepseek-ai/dsh web 或 dsh --profile webmobile 啓動服務。官方默認地址仍是本機 http://127.0.0.1:3080。若你在 Termux 裏跑 dsh、再用同一臺手機的瀏覽器訪問,走的就是這條迴環地址;從另一臺設備訪問,需要自己處理網絡暴露,這超出本插件的範圍,官方 Web UI 默認也只綁在 127.0.0.1。
2、用寬度不超過 768px 的視口打開頁面。可以把手機瀏覽器轉到豎屏,或在桌面開發者工具裏把設備模式調到常見手機寬度。大於 768px 時,你應當看到和未安裝插件時幾乎一樣的桌面三欄。
3、點左上角漢堡按鈕打開會話列表等側欄內容,點遮罩關閉。進入設置後,面板應鋪滿屏幕,頂部類目可以左右滑,內容可以上下滾。切到軌跡頁時,點開一條記錄,詳情會以底部懸浮窗出現,而不是右側窄列。
4、會話產生輪次或 Token 消耗後,輸入框下方會出現統計膠囊。點開可以看到輪數、步數、耗時和 Token 明細;再點 × 關閉。
倉庫沒有提供截圖或交互錄屏,以上步驟對應的是 README 功能表和客戶端源碼裏的槽位,而不是第三方使用報告。
適用場景與注意事項¶
適合這幾類用法:在 Android Termux 裏跑 dsh,再用手機瀏覽器看 Web UI;電腦上的 dsh 只給自己用,偶爾用手機點開本機頁面做確認;已經能接受默認 Web GUI,只是嫌窄屏三欄難用,不想換一套完全不同的皮膚或 TUI。
不適合把它當成「手機版 dsh」。它不提供獨立 App,不改 Agent 權限模型,也不把服務從 127.0.0.1 改成局域網可訪問。平板寬度(源碼裏是 769px 到 1024px)幾乎還是桌面窄欄,只有頭部間距被壓縮。
使用前還有幾條硬約束。
插件以當前 dsh 進程的權限運行,安裝時還可能執行代碼。目錄頁和官方插件文檔都要求先看源代碼和許可證;只從自己核過的倉庫安裝,並用 commit 哈希釘死版本,避免 main 分支下一次推送悄悄改掉你正在跑的內容。本包是 MIT,源碼量不大,lib/client.js 主要是 CSS 與兩個槽位組件,檢查成本相對低,但仍然應該自己過一遍。
它綁定的是 0.1.0-rc.6 的前端類名。DeepSeek Harness 還在快速迭代,官方明確會有不兼容變更。升級 dsh 之後如果手機佈局突然失效,優先懷疑 CSS Modules 哈希變了,而不是手機瀏覽器壞了。
社區裏還有其他移動端適配插件,實現方式和額外功能並不相同。本文只根據目錄頁和這個倉庫的 README / 源碼介紹 dsh-client-ui-mobile-adapt,不對其它插件做未覈實的對比。
小結¶
dsh-client-ui-mobile-adapt 做的事情很剋制:在 768px 以下把 DeepSeek Harness 的 Web GUI 收成單列,側邊欄變抽屜,設置和軌跡可滾動,統計收成一顆能點開的膠囊;桌面端不動。維護者是 Hotsteel2901,MIT 許可,當前版本 0.1.0,面向在 Termux 或手機瀏覽器裏使用 dsh 的人。
目錄頁:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-client-ui-mobile-adapt/
GitHub:https://github.com/Hotsteel2901/dsh-client-ui-mobile-adapt