DSH Qoder CN Subagent 插件

前言

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。

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

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

小夜