dsh-connect-qwenwork:在 DSH 里用千问办公账号走 OpenAI 兼容桥

前言

DeepSeek Harness(DSH)通过插件扩展模型来源。若你已经在千问办公桌面客户端登录,却希望在 DSH 的对话界面里复用同一套账号与额度,就需要一条稳定的接入缝:DSH 侧熟悉的是 OpenAI 兼容的 chat/completions,而千问办公上游实际走的是 WebSocket 上的带信封 JSON-RPC(join / new_prompt),鉴权用 Authorization: Bearer 而非 Cookie 库里的占位项。

社区插件 dsh-connect-qwenwork(维护者 tang-bugu)负责读取本机登录态、在 127.0.0.1 起回环 HTTP 桥,并把 DSH 请求翻译成千问办公实测可用的会话协议。下面介绍它的定位、能力与安装用法。

这是什么

dsh-connect-qwenwork 是 DSH 的模型提供方插件:读取本机千问办公凭证(或手填 JWT),在本机监听回环地址,对外暴露 OpenAI 兼容接口,对内连接 wss://qwenwork.cn/api/chat-ws 完成一轮 agent 对话。

维护者:tang-bugu。源码与说明:GitHub — tang-bugu/dsh-connect-qwenwork;社区目录页:skillhub.cn/plugins/tang-bugu/dsh-connect-qwenwork。社区目录与 DeepSeek / 幻方无官方从属关系,安装前请自行查看源码与 MIT 许可证。

架构在做什么

三层分工与参考插件 dsh-connect-workbuddy 一致:DSH / pi-ai 打回环 HTTP,本插件中间的 bridge.js 压成一条 prompt,acp.js 用控制信封发 join / new_prompt,desktop-auth.js 从桌面客户端数据目录读 auth-v2.dat。

DSH / pi-ai          本插件                    千问办公
chat/completions ──► bridge.js (回环 HTTP)
                       │ 压成一条 prompt 文本
                       ▼
                     acp.js (控制信封)  ──► wss://qwenwork.cn/api/chat-ws
                       ▲                       join / new_prompt
                       │                       session/update …
                     SSE delta ◄── data 帧
desktop-auth.js ◄── 读取 auth-v2.dat

桥只绑定 127.0.0.1;每次进程启动生成随机 bearer,pi-ai 侧作 apiKey,桥做常量时间校验。插件不写上游登录态,也不启动 OAuth。

凭证从哪里来

按优先级:

  1. 插件设置里的 token — 手填 Bearer 后面的 JWT,最高优先。
  2. 环境变量 QWENWORK_TOKEN — 同上,适合脚本环境。
  3. 千问办公桌面客户端的 auth-v2.dat(推荐,复用客户端登录)。

Windows 上实测路径为 %APPDATA%\QwenWorkCN\auth-v2.dat(Electron userData)。解密链为:读 Local State 里 os_crypt.encrypted_key,经 DPAPI 得主密钥,再 AES-256-GCM 解 auth-v2.dat 得到含 token、refreshToken、expiresAt 等的 JSON。同目录较老的 auth.dat 可能是占位 token,插件会筛掉非 JWT 形态,避免 401。

限制(资料原文):DPAPI 需要起 powershell 子进程;禁止派生子进程的环境会报 cannot spawn powershell (EPERM),此时应改用手填 token,重新登录客户端不能解决。插件还会扫描 QwenWork / QwenWorkCN 两种目录名。

读取失败时,reason 与修复动作一一对应(如 missing 装客户端并登录、encrypted 改手填 token、no-session 表示未登录或旧格式等),设置卡片与 doctor 会给出分类,不混用「网络失败」与「没登录」。

核心功能(已核实)

  • OpenAI 兼容回环桥:把 DSH 模型请求转为千问办公 WebSocket 会话;上游协议为带 type: control|data 信封的 JSON-RPC,方法名为 join、new_prompt,不是标准 ACP 的 initialize / session/prompt。
  • 登录态恢复:设置 token、环境变量,或自动读桌面 auth-v2.dat(Windows DPAPI 链)。
  • 设置卡片:Plugins → 本插件,显示是否找到登录态、桥地址、失败分类与模型档位;手填 token 留空保存等于 unset,恢复自动读取。卡片通过 Host 只读路由 /plugins/dsh-connect-qwenwork/status 取状态,不直接接触 token。
  • 诊断 CLI:npx dsh-connect-qwenwork doctor(本地 + 上游分段)、doctor --json、status(只读不联网);输出不含完整 token。
  • 模型目录:对齐千问办公文档四档(高级 / 基础 / 经济 / Qwen3.8-Max),拿不到上游列表时保留四档回落;new_prompt 不接受逐轮指定模型,档位由账号与套餐决定。

安装与启用

插件使用静态 import 引用宿主 @earendil-works/pi-ai 等包(仅在 DSH app.asar 内),装好需重启 DSH 才能在模型选择器看到 qwenwork。自带 cordis.patch.yml 随 bundle 生效,一般不必手改 profile 的 Cordis 补丁。

从 GitHub 安装:

dsh plugin --profile <你的 profile> add github:tang-bugu/dsh-connect-qwenwork

从本地目录安装:

dsh plugin --profile <你的 profile> add "file:/path/to/dsh-connect-qwenwork"

dsh plugin add 会写 dependencies 与 dsh.profile.bundles;仅改 node_modules 不够。用 file: 安装时不要跑 dsh plugin remove(会清空源目录,见仓库 docs/INSTALL.md)。

运行环境:package.json 要求 Node ^22.19.0 || >=24.0.0。当前资料中版本为 0.1.2。

典型用法

  1. 在千问办公桌面客户端完成登录(或准备好 JWT,写入设置 / QWENWORK_TOKEN)。
  2. 按上文命令安装插件并重启 DSH。
  3. 在模型选择器选 qwenwork 及对应档位,正常对话。

安装后自检:

npx dsh-connect-qwenwork doctor
npx dsh-connect-qwenwork status

适用场景与注意

适合:已在 Windows 上使用千问办公桌面版并希望 DSH 统一入口;能接受每条 DSH 请求开一个新的上游 agent 会话(避免重复计费上下文,但上游会留下较多短会话)。

务必知晓:

  • 插件以当前 DSH 进程权限运行;读凭证、起桥、联网均在此权限下完成,安装前应阅读源码与许可证。
  • 仅文本:图片与文件会变成 [image omitted: …] 占位,不会上传。
  • 空回合可能需等 idle 超时收尾(上一轮遗留 idle 与本轮空回复在消息层难区分)。
  • 每条请求新会话、不能逐轮改模型 id 等为 README 列出的已知限制,选型时需对照。

结尾

dsh-connect-qwenwork 把千问办公的 Bearer JWT 与会话协议接到 DSH 稳定的 OpenAI 兼容缝上,并用手填 token、环境变量与 doctor 覆盖无法 DPAPI 或无法读盘的环境。进一步了解实现细节(协议时间线、HOST_IMPORTS、安全边界)见仓库 README。

  • 目录页:https://www.skillhub.cn/plugins/tang-bugu/dsh-connect-qwenwork
  • GitHub:https://github.com/tang-bugu/dsh-connect-qwenwork
羽毛球分组比赛记分
小程序二维码

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

Xiaoye