前言¶
DeepSeek Harness(DSH)可以在本機、家裏電腦或雲服務器上分別跑一套「引擎」——各自有獨立的配置目錄與會話。移動端或 Web 端若每次切換都要改 APK、改 WebView 指向的 origin,往往會牽動 Host/Origin 校驗、Cookie 與 JS 橋的信任邊界。
dsh-engine-switch 把「本地引擎 / 多臺電腦引擎 / 服務器引擎」的切換做成 DSH 插件:在 DSH 進程內起一個獨立網關,瀏覽器或 App WebView 始終只連同一個 loopback 地址;切引擎只換上游,不改 DSH 自身的安全模型。
這是什麼¶
維護者 Benson-Cao,倉庫 Benson-Cao/dsh-engine-switch,分類爲客戶端插件。插件在進程內默認監聽 127.0.0.1:3082,同時承擔引擎註冊表、切換頁與反向代理三項職責;HTTP、SSE、WebSocket 全透傳到當前選中的引擎。
典型用法:手機上的 DSH 安裝本插件作爲統一入口;家裏臺式機、公司電腦、雲服務器上跑的 dsh web 登記進列表,在手機側隨時切換,各引擎會話各自留在對應機器上。
核心能力¶
下面三項能力由同一網關進程提供。
引擎註冊表:三類端點持久化在 $DSH_HOME/engine-switch/engines.json。
切換頁:獨立路由 http://127.0.0.1:3082/__switch/,手機瀏覽器可添加到主屏幕。
反向代理:/ 及其它路徑轉發到當前選中引擎;面板內切換隻改網關上游,不替換當前會話頁面。
DSH 左側欄會出現與「插件」「自動化任務」同排的「引擎」入口,在主區完成登記、刪除、切換與探測,主題跟隨宿主深淺色。桌面端通過宿主掛載的 /engine-switch/api/… 同源訪問;手機瀏覽器或經網關打開的頁面則打當前 origin 的 /api/engines。
網關提供 JSON API(設了 token 時每個請求需帶憑證):
| 方法 | 路徑 | 說明 |
|---|---|---|
| GET | /api/engines |
列表 + 當前 id + 當前上游 |
| POST | /api/engines |
添加 {label, url, kind},kind 爲 pc / server |
| DELETE | /api/engines/:id |
刪除(至少保留一個) |
| POST | /api/engines/switch |
切換 {id},即時生效 |
| GET | /api/engines/probe |
逐個探測可達性 |
登記示例:
- 本機:默認指向
selfUrl(默認http://127.0.0.1:3080) - 電腦:
dsh web --host 192.168.1.10後登記http://192.168.1.10:3080 - 服務器:VPS 上
dsh --profile web並經 Caddy/Nginx 反代與正式證書後,登記https://dsh.example.com
插件不遷移會話:每個引擎有獨立 $DSH_HOME 與會話日誌,切換隻換執行者。
環境與依賴¶
需要 Node.js ^22.19.0 || >=24.0.0,以及已安裝的 DeepSeek Harness。bundle 按 0.2.2-rc.1 規範編寫;README 記載在 0.2.1-rc.5 上已完成端到端實測。當前包版本爲 0.2.2,許可證 MIT。
安裝與啓用¶
Web profile(最常用)¶
在 PC 或常規 Web 環境下,用官方文檔中的命令安裝並啓動:
dsh plugin --profile web add github:Benson-Cao/dsh-engine-switch
dsh --profile web
本地源碼調試時:
dsh plugin --profile es-test add ./dsh-engine-switch
dsh --profile es-test --dump-config # 應能看到 dsh-engine-switch 這一行
dsh --profile es-test
桌面版在「插件」頁安裝後,需完全退出並重開 DSH(bundle 需進程重啓才掛載)。啓動日誌出現 [dsh-engine-switch] ready on http://127.0.0.1:3082/ 即表示網關已就緒。
手機 App(com.dsh.harness)¶
不要在 App 插件頁直接填 GitHub 倉庫 URL:Termux 運行時無 git,dsh plugin add 經 pnpm 解析 Git URL 會失敗(ERR_PNPM_GIT_RESOLVE_FAILED),App 可能誤報爲權限問題。可行路徑是 PC 側 npm pack 後經 adb push 到設備,再在設備上用本地路徑執行 plugin --profile web add;README 中有完整的環境變量與路徑說明。安裝後同樣需重啓 DSH 服務。
配置¶
cordis.patch.yml 中 config 爲整行替換,缺省字段走代碼默認值:
- insert:
- id: dsh-engine-switch
name: dsh-engine-switch
config:
host: 127.0.0.1 # 只綁 loopback;改成 0.0.0.0 必須同時設 token
port: 3082
selfUrl: http://127.0.0.1:3080 # 本機 DSH 的地址
token: '' # 非空時所有請求需帶 ?token= 或 Authorization: Bearer
allowSelfSigned: true
host 非 loopback 且未設 token 時插件會拒絕啓動——網關反代的是具備讀寫與執行能力的 Agent,不宜在無認證情況下暴露在局域網。
使用入口與地址¶
| 地址 | 作用 |
|---|---|
| DSH 左側欄「引擎」 | 應用內切換面板 |
http://127.0.0.1:3082/__switch/ |
獨立切換頁,可加主屏幕 |
http://127.0.0.1:3082/ |
當前引擎 DSH 主界面(反代) |
若需改端口或指向其它網關實例,可在頁面設置 window.__DSH_ENGINE_SWITCH__ = 'http://127.0.0.1:<端口>'。
適用場景與注意¶
適合需要在多臺 DSH 引擎之間頻繁切換、又希望客戶端始終連固定 loopback 入口的開發者。插件以當前 dsh 進程權限運行,安裝前應自行審閱 源碼 與 MIT 許可證。
需注意:
- 遠程引擎若使用配對型網關(例如私有 CA + token),本插件不代爲完成該層握手;應登記裸
dsh web或已完成認證的 HTTPS 反代地址。 com.dsh.harness的原生「引擎」切換器改的是 WebView 的 origin;本插件改的是網關上游。README 明確不建議把 WebView 直接指到127.0.0.1:3082以免繞過 Android 橋的信任門控;更穩妥的分工是手機用 App 原生切換器,插件裝在電腦或 Web profile。- DSH 處於 developer preview,上游 API 可能有破壞性變更。
社區目錄 skillhub.cn 插件頁 與 GitHub 爲獨立信息來源,與 DeepSeek / 幻方無官方從屬關係。
結尾¶
dsh-engine-switch 用插件替代改 APK 的多引擎切換:一個 loopback 網關、一份 engines.json、側欄或 __switch/ 頁面即可完成登記與切換。需要安裝命令與手機側細節時,以倉庫 README 爲準。
- 目錄頁:https://www.skillhub.cn/plugins/Benson-Cao/dsh-engine-switch
- GitHub:https://github.com/Benson-Cao/dsh-engine-switch