前言¶
DeepSeek Harness(DSH)通过「一切皆插件」的理念,让开发者把各种后端接入到子智能体体系。对于已经在用 Qoder CN 的用户,要在 DSH 里复用它的登录态、MCP 配置和计费,原本需要自己搭建服务。DSH Qoder CN Subagent(dsh-qoder-cn-subagent)把 Qoder CN 注册为 DSH 的一个子智能体后端,让父级 agent 通过一个工具委派任务,得到的是最终答复,而不是中间的工具流水。
插件定位与维护¶
- 插件名称:DSH Qoder CN Subagent
- GitHub:https://github.com/Zxznb666/dsh-qoder-cn-subagent
- 维护者:Zxznb666
- 分类:工作流
- 许可证:MIT
插件只做一件事:把 Qoder CN 的 agent 纳入 DSH 的子智能体调用链,复用 Qoder CN 自己的登录与设置,一次委派一个任务。
它做什么¶
一个后端,一条委派路径¶
在 DSH 的 subagents 服务中注册一个名为 qoder-cn 的外部提供方。父 agent 通过 qoder_subagent 工具把任务委派出去,DSH 收到的是 Qoder CN 返回的最终答复,而不是它完整的工具流水。
原生登录¶
认证走 Qoder CN 官方 SDK 的 qoderclicn。插件只读复用 CLI 登录态,不复制、不改写、不迁移 Qoder 的登录文件。
原生设置¶
默认把 ~/.qoder-cn/settings.json 里的 MCP 服务器转交给子会话,在 Qoder CN 里配好的 MCP 在委派里同样可用。
一次一个任务¶
外部后端不提供继续输入。子会话跑完即结束,父会话收到的是最终答复。
认证边界¶
Qoder 服务端划定的边界,插件无法绕过:
| 登录来源 | 位置 | 能否驱动子智能体 |
|---|---|---|
| Qoder CN CLI 登录 | ~/.qoder-cn/.auth/user |
能(官方 SDK 的唯一受支持路径) |
| Qoder CN IDE/App 登录 | App 的 state.vscdb |
不能 |
App 保存的是 device token,而 Qoder CN 的推理接口只接受 CLI 凭据库签发的凭据。拿 App 的 device token 去请求,上游会直接以 access_token_invalid 拒绝。这不是插件偷懒,而是上游的账号模型:两者是不同的凭据类型。
启用前,在本机执行一次:
qoderclicn login
登录一次之后,子智能体的每次委派都自动沿用这份登录态,账号切换也会自动跟随。
插件启动时会打印状态,未登录时给出明确警告:
[qoder-cn-subagent] provider "qoder-cn" registered without a Qoder CN CLI sign-in
qoder home: /Users/you/.qoder-cn
app sign-in: yes (your-name)
cli sign-in: no
auth mode: native
settings delegation: on
The subagent runs through the Qoder CN CLI credential store, which is separate from the App sign-in.
Run `qoderclicn login` once (or set accessToken / accessTokenEnv) before delegating.
安装与启用¶
插件本身不发 npm,按本地包安装:
# 1) 取回源码
git clone https://github.com/Zxznb666/dsh-qoder-cn-subagent.git
cd dsh-qoder-cn-subagent
# 2) 装好官方 SDK(插件已声明依赖,这一步是可选的预装)
npm install
# 3) 装进你要用的 profile(file: 需要绝对路径)
dsh plugin --profile <profile> add "file:$(pwd)"
Desktop 用户注意:官方 Electron 版把 desktop profile 交给 App 独占管理,独立 CLI 的 --profile desktop 会被拒绝,dsh plugin --profile desktop ... 同样不可用。想在 Desktop 里用,走 App 的插件入口安装本地包;Web / TUI / headless 用上面的命令即可。
装完后 --dump-config 能看到这两行,说明 bundle 层已生效:
# == dsh-qoder-cn-subagent
- id: subagent-qoder-cn
name: dsh-qoder-cn-subagent
- id: tool-subagent-qoder-cn
name: '@deepseek-ai/dsh-tool-subagent'
config:
provider: qoder-cn
toolName: qoder_subagent
maxDepth: provider-managed
maxDepth: provider-managed 不是可选项。外部后端没有 depthLimit 能力,父级无法替它执行递归预算,DSH 会因此在启动时直接拒绝这条配置——如实转交比假装能限制更安全。
pnpm 拦下 SDK 的 postinstall¶
官方 SDK 的 postinstall 负责下载 Qoder worker runtime(约 60 MB)。pnpm 默认会拦下未批准的构建脚本:
Error: ERR_PNPM_IGNORED_BUILDS
× adding a new package
╰─▶ Ignored build scripts: @qodercn-ai/qodercn-agent-sdk@1.0.55
在 profile 的 pnpm-workspace.yaml 里放行,然后补跑一次:
allowBuilds:
'@qodercn-ai/qodercn-agent-sdk': true
cd ~/.dsh/profiles/<profile>
pnpm rebuild @qodercn-ai/qodercn-agent-sdk
配置¶
全部字段都有可用默认值,不配也能跑。
| 字段 | 默认 | 说明 |
|---|---|---|
providerName |
qoder-cn |
提供方注册名,委派工具的 provider 指向它 |
authMode |
native |
native 只读复用 CLI 登录;token 用 accessToken/accessTokenEnv;auto 有令牌走令牌、否则走 CLI |
accessToken |
空 | Qoder CN personal access token。不要填 App 的 device token |
accessTokenEnv |
QODERCN_PERSONAL_ACCESS_TOKEN |
令牌所在环境变量,避免密钥进配置文件 |
qoderHome |
空 | Qoder CN 配置根目录。空表示 $QODERCN_CONFIG_DIR 或 ~/.qoder-cn |
delegateSettings |
true |
把 settings.json 的 MCP 服务器转交给子会话 |
model |
空 | 子会话使用的 Qoder CN 模型 id;空表示上游默认 |
permissionMode |
bypass_permissions |
子会话的权限模式。子智能体无人值守,需要免提示才能动手 |
maxTurns |
120 |
单次委派的轮数上限 |
sessionPersistence |
false |
是否把子会话留在磁盘,方便 qoderclicn --list-sessions 事后查看 |
cwdPolicy |
parent |
parent 用委派时的工作目录;fixed 用 cwd |
cwd |
空 | cwdPolicy: fixed 时使用的工作目录 |
在 profile 的 cordis.patch.yml 里覆盖:
- id: subagent-qoder-cn
name: dsh-qoder-cn-subagent
config:
authMode: auto
model: qmodel_latest
maxTurns: 60
sessionPersistence: true
它刻意不做的事¶
- 不声明做不到的能力。
agentOptions/agentPreset/outputSchema/depthLimit全为 false:Qoder CN 在另一个进程里跑,父级强制的这些启动能力它接不住。声明支持再静默忽略,会让调用方以为限制生效了。 - 不转发图片。当前只走文本提示;遇到图片块会显式标注「已丢弃」,而不是让模型对着残缺输入瞎猜。
- 不碰 Qoder 的登录文件。插件只读
settings.json与 App 的状态快照;authMode: token也只把令牌用在本次 SDK 调用上。 - 不复制 IDE 的插件开关。
enabledPlugins属于 IDE 的插件体系,SDK 侧没有对应概念,直接丢弃而不是假装支持。
故障排查¶
| 现象 | 原因 | 处理 |
|---|---|---|
No qodercli login found |
CLI 侧没有登录态 | qoderclicn login 一次 |
The provided access token was rejected |
填了 App 的 device token,或令牌已过期 | 改用 CLI 登录,或换一个真的 personal access token |
启动时报 cannot enforce maxDepth |
patch 里漏了 maxDepth: provider-managed |
补上该项 |
Ignored build scripts |
pnpm 拦下了 SDK postinstall | 见上文 allowBuilds |
| 委派一直无响应后报超时 | Qoder worker runtime 缺失或损坏 | 重跑 pnpm rebuild @qodercn-ai/qodercn-agent-sdk |
适用场景与注意¶
适合在 DSH 中需要调用 Qoder CN 能力的场景,比如复用现有的 MCP 配置、使用 Qoder CN 的计费模式,而不需要自己搭建服务。
插件以当前 dsh 进程的权限运行。安装前建议查看源码与许可证。
小结¶
DSH Qoder CN Subagent 把 Qoder CN 的 agent 纳入 DSH 的子智能体体系,复用 CLI 登录与 settings.json 里的 MCP 配置,一次委派一个任务。目录页:https://www.skillhub.cn/plugins/Zxznb666/dsh-qoder-cn-subagent;GitHub:https://github.com/Zxznb666/dsh-qoder-cn-subagent。