使用 dsh-multica-runtime 让 DeepSeek Harness 在 Multica 上运行

前言

DeepSeek Harness(以下简称 dsh)把智能体能力拆成可替换的插件:模型、工具、会话、沙箱、界面都可以在配置层叠加,不必改框架源码。官方口号是「一切皆插件」,当前仍处于开发者预览阶段,核心接口还会继续变动。

另一边,Multica 是一套把编码智能体当同事来派活的平台:本机守护进程负责调用已安装的 CLI,看板负责任务入队、认领、执行和回传。官网文档把 DeepSeek Harness 列进已支持的编码工具,检测命令是 dsh。但 dsh 默认面向交互式终端或 Web UI,Multica 需要的是无界面、可探测、能在 stdio 上走版本化协议的运行时。两者中间缺一层桥。

dsh-multica-runtime 就是这层桥。它不改 DeepSeek Harness 源码,而是以外挂插件的方式,把 dsh 接到 Multica 的运行时协议上。

这是什么

dsh-multica-runtime 是一款开发与运行时类插件,由 GitHub 组织 multica-ai 维护,仓库地址是 multica-ai/dsh-multica-runtime。包名是 @multica-ai/dsh-runtime,当前版本号为 0.1.0-private.1,主要语言是 TypeScript。README 把它定位为 Multica 与公开 DeepSeek Harness 之间的 out-of-tree runtime bridge:在 stdio 上暴露版本号为 1 的 JSONL 协议,并叠加在 @deepseek-ai/dsh-base 之上。

目录页收录日期是 2026-08-15,仓库最近一次推送是 2026-08-14。GitHub 仓库页当前显示 41 stars;社区目录页收录时标注为 33 stars,目录数字是快照,文中星标以仓库页为准。

它解决的问题很具体:让 Multica 守护进程把本机的 dsh 登记成在线运行时,从而把任务派给 DeepSeek Harness 执行。仓库明确写了两件事:只包含 Multica 集成层,不内嵌、不二次分发 DeepSeek Harness 源码;不要求修改 DeepSeek Harness 本身。

核心能力

仓库 README 列出的运行时约定,可以对照源码里的协议帧来看。插件在 --stdio 模式下启动后,会先向 stdout 写出一条 ready 帧,声明自己是 runtime: dsh,并带上这些能力位:resumecancelmodelsthinkingusagetools,以及 MCP 传输 stdiostreamable-http

1、探测与模型发现--probe 返回协议版本 1;--list-models 从 dsh 自己的 LLM 服务枚举 provider 与模型,并带上思考强度(thinking level)。Multica 文档写明:只有 --probe 成功之后,守护进程才会把 DeepSeek Harness 登记为在线运行时。

2、JSONL 任务通道。stdin 接受 executecancel 两条命令。一次进程只接受一条 execute:工作目录必须是绝对路径,可以指定模型、思考强度、MCP 服务器列表,也可以用 resume_session_id 续上一次会话。stdout 只走协议帧,诊断信息写到 stderr。工具输出超过 256 KiB 会被截断;单条命令超过 8 MiB 会直接拒绝。

3、会话与取消。新建会话的 id 形如 multica-<uuid>。续跑时若会话工作目录与本次 cwd 不一致,会以 DSH_RESUME_REJECTED 失败,避免把任务接到错误目录。cancel 走 dsh 的用户取消路径,属于协作式中止,不是强杀进程。

4、MCP 配置翻译。Multica 下发的 MCP 配置会被转成 dsh 的 @deepseek-ai/dsh-mcp-client:stdio 服务器带 command / args / env / cwd,streamable-http 服务器带 url / headers。名称会规范化到 dsh 允许的字符集。

5、无界面审批。这是给守护进程用的 headless 运行时,没有交互式提问面。cordis.patch.yml 里的系统提示明确写了不要调用 ask_user_question;审批请求在源码里被处理成一次性放行(allowed-once)。热更新(hmr)和 OpenTelemetry 遥测插件都被关掉,也不暴露 HTTP 监听。

6、任务令牌的窄转发。dsh 默认会从子进程环境里清掉形如 *TOKEN**KEY**SECRET**PASSWORD* 的变量。插件只把 Multica 服务端签发、以 mat_ 开头的 MULTICA_TOKEN 放行,让任务里的 multica 命令还能带上任务归属;模型供应商密钥不会走这条路径。DEEPSEEK_API_KEY 仍由 dsh 自己的凭据模块在进程运行时读取,仓库要求不要把它写进这个插件仓库。

当前检出针对 @deepseek-ai/dsh@0.1.0-rc.6 及同系列 @deepseek-ai/dsh-* 包做过验证。package.jsonengines 要求 Node.js 为 ^22.19.0 || >=24.0.0。Multica 安装文档写的是 Node.js 20+ 再全局安装 @deepseek-ai/dsh;若两者不一致,以本插件自己的 engines 为准。

安装与启用

社区目录页给出的安装命令如下,在 DeepSeek Harness 终端里运行即可:

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

目录页同时提醒:如需可复现安装,请固定 commit 哈希:

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

#commit 换成实际的 commit 哈希,不要原样复制占位符。

若按仓库 README 做本地构建,再装进名为 multica 的 profile(这也是 Multica 文档采用的路径),步骤是:

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

最后一行里的路径必须换成构建产物所在的绝对路径。Multica 官方安装文档对应的流程是:先安装 Node.js,再执行 npm install -g @deepseek-ai/dsh,然后把 Multica runtime profile 加到 dsh 上;守护进程只有在下面这条探测成功后才会登记 DeepSeek Harness:

