← 返回列表
⚠ 装前注意
把 Qoder CN 桌面 App 的订阅模型接入 DeepSeek Harness个人自用方案
基本兼容但装前注意:npm 同名包「dsh-qoder-connect」归属 masknull/dsh-qoder-connect,装到的可能不是本插件 · 最近上游提交 2026/9/24 · 已提供中文文档
把 Qoder CN 桌面 App 的订阅模型接入 DeepSeek Harness(个人自用方案)
综合分
30.8
GitHub 分
30.8
用户评分
—
★ Stars
1
周下载量
—
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add yembors64632/dsh-qoder-connectnpm 同名包「dsh-qoder-connect」归属 masknull/dsh-qoder-connect,装到的可能不是本插件,改用 GitHub 源安装
信任档位:已验证本站已于 1 天前真实安装成功(L4 · 真实安装)
- 是什么
- dsh 原生插件 · tool
- 装得上吗
- 本站已真实安装成功(L4 · 真实安装,非静态推断)
- 安全吗
- 本站尚未对该插件做风险分级(暂未覆盖,不等同于无风险)
- 还在维护吗
- 活跃:最近一次提交在 2 天前
档位由下列信号合成:本站实装验证(真实安装,当前最高到 L4)· 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。下方各区块是它的证据明细。 验证判据与等级说明 →
🟢实装验证通过· 2026/9/24
由本站实装验证器在真实 dsh 环境安装成功,非静态推断。
数据截至 2026/9/24(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
安装兼容性检查⚠ 装前注意
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-qoder-connect @ 0.1.8
✓Node 引擎要求 ^22.19.0 || >=24.0.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
npm 同名包「dsh-qoder-connect」归属 masknull/dsh-qoder-connect,装到的可能不是本插件
验证方式:npm registry 存在性 + package.json 静态校验 · 最后验证 2026/9/24 11:29:07
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-home-paths@deepseek-ai/dsh-llm@deepseek-ai/dsh-llm-pi-ai@deepseek-ai/dsh-host-webserver@deepseek-ai/schemastery用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动
README
由 DeepSeek 最新模型翻译生成dsh-qoder-connect
把 Qoder CN(阿里 Qoder 国内版桌面 App)订阅里的模型接入
DeepSeek Harness。
⚠️ 只对我自己的账号有效。 本插件读取的是我自己生成的 PAT。
PAT 绑定账号,别人拿到也无从使用(且不该外传)。要在自己环境跑,
需要自己生成 PAT 并按自己的环境改常量。改法见下方自用改法。
它做什么
在 DSH 里以 OpenAI 兼容端点暴露 Qoder CN 的模型,让模型选择器里出现对应分组
(渠道名 qoder1),可直接对话。
DSH ──OpenAI──▶ 本插件的回环 shim ──Qoder 双层 SSE──▶ gateway.qoder.com.cn
shim 只绑 127.0.0.1 随机端口 + 32 字节随机 bearer(timingSafeEqual 比对),
只服务 /healthz、/v1/models、/v1/chat/completions,无写接口。
为什么走 PAT,而不是啃加密凭据
Qoder CN 的桌面 App 自己不实现 agent 循环——它 spawn 一个内嵌的 Claude Code 式 worker
(@qoder-ai/qoder-cn-agent-sdk 的 qoder-worker-runtime.obf.mjs)。App 只负责登录,
并把短期 jobToken 交给它。
所以「接模型」的正路不是去啃 App 的加密凭据(auth.v1.dat 是 Electron safeStorage
密文,要弹钥匙串授权),而是走官方自建的 PAT:
PAT(pt-…) ──exchange──▶ jobToken(jt-…, 短期) ──COSY 签名──▶ gateway.qoder.com.cn
PAT 在 自建,是官方支持的通道。
⚠️ PAT 过期不会自动续。 Qoder 官方明确「The SDK does not refresh PATs」,
过期后重新生成一个即可(jobToken 那一层插件自己刷)。
协议的三层坑(都已在官方 SDK 里核对过)
1. 鉴权不是 Bearer ,是 Qoder 自研的 COSY 签名:
aesKey = 随机 16 字符
info = AES-128-CBC(JSON({uid,security_oauth_token,name,aid,email}), key=iv=aesKey) → base64
cosyKey = RSA_PKCS1(aesKey, 内置公钥) → base64
payloadB64 = base64(JSON({version:"v1", requestId, info, cosyVersion, ideVersion:""}))
sig = md5(payloadB64 \n cosyKey \n 秒级时间戳 \n bodyBytes \n sigPath)
Authorization: Bearer COSY..
外加一整组 Cosy- 头。
sigPath 是 pathname 去掉前导 /algo,且不含 query。
2. 请求体多一层自定义编码(URL 上的 Encode=1):先标准 base64,再按 Qoder 自定义
字母表重映射(= → $),最后做三段块旋转 [n-a,n) [a,n-a) [0,a),其中
a = floor(n/3)。见 qoderEncodeBody。
3. 响应是双层 SSE:外层 data: {"statusCodeValue":200,"body":""},
内层才是 OpenAI 形状的 choices[0].delta。控制哨兵还有 [DONE]、
[NOT_EXCEED_QUOTA]、[EXCEED_QUOTA]…、[NOTIFICATIONS]…。
两个平面(别混)
| 平面 | 端点 | 鉴权 |
|---|---|---|
| 推理平面 | gateway.qoder.com.cn/algo/ | COSY 签名 + Encode=1 请求体 |
| OpenAPI 平面 | openapi.qoder.com.cn/ | 普通 Bearer + Cosy-ClientType |
额度与「签到活动」走的都是 OpenAPI 平面(App 自己就是这么打的),所以那边不需要签名,
只需要一个有效 jobToken。
凭据
读宿主侧 $DSH_HOME/qoder/pat(权限 0600;~/.dsh 已 bind mount 成容器里的
/root/.dsh),或环境变量(按优先级):
QODERCN_PAT
QODERCN_PERSONAL_ACCESS_TOKEN
QODERCN_API_KEY
内容就是那串 pt- 开头的 PAT 明文。插件只读明文 PAT,绝不碰 App 的目录。
安装
前置:已在 生成 PAT,并写入上述路径或环境变量。
dsh plugin --profile web add github:yembors64632/dsh-qoder-connect
Desktop / TUI 把 --profile 换成 desktop / tui。
cordis.patch.yml 会注册 llm-qoder 这个 provider id(渠道名 qoder1),
不改动 profile 当前的默认模型。
自用改法:把这段提示词丢给你的 AI
插件是照着我自己的账号和环境写死的。你在自己环境改的时候,把下面这段连同插件目录交给 AI:
我在用 DeepSeek Harness(DSH),装了你写的 dsh-qoder-connect 插件。
这个插件是照着原作者的环境硬编码的,我要改成适配我自己的环境。
请你:
1. 先通读插件目录下的 lib/index.js,找出所有硬编码的路径、端点、常量,
特别是 COSY 签名里用到的身份字段;
2. 对照我下面的实际环境,逐项告诉我每一处需要改成什么,并给出修改后的完整代码;
3. 改完给我一条自检命令,用来验证 PAT 能读到、jobToken 能换到、上游能连通。
我的实际环境:
- 我用的是(Linux / macOS / Windows WSL),DSH 数据目录 $DSH_HOME 是:
- 我的 PAT 我打算放在:
- 我的 Qoder 账号情况:
- 插件报的错是:
注意:只改凭据读取路径、身份字段和上游端点,不要动 COSY 签名算法、
body 编码、双层 SSE 解析这些协议实现——那部分已在官方 SDK 里核对过。
你大概率要改什么
| 差异点 | 位置 |
|---|---|
| PAT 路径 / 环境变量名 | 凭据解析段 |
| 签名里的身份字段(uid / name / aid / email) | #region COSY 客户端身份常量 |
| 网关域名 | DEFAULT_GATEWAY / DEFAULT_OPENAPI |
| 渠道名 qoder1 | QODER_PROVIDER |
不要动 COSY 签名算法、body 编码、双层 SSE 解析——那部分已在官方 SDK 里核对过。
适配版本
| 项 | 版本 |
|---|---|
| 插件 | 0.1.0 |
| DSH 核心 | 0.1.5 / 0.1.6 / 0.1.7 alpha 线 |
| 上游 | Qoder CN(阿里 Qoder 国内版) |
| Node.js | ^22.19.0 \|\| >=24.0.0 |
| 界面 | Web / Desktop / TUI |
DSH 核心版本不匹配会导致 DSH 启动失败,不是静默降级。装之前先对表。
依赖 @deepseek-ai/ 系列包(cordis、dsh-llm、dsh-llm-pi-ai、dsh-home-paths、
dsh-host-webserver、schemastery)与 @earendil-works/pi-ai。
如果 star 多了:作者会考虑做全版本适配
现在是单点适配——我验证通过的那一套环境能跑,换个版本就可能挂。这是有意的取舍:
在没确认有多少人用之前,为每个 DSH 版本做兼容矩阵的性价比不高。
如果这个仓库 star 多了(说明确实有人在用),作者会考虑做以下工作:
- 跨版本适配矩阵:把 0.1.5-rc.x / 0.1.6-alpha.x / 0.1.6 / 0.1.7 各代的
peer range 与配置入口差异整理成表,插件加载时按宿主实际能力自适应。
- PAT 轮换与失效提示:PAT 官方不自动续期,计划在设置卡片上显示 PAT 剩余有效期,
失效时给出明确提示而不是静默报错。
- 上游变更的降级策略:推理平面与 OpenAPI 平面都是私有实现,随时可能变。
计划做「实时 → 上次成功 → 内置兜底」三级降级,并显示当前来源与失败原因。
- 安装体验:一条命令探测环境 + 拉取对应版本,替代现在的手工对照。
想要哪个,开 issue 说一声——用的人多就先做哪个。
风险
上游是私有实现,没有稳定契约。Qoder 服务端一改,插件就可能失效。
PAT 需要手工轮换(官方不自动续期)。这不是 bug,是这类方案的固有风险。
免责声明
本项目仅供个人学习与研究,驱动你自己账号在你自己的机器上使用。
使用者需自行遵守 Qoder 的服务条款。因使用本项目产生的任何后果
(包括但不限于账号受限、积分消耗、服务中断),由使用者自行承担。
仓库不含任何真实账号、凭据或密钥。
许可
MIT