用 dsh-multica-runtime 把 DeepSeek Harness 接到 Multica

前言

DeepSeek Harness(dsh)是 DeepSeek AI 開源的智能體運行時,架構口號是「一切皆插件」:模型適配、工具、會話、審批策略,乃至界面,都做成可替換的插件層。它目前仍是開發者預覽,官方倉庫寫明會有破壞兼容性的變更。

另一邊,Multica 用本機守護進程去調度已經安裝好的 AI 編程工具:Claude Code、Codex、Cursor Agent 都可以被它發現並執行任務。DeepSeek Harness 也在它的檢測列表裏,命令名就是 dsh。問題在於:dsh 默認的 Web UI 或交互式會話,並不能直接被 Multica 當一條運行時調用。兩邊需要一層約定好的協議,而不是去改 DeepSeek Harness 本體。

dsh-multica-runtime 就是這層外部橋接。它疊在 @deepseek-ai/dsh-base 之上,用帶版本號的 JSONL 協議走 stdio,讓 Multica 守護進程把 dsh 當成一條可探測、可取消、可恢復會話的運行時。本文按插件目錄頁、GitHub 倉庫 README / 源碼,以及 Multica 官方文檔覈對後整理。

社區插件目錄 deepseek-harness-plugin.com 是獨立站點,與 DeepSeek / 幻方沒有官方從屬關係,不要把它當成官方應用商店。

這是什麼

dsh-multica-runtime 是一款「開發與運行時」類 DSH 插件。目錄頁標註維護者爲 forrestchang,收錄日期 2026-08-15。GitHub 倉庫地址寫的是 forrestchang/dsh-multica-runtime,當前實際歸屬組織 multica-ai,訪問前者會跳轉到 multica-ai/dsh-multica-runtime。倉庫主題帶 dshdsh-plugin,截至本文覈對(2026-08-18)GitHub 顯示 46 星。

它解決的問題可以收成一句話:在不修改、不內嵌 DeepSeek Harness 源碼的前提下,給 Multica 提供一條可調用的 dsh 運行時。README 把它稱爲 out-of-tree runtime bridge,倉庫只包含 Multica 集成層,依賴的 @deepseek-ai/dsh-* 包來自公開 npm。當前 checkout 驗證過的版本是 @deepseek-ai/dsh@0.1.0-rc.6 及同系列包。

npm 包名是 @multica-ai/dsh-runtime,版本 0.1.0-private.1package.jsonprivate 爲 true,license 字段是 UNLICENSED。GitHub 也沒有掛 SPDX 許可證。目錄頁寫「可以查看源碼並免費安裝使用」,和這份許可證聲明並不等同,安裝前應自己讀源碼和許可條款。

核心功能

不改 DSH 本體的組合方式

DeepSeek Harness 的運行實例由 profile 組成:先疊 @deepseek-ai/dsh-base,再疊外部 bundle。這個插件在 package.json 裏聲明瞭 dsh.bundle.patch,指向 cordis.patch.yml。補丁做了幾件和 Web UI 不同的事:

  • 關掉 hmr,避免一次任務結束後熱更新和進程退出打架。
  • 關掉 telemetry-otel,README 寫明 DSH 遙測由這份 bundle patch 禁用。
  • 會話落盤目錄優先讀環境變量 MULTICA_DSH_SESSION_ROOT
  • 插入 headless-runner,掛載包名 @multica-ai/dsh-runtime,不暴露 HTTP 監聽。
  • 系統提示寫明這是無界面運行時,不要調用 ask_user_question;真正需要用戶拍板時,把選項寫進最終回覆。

源碼裏審批請求被處理成一次性放行(allowed-once),沒有交互式問答界面。這和 Multica「守護進程拉起 CLI、拿結果」的模型一致。

帶版本號的 JSONL 協議

協議版本寫死爲 1,一問一行 JSON,走 stdin / stdout。診斷信息只寫 stderr,stdout 只承載協議幀。Multica 只有在 dsh --profile multica --probe 返回協議版本 1 之後,纔會把這條運行時登記上去。

探測成功時,stdout 會寫出類似下面的一幀(字段來自源碼常量,plugin_version 當前是 0.1.0-private.1):

{"v":1,"type":"probe","runtime":"dsh","plugin_version":"0.1.0-private.1","protocol_version":1}

stdio 模式下,進程先發 ready 幀,再等待唯一一條 execute 命令。ready 裏聲明的能力包括:會話恢復、協作取消、模型發現、思考強度、token 用量、工具事件,以及 MCP 的 stdiostreamable-http 兩種傳輸。

一次進程只接受一條 execute。後續同 request_idcancel 會把正在跑的 agent 取消掉。命令體超過 8 MiB、或版本號不是 1,會以 protocol_error 拒絕。

execute 可帶的字段包括工作目錄 cwd(必須是絕對路徑)、提示詞、可選的 resume_session_id、模型與思考強度,以及一組 MCP 服務器配置。恢復會話時,若原會話的工作目錄和本次 cwd 不是同一目錄,會以 DSH_RESUME_REJECTED 失敗,而不是默默換目錄繼續。

運行過程中,橋接層把 DSH 會話事件翻譯成協議幀:textthinkingtool_calltool_resultusage,最後一條 resultcompleted / failed / aborted / cancelled)。工具輸出超過 256 KiB 會被截斷並標記 truncated

模型、MCP 與任務令牌

模型列表不是寫死在插件裏的,而是問 DSH 自己的 LLM 服務。Multica 文檔要求用 dsh --profile multica --list-models 拿到目錄,模型 id 形如 deepseek-official/deepseek-chat,選擇時要用完整 id。環境變量 MULTICA_DSH_MODEL 也可以指定默認模型,取值同樣是這種 provider/model 形式。

