dsh-codebuddy-auth
English | 简体中文
在 DeepSeek Harness(DSH) 里直接使用腾讯 CodeBuddy(IOA)的对话模型:浏览器 OAuth 登录、token 自动续期、模型列表自动同步。登录一次,模型选择器里即可选用 deepseek-v4-pro、glm-5.2、kimi-k3-1、minimax-m3 等 craft agent 模型。
工作原理
插件在 codebuddy provider 上注册原生 ctx.llm 适配器,自己持有整条请求链路:浏览器 OAuth、ctx.credentials 凭据存储、/v3/config 模型发现、自有的 SSE 流式与消息序列化。两套身份,按平面各司其职:
| 平面 | 身份 | 原因 |
|---|---|---|
聊天(POST /v2/chat/completions) | CLI 客户端(User-Agent: CLI/2.96.0 CodeBuddy/2.96.0,极简请求头) | 聊天端点期待 CLI 身份,用它可避开 IDE 身份拦截。 |
模型发现(GET /v3/config) | Craft / VSCode(X-Agent-Intent: craft + X-IDE-*) | craft 目录是唯一披露每模型推理元数据(supportedEfforts、canDisableThinking、defaultEffort)与精选模型列表的目录;CLI 目录同一端点只返回固定的 effort 值。 |
模型目录缓存 5 分钟,可随时 sync-models 刷新。
安装
DSH 通过官方 dsh plugin CLI 安装 profile 插件(它是个精简的 pnpm 转发器:安装依赖、把包追加到 profile 的 dsh.profile.bundles 层栈、再经包内的 patch 挂载插件——全程无需手动改文件)。
前置条件:确保 pnpm 在 PATH 里,例如用 Homebrew 安装:
brew install pnpm安装插件
dsh plugin --profile web add github:cainiao1992/dsh-codebuddy-auth这一条命令即从 GitHub 解析依赖、安装,并自动把插件作为 profile 层激活。
重启 DSH
重启 DSH,安装即完成——插件启动时在 ctx.llm 上原生注册 codebuddy provider,CodeBuddy 随即出现在模型页(未登录状态)。
登录
可以用 agent 登录,也可以用命令行登录,二选一。
方式一:通过 agent
对 agent 说 "用 codebuddy 登录"。agent 调用 codebuddy 工具:浏览器打开 IOA 登录页,后台轮询;token 到手后写入凭据并预热模型目录,下一个请求即以 CLI 身份直连聊天端点。
方式二:命令行(headless / 提前引导)
# 直接运行,无 npm 依赖,仅需 Node >= 18:
node ~/.dsh/profiles/web/node_modules/dsh-codebuddy-auth/bin/login-flow.mjs
# 或经 package.json 的 bin 字段从安装目录本地解析:
cd ~/.dsh/profiles/web && pnpm exec codebuddy-login
# 不想开浏览器(远程/服务器)加 --no-browserCLI 只写凭据——原生适配器自己持有路由,没有 settings 路由需要管理;--international 仅选择登录走的 OAuth 端点。
卸载
dsh plugin --profile web remove dsh-codebuddy-auth该命令会移除依赖,并把插件从 profile 层栈中摘除。重启 DSH 即完成卸载。
国际版
插件默认使用国内版(copilot.tencent.com / www.codebuddy.cn)。国际版(www.codebuddy.ai)通过挂载行的 edition: intl 配置选择:
# 你的 cordis.patch.yml 挂载行:
- id: codebuddy-auth
name: dsh-codebuddy-auth
edition: intl # 缺省即国内版适配器与登录/模型发现随即全部使用 www.codebuddy.ai 端点。CLI 的 --international 仅为登录选择国际 OAuth 端点。
使用
- 切换模型:模型选择器里选 CodeBuddy 下的任意模型(如
deepseek-v4-pro) - 状态:"看下 codebuddy 状态" →
codebuddy工具status - 续期(全自动,三层):① 每次启动时,token 剩余有效期不足 5 分钟(或已过期)即自动续;② 运行中每 30 分钟巡检,剩余不足 1 小时自动续——覆盖 dsh 长期不重启的场景;③ refresh token 失效(改密/吊销)时前两层会失败并留日志,此时说 "刷新 codebuddy" 确认,或重新登录
- 模型更新:腾讯上新模型后,说 "同步 codebuddy 模型" →
sync-models - 退出:"登出 codebuddy" → 清除凭据
推理
每个模型都按 /v3/config 报告的完整真实推理能力声明,模型选择器里展示该模型实际支持的等级:
- 可选等级(按模型):
supportedEfforts原样进选择器——deepseek-v4-pro可选low/high/xhigh,hy3可选low/high,固定等级模型(如glm-5.1)只有medium一档。线上以reasoning_effort: "<level>"发送。 - 默认等级:每模型直接采用
/v3/config报告的defaultEffort(如 glm-5.2 默认 high),选择器里所有已声明等级仍可自由选。
文件
lib/index.js— Cordis 宿主插件(host 组合行)。注册codebuddyprovider 与codebuddy工具,启动时及每 30 分钟自动刷新/同步。lib/codebuddy-adapter.mjs— 原生ctx.llm适配器:SSE 流式、消息序列化、推理元数据、错误映射。移植自 shatyuka/dsh-llm-codebuddy(MIT)。lib/codebuddy-core.mjs— OAuth、JWT 解码、身份头、/v3/config发现;无依赖。bin/login-flow.mjs— 独立登录 CLI,无 npm 依赖。cordis.patch.yml— 包内 patch(bundle 消费时的自挂载行)。
已知限制(均为实测结论)
POST /v2/chat/completions不校验 User-Agent,任意 UA 均可;但必须stream: true(非流式返回code 11101)。DSH 的 llm 适配器本来就是流式,无需处理。GET /v3/config(模型发现)需要 craft / VSCode 身份(X-Agent-Intent: craft+X-IDE-*头)才会披露推理元数据;插件自己直接发请求完成。- CodeBuddy 对每个 craft 模型都报告
supportsReasoning。模型按真实推理能力声明(按supportedEfforts列出等级),因此推理可在模型选择器里直接选用,而非被剥离。
License
MIT