前言¶
DSH 的定位是「一切皆插件」,推理 provider 也不例外。社区里早就有一个 TeleAgent 插件(dsh-codearts-auth),可以把中国电信天翼 AI「星辰超级智能体」接进 DSH。但它在登录态、签名协议上一直是坏的:请求发出去之后,用户只看到界面提示「API 密钥无效」,反复重填 token、反复检查积分都没用,因为问题根本不在密钥上。
2026 年 11 月云原生网关开始真正验签,这个问题从「偶尔失败」变成「全量 401」。本篇介绍的 dsh-connect-teleagent(维护者 alvinhuang0509-design,分类「联网工具」)就是针对这个痛点重写的独立插件:修正签名、复用已有凭据、补上积分签到与账号条。下面介绍它具体做了什么、怎么装、怎么用。
这是什么¶
dsh-connect-teleagent 是一个 DeepSeek Harness 独立插件,把中国电信天翼 AI「星辰超级智能体」接进 DSH。核心改动是把云网关的签名协议从错误的 local-v1 单轮方案,改成真正能通过校验的 v1 两轮 HMAC-SHA256 方案,并附带积分余额、每日签到、输入框内账号条等能力。
它与 dsh-codearts-auth 的 provider id 都是 teleagent,两者不能同时启用。
为什么必须改签名,而不是换密钥¶
原插件请求失败的现场是这样的:
teleagent: HTTP 401 — code=40104 unsupported sign version
→ DSH 把它归为 AUTH,界面显示「API 密钥无效」
「API 密钥无效」是误导性文案,来自 dsh-client-ui-trajectory 里 if (errorCode === "AUTH") return "API 密钥无效" 的硬编码。真实原因是签名协议错了,与密钥、积分、登录状态都无关。
旧的危险实现和本插件的修正对照如下:
| 旧插件(错误) | 本插件(正确) | |
|---|---|---|
| 签名版本头 | local-v1 |
v1 |
| HMAC 密钥 | 本地随机 sign_key |
登录 JWT 的第 3 段(签名段) |
| 轮数 / 编码 | 单轮 / base64url | 两轮嵌套 / 小写 hex |
| 签名头 | X-SA-* 与 X-SuperAgent-* 两组都发 |
只发 X-Superagent-* |
| 时间戳 | 毫秒 / 秒混用 | 秒(10 位) |
| 请求体 | 不参与签名 | SHA256(body 原始字节) 参与第二轮签名 |
值得留意的一点:local-v1 加随机 sessionKey 其实是官方 App 本机内核(127.0.0.1:4397)的鉴权方式,原插件把它直接发给了云网关,网关自然不认。
核心功能¶
- 修正的 v1 云网关签名:两轮嵌套 HMAC-SHA256,头版本
v1,方案常量superagent-auth-v1。 - 积分与签到:查询积分余额、套餐、今日签到 / 每日可领 / 累计天数与积分、活动标题,支持一键领取。
- 输入框内账号条:模型名左侧渲染,点开是账号面板,仅在当前会话选中
teleagent模型时出现,切到其它 provider 自动隐藏且不发请求。 - 浏览器自动登录(1.2.0+):插件自己启动独立浏览器窗口,通过 CDP 拦截登录回调取 token,用户不需要从 Network 面板复制任何东西。
- 斜杠命令:在 headless 环境也能完成登录、修复凭据等操作。
- 复用已有凭据:不需要重新走一遍登录流程。
签名算法要点(给实现者)¶
正确的 v1 算法如下:
K = X-Token 去掉 "<tenant>:" 后的 JWT 第 3 段
m1 = ["superagent-auth-v1", token, installId, tsSec, nonce].join("/") # 斜杠
sig1 = hex(HMAC_SHA256(K, m1))
bodyHash = hex(SHA256(实际发送的请求体原始字节))
m2 = ["superagent-auth-v1", METHOD, signPath, tsSec, nonce,
appVersion, bodyHash].join("\n") # 换行
sig2 = hex(HMAC_SHA256(sig1, m2)) => X-Superagent-Signature
几条容易踩的坑:
signPath = /superCowork/sapi/api/v1/chat/completions- 头里版本是
v1,消息里的方案常量是superagent-auth-v1,这是两个不同的字符串。 - 第一轮用
/、第二轮用\n,分隔符不同是最容易出错的地方。 ts用秒;用毫秒会回40103 时间不同步。- body 必须只序列化一次,签名与发送使用同一份字节,否则网关重算的 bodyHash 对不上。
本插件参考了 liao96312/teleagent-proxy 的 docs/signature-algorithms.md 与 scripts/teleagent-shim.js。按 README 说明,2026-11-04 已用真实账号单次签名请求验证 HTTP 200,另有本地 mock 网关的逐字节验签集成测试。
安装与启用¶
安装前先卸载 dsh-codearts-auth,否则 provider id 冲突。安装命令来自 README 原文,桌面端 CLI 路径为固定值:
DSH="/Applications/DeepSeek Harness.app/Contents/Resources/runtime/cli/bin/dsh"
# 从 npm 安装
"$DSH" plugin --profile desktop add dsh-connect-teleagent
# 或从源码目录安装(开发)
"$DSH" plugin --profile desktop install /path/to/dsh-connect-teleagent
# 安装后重启 DeepSeek Harness
有一点需要说清楚:这个包不需要在安装时构建。lib/client.js(客户端面板)是预构建并随包发布的,因此没有 prepare / install / postinstall 脚本。dsh-codearts-auth 当初装不上,正是因为它的 prepare 会调用 pnpm,而 Desktop CLI 的 PATH 里没有 pnpm,报 spawn ENOENT。从 git 或 npm 安装本插件时不需要 pnpm,也不需要 allowBuilds 放行。
只有在你要修改 plugin-src/client/index.js 时才需要本地重建:npm i 后执行 npm run build:client,devDependency 里只有 esbuild。
凭据:装好即用¶
插件复用 dsh-codearts-auth 已写入 ~/.dsh/.credentials.yaml 的凭据:
TELEAGENT_ACCOUNT_<HEX>:账号池条目,从~/.dsh/jet-hub/state.json里挑enabled的 teleagent 账号。TELEAGENT_ACCESS_TOKEN:默认 ref,回退用。TELEAGENT_DEVICE_ID:12 位 hex 设备标识。
新签名还要求一个稳定的 installId(UUID),旧凭据里没有。插件会在首次使用时生成并持久化到 TELEAGENT_INSTALL_ID,之后复用,也可以点面板里的「修复凭据」手动补齐。
注意:一旦 installId 生成,不要删除 TELEAGENT_INSTALL_ID 引用。改变设备身份会提高风控命中率。
典型用法¶
浏览器自动登录(推荐,1.2.0+)。在设置 → TeleAgent 或账号条里点「浏览器登录(推荐)」,插件会:
- 启动一个独立的 Chrome/Edge/Chromium 窗口,使用临时配置目录,不影响日常浏览器,也不读取 cookie。
- 打开官方登录页,你在窗口里正常登录。
- 通过 CDP 监听网络,从回调命中取 token。
- 自动保存、关闭窗口、清理临时目录。
手动登录的路径仍然保留,适合拿不到浏览器的机器:设置 → TeleAgent 里打开官方登录页,或把抓取到的 token / 回调 URL 粘贴进去。
斜杠命令在 headless 下同样可用:
/teleagent status # 登录状态
/teleagent login [回调URL或token] # 不带参数则显示官方登录页
/teleagent repair # 补齐 installId / deviceId
/teleagent balance # 积分余额
/teleagent checkin # 签到状态
/teleagent claim # 领取积分
/teleagent user # 账号信息
模块选择器里选 teleagent provider 下的模型即可开始对话。
关于登录 token 的位置¶
这是 README 专门强调的一段,因为早期文档写错了指引,导致用户反复粘贴失败。授权完成后浏览器停在:
https://agent.teleai.com.cn/superCowork/sapi/cowork/auth?code=ucc.XXXXXX
↑ 只有 code,没有 token
token 实际走的是 teleai-cowork://auth?token=… 这条 deeplink,由官方桌面端拦截导航取走,从不出现在地址栏,浏览器也不会把跨协议导航打印到 Console。code 是一次性的,已被消费的 code 无法再兑换给插件,所以不存在「把 code 交给插件,插件去换 token」这条路。
插件接受四种输入:完整回调 URL、teleai-cowork:// deeplink、裸 token、夹带 token 的一句话。如果粘的是只有 code 的地址,插件会说明「这是授权 code,不是 token」,而不是笼统地报「未找到 token」。
适用场景与注意¶
适合这类开发者和用户:已经在 DSH 里配置过 TeleAgent provider、被 40104 挡住、或需要积分与签到入口的人。插件同时提供图形面板和斜杠命令,既能在桌面端用,也能在 headless 环境跑。
几条需要注意的:
- 插件以当前 DSH 进程的权限运行,安装前应当先检查源码与许可证。许可证为 MIT,仓库地址见文末。
- 它与
dsh-codearts-auth的 provider id 冲突,装之前先卸载后者,不要同时启用。 - 浏览器自动登录会启动一个独立浏览器进程,依赖本机存在 Chrome / Chromium / Edge / Brave / Vivaldi;拿不到浏览器时插件会明确报「未找到 Chrome / Edge / Chromium」,此时退回手动粘贴 token。
- 一次只允许一个登录尝试,两个窗口会抢同一个一次性 code。
- 运行时需要 Node 22.19.0 及以上(
engines声明),社区分类为「联网工具」。
结尾¶
这个插件的价值不在于多一个 provider,而在于把「签名协议不对」这件事定性清楚并修正掉,避免开发者在「API 密钥无效」的错误文案上浪费时间。装好后复用旧凭据、补一个 installId 就能用,日常以积分余额和签到入口为主。
- 社区目录:https://www.skillhub.cn/plugins/alvinhuang0509-design/dsh-connect-teleagent
- 仓库:https://github.com/alvinhuang0509-design/dsh-connect-teleagent
- npm:https://www.npmjs.com/package/dsh-connect-teleagent