MCP 方面,Multica 在智能體配置裏填寫的 server,會經協議傳給這次執行。橋接層再轉成 DSH 的 @deepseek-ai/dsh-mcp-client:本地進程用 stdio,遠程用 streamable-HTTP。Multica 的工具對照表裏,DeepSeek Harness 這一行「Multica 管理 MCP」和「會話恢復」都是勾選的;Skill 注入目錄是 .dsh/skills/

DSH 默認會從子進程環境裏清掉看起來像密鑰的變量。這個插件開了一個很窄的口子:只放行 Multica 下發、且以 mat_ 開頭的 MULTICA_TOKEN,好讓任務裏的 multica 命令還能帶上任務歸屬。模型服務商的 API Key 不會走這條路徑。DEEPSEEK_API_KEY 由 DSH 自己的憑據機制在進程運行時讀取,README 明確要求不要寫進這個倉庫。

安裝與啓用

目錄頁給出的安裝命令如下,在 DeepSeek Harness 終端裏執行:

dsh plugin add github:forrestchang/dsh-multica-runtime

需要可復現安裝時,目錄頁建議固定 commit 哈希:

dsh plugin add github:forrestchang/dsh-multica-runtime#commit

#commit 換成實際提交哈希。當前 dsh CLI 管理插件時必須帶 --profile。Multica 文檔和本倉庫 README 都把插件裝進名爲 multica 的 profile,守護進程也是用這條 profile 做探測。實際使用請寫成:

dsh plugin --profile multica add github:forrestchang/dsh-multica-runtime

從本地 checkout 安裝時,先構建再按絕對路徑添加。README 中的步驟是:

pnpm install
pnpm check
pnpm build
dsh plugin --profile multica add /absolute/path/to/multica-dsh-runtime

pnpm check 會依次做類型檢查、測試和構建。路徑必須換成你本機倉庫的絕對路徑。

Multica 側還要求本機已經裝好 dsh 本身。官方安裝說明是:先裝 Node.js,再執行 npm install -g @deepseek-ai/dsh。有兩處版本表述需要分開看:Multica 文檔寫的是 Node.js 20+;本倉庫 package.jsonengines^22.19.0 || >=24.0.0。若按本倉庫源碼構建,應按後者準備 Node。

啓動守護進程前設置 DEEPSEEK_API_KEY,或在 dsh 自己的設置裏保存。dsh 安裝路徑不在 PATH 上時,把啓動器絕對路徑交給守護進程:

export MULTICA_DSH_PATH=/absolute/path/to/dsh

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

典型用法

裝進 multica profile 之後,先確認協議探測通過。守護進程只有在這條命令成功後纔會註冊 DeepSeek Harness:

dsh --profile multica --probe

查看運行時自己報上來的模型目錄:

dsh --profile multica --list-models

stdio 模式是 Multica 真正拉起任務時用的入口,一般不用手敲;需要排障時可以單獨運行:

dsh --profile multica --stdio

本機終端裏確認 dsh 能找到、並且已經配置好模型憑據後,再讓 Multica 重新檢測:

multica daemon start

守護進程已在運行則重啓:

multica daemon restart

然後打開 Multica 的運行時頁面,目標電腦下面應出現 DeepSeek Harness,狀態爲在線。之後創建或編輯智能體時就可以選這條運行時。模型請從 list-models 的完整 id 裏選;不選則走 dsh 的默認模型。

適用場景與注意事項

適合已經在用 Multica 調度本機編碼智能體、同時希望任務跑在 DeepSeek Harness 上的人。它不是給 dsh Web UI 換皮膚,也不是通用 MCP 網關。倉庫定位很窄:只做 Multica 和 dsh 之間的橋。

使用前值得記住這幾條:

  1. 權限與許可證。 插件以當前 dsh 進程權限運行。package.json 許可證爲 UNLICENSED,GitHub 未聲明 SPDX 許可證,不要默認按 MIT 來理解再分發。
  2. 預覽版兼容性。 DeepSeek Harness 處於開發者預覽,官方說明會有破壞性變更。本倉庫當前驗證的是 @deepseek-ai/dsh@0.1.0-rc.6。dsh 升級後應重新跑 pnpm check--probe
  3. 無交互審批。 運行時是 headless:不會彈出詢問,審批按一次性放行處理。不適合必須在每一步人工確認的工作流。
  4. 一次進程一條任務。 重複的 execute 會被協議拒絕。會話恢復還要求工作目錄一致。
  5. 密鑰不要進倉庫。 API Key、MCP 密鑰、會話日誌、生成的 profile 都不要提交。stdout 是協議通道,排障看 stderr。
  6. Node 與 PATH。 終端裏能跑 dsh,不等於 Desktop 或後臺守護進程也能找到它。必要時用 MULTICA_DSH_PATH 指定絕對路徑。

小結

dsh-multica-runtime 把 DeepSeek Harness 接到 Multica 的方式很剋制:不改上游、不內嵌源碼,只用 profile 上的一層 bundle,經 stdio 暴露版本爲 1 的 JSONL 協議。探測通過、模型列表能拉到、API Key 就緒之後,Multica 就可以把 dsh 當成和其他編碼 CLI 並列的一條本機運行時。

目錄頁:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-multica-runtime-forrestchang/

GitHub:https://github.com/forrestchang/dsh-multica-runtime (當前跳轉到 https://github.com/multica-ai/dsh-multica-runtime)

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

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

小夜