dsh --profile multica --probe

启动守护进程前,还需要在环境里设置 DEEPSEEK_API_KEY,或把它写进 dsh 自己的设置。dsh 安装路径不标准时,把启动器绝对路径告诉守护进程:

export MULTICA_DSH_PATH=/absolute/path/to/dsh

默认模型可以用 MULTICA_DSH_MODEL 覆盖,取值是 dsh 目录里的模型 id,文档示例是 deepseek-official/deepseek-chat。会话落盘目录由 MULTICA_DSH_SESSION_ROOT 控制,未设置时回落到 dsh 主目录下的 sessions

目录页写明:插件以当前 dsh 进程的权限运行,安装时可能执行代码。安装前请检查源代码仓库和许可证。

典型用法

装好 multica profile 之后,插件支持下面三条命令,分别对应探测、列模型和进入 stdio 协议:

dsh --profile multica --probe
dsh --profile multica --list-models
dsh --profile multica --stdio

--probe 成功时,stdout 会写出一条 JSONL 帧,字段包括 runtime: dshplugin_versionprotocol_version: 1。Multica 守护进程靠这一条判断协议是否对得上。

--list-models 会向 stdout 写出 models 帧。模型 id 的编码方式是 encodeURIComponent(provider)/encodeURIComponent(model),并标记当前默认模型;若该模型支持推理强度,会附带 supported_levelsdefault_level。某个 provider 枚举失败时,插件把错误写到 stderr,然后跳过该 provider,不会整条命令失败。

--stdio 是守护进程真正跑任务时用的模式。进程先发 ready,再等待 stdin 上的第一条 execute。一条 execute 的核心字段是:

  • cwd:任务工作目录,必须是绝对路径;
  • prompt:本轮用户提示;
  • resume_session_id:可选,续跑已有会话;
  • model:可选,provider + id,以及可选的 reasoning_effort
  • mcp_servers:可选,stdio 或 streamable-http 的 MCP 列表。

执行过程中,stdout 会按事件写出 sessiontextthinkingtool_calltool_resultusage,最后一条是 result,状态为 completedfailedabortedcancelled。日常使用里,这些帧由 Multica 守护进程读写,一般不需要手工往 stdin 灌 JSON。把本机守护进程拉起来后,到 Multica 的 Runtimes 页面确认 DeepSeek Harness 显示为 online,就可以在创建或编辑 agent 时选这个运行时。

非标准安装路径、以及 Desktop 与终端 PATH 不一致时,用前面的 MULTICA_DSH_PATH 指向真实的 dsh 可执行文件,然后重启守护进程:

multica daemon restart

适用场景与注意事项

适合已经(或准备)用 Multica 管编码智能体,又希望把 DeepSeek Harness 当作其中一种运行时的人。典型场景是:本机或自建环境已经能跑 dsh,需要让看板里的任务落到 dsh 上执行,并保留取消、续会话、MCP 和用量事件。它不是给普通 dsh 用户加 Web UI 或终端皮肤的插件;不跑 Multica 的话,这个桥没有使用对象。

下面几条需要在安装前看清楚。

第一,许可证不要按目录页的套话理解。目录页 FAQ 写「社区开源项目,可以查看源码并免费安装使用」;仓库 package.json 则标明 "private": true"license": "UNLICENSED",GitHub 也没有 SPDX 许可证。README 标题用语是 Private runtime bridge。来源冲突时以仓库一手信息为准:源码可以读,但当前并未给出可再分发的开源许可证。安装前应自行核对。

第二,插件以当前 dsh 进程权限运行。目录页和社区目录的通用安装说明都强调:安装时可能执行代码,GitHub 来源的插件还可能跑构建脚本。只装自己审查过的 commit。

第三,版本绑定较紧。当前验证基线是 @deepseek-ai/dsh@0.1.0-rc.6。DeepSeek Harness 仍在开发者预览,核心插件和 API 会变;升级 dsh 之后需要重新确认这条桥是否还能探测成功。

第四,headless 行为与交互式 dsh 不同。没有向用户提问的界面,审批被做成一次性放行,系统提示禁止调用 ask_user_question。需要人工确认的操作,不会在这条运行时里弹窗。

第五,凭据与隐私边界以仓库为准。不要把 API key、MCP 密钥、会话日志或生成的 profile 提交进这个仓库;DSH 遥测被 bundle patch 关掉;stdout 只允许协议帧。任务令牌只转发 mat_ 前缀的 MULTICA_TOKEN,其它凭证仍按 dsh 的清洗规则剥离。

第六,package.json 里的 repository 字段仍指向 github.com/dsh-external/dsh-multica-runtime,与当前公开仓库 multica-ai/dsh-multica-runtime 不一致,安装和引用时以后者为准。

社区插件目录 deepseek-harness-plugin.com 是独立站点,与 DeepSeek / 幻方没有官方从属关系,不能当成官方应用商店。

小结

dsh-multica-runtime 做的事情很窄:给 Multica 提供一条不改 dsh 源码的运行时桥,用 JSONL 协议把探测、模型列表、任务执行、取消和续会话接起来。对已经在用 Multica、又想把 DeepSeek Harness 加进运行时列表的人,这条插件是目前仓库与官方文档共同指向的安装路径。

目录页:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-multica-runtime/

GitHub:https://github.com/multica-ai/dsh-multica-runtime

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

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

小夜