dsh-router-qoder: Integrating Qoder Domestic and International Versions in DSH

前言

在 DSH 里做多供应商路由时,常见做法是装 dsh-router 核心,再按目标平台挂供应商插件。Qoder(阿里 AI 编码平台)官方没有 OpenAI 兼容聊天端点,对话走 cosy 签名网关和私有请求体,响应是套了一层 OpenAI 形状的 SSE。若要在路由面板里统一管理 Qoder 账号、模型与回退,需要专门的供应商实现。dsh-router-qoder(维护者 CARVIN94)就是为 dsh-router 注册 Qoder 与 Qoder Global 两个区域的插件;单独安装它不会生效,面板、账号池、组合回退与模型策略仍在核心里。

这是什么

npm 包名 dsh-router-qoder,当前版本 0.1.2,MIT 许可证,要求 Node.js >=20,并声明支持 DSH 0.2.0+。插件通过 cordis 服务 router.suppliers 向核心注册两个供应商 id:qoder(国内,gateway.qoder.com.cn / openapi.qoder.com.cn)与 qoder-global(国际,api1.qoder.sh / openapi.qoder.sh)。两区协议与契约相同,共用一份实现,差异只在区域 profile 与主机表。这两个 id 同时是凭证与配置的存储键,修改 id 会导致已添加账号从存储中「消失」,不宜随意改名。

与 CodeBuddy 族插件的两处不同 worth 记住:认证走 PAT(pt- 开头),不是 OAuth;上游不是 OpenAI 兼容 URL,插件负责 cosy 会话、jobToken 交换,并把 Qoder SSE 转成核心能消费的 OpenAI SSE。

核心功能

下面按 README 中「能力」表归纳,均为插件对单个账号调通上游的职责;选号、冷却、遍历回退由 dsh-router 核心负责。

添加账号(PAT)
面板粘贴 pt-… 即可。添加时会真实交换一次 jobToken 校验,错误 PAT 不会落盘;同一 PAT 不重复建号。带 Bearer 前缀也会被识别并剥掉。

模型列表
「获取模型」从上游 GET /algo/api/v2/model/list 实时拉取。面板显示 display_name,组合与请求仍用上游 key;用显示名请求会 404。上游的 auto 不在列表中(默认路由,非可描述模型)。无 PAT 时列表为空,属预期行为。

对话
直连 cosy 网关,请求经私有模板与 cosy 编码签名;响应 SSE 转为 OpenAI SSE,含 reasoning_content、tool_calls、usage、[DONE] 等。非流式请求也由核心聚合 SSE,插件只产 OpenAI SSE 字节流。

图文与思考强度
请求含 image_url / input_image 时按次设置 model_config.is_vl;推理等级在顶层与 parameters 两处同时写入(与官方客户端一致)。auto/空/none/off 不下发。

积分与签到
积分来自 sash 用量接口剩余量求和,内存缓存 10 分钟;读不到报 -1(非 0),由核心保留上次持久化值。签到走活动接口 claim,已领与 409 视为幂等成功。

多账号池
核心按池策略选号;插件只回报单次成败与语义状态(如 rate_limit、quota、no_such_model 等)。业务错误码优先于 HTTP 状态归类,避免把「当日额度用尽」误判为凭据失效。

安装与启用

需要 DSH 0.2.0 及以上。先装核心,再装本插件,然后重启 dsh web:

dsh plugin --profile web add dsh-router-core
dsh plugin --profile web add dsh-router-qoder

dsh plugin add 会在 profile 里执行 pnpm add,并把声明了 dsh.bundle.patch 的包(本插件的 cordis.patch.yml)加入 bundle 栈。重启后面板「供应商」应出现 Qoder 与 Qoder Global 两张卡片。

本地开发可将 profile 的 dependencies 指向 link:/path/to/dsh-router-qoder,改代码后 pnpm build 再重启 dsh web。

取 PAT 与典型用法

两个区域各签发一份 PAT,互不通用;贴错区域会在 jobToken 交换阶段失败。

卡片 控制台 入口
Qoder(国内) qoder.cn 设置 → 个人访问令牌 → 创建
Qoder Global qoder.com Settings → Personal Access Tokens → Create token

国际版控制台是 qoder.com,不是网关域名 qoder.sh。令牌只在创建时完整显示一次,勿提交进仓库或 issue。格式与作用域见官方文档:国内认证、国际 Authentication。

典型步骤:

  1. 重启 dsh web。
  2. 面板 → 供应商 → 对应卡片 → 添加 API key → 粘贴 PAT。
  3. 点「获取模型」,勾选要用的模型(记住请求用 key,不是 display_name)。
  4. 请求模型可写 qmodel_38max,或带别名前缀 qoder/qmodel_38max(插件会剥前缀)。

README 中 2026-10-28 国内版模型快照(上游会变,以面板为准)示例:Qwen3.8-Max 对应 key qmodel_38max,Kimi-K3.1-Pro 对应 kmodel_latest 等;命名规律勿用来猜 key。

适用场景与注意

适合谁
已在用 dsh-router 做 OpenAI 形态统一出口,且需要在同一面板管理 Qoder 国内/国际账号、模型目录、积分与活动领取的 DSH 用户。

分工边界
策略(AccountPool、冷却、禁用、组合回退)全在 dsh-router 核心;契约细节见核心的 docs/suppliers.md。

运行权限
插件随当前 DSH 进程加载,以该进程权限访问网络与本地 profile 中的 credentials.sqlite、supplier-config.json。安装前建议阅读仓库源码与 MIT 许可证,确认 PAT 存储方式可接受。

国际版限制
README 提到国际版 sash 面(积分/签到)可能需要设备风控头,属上游侧约束,以 issue 与后续版本说明为准。

结尾

dsh-router-qoder 把 Qoder 两区的 PAT 认证、cosy 网关对话和 OpenAI SSE 适配收进 dsh-router 供应商体系,与核心分工清晰:插件管单号上游,核心管池与路由。社区目录页:SkillHub · dsh-router-qoder;源码与完整说明:GitHub · CARVIN94/dsh-router-qoder。

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

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

Xiaoye