dsh-vendor-login
Verifieddsh-vendor-login · v0.1.1 · MIT · Web UI
Sign in to vendor coding plans that have no API key at all (Claude Pro/Max/Team, ChatGPT Plus/Pro, GitHub Copilot, SuperGrok) from the dsh settings UI
Install
dsh plugin add dsh-vendor-login Confirm the layer applied with dsh --profile default --dump-config — see the install guide.
Source
Tags
Creators
Readme
dsh-vendor-login
面向 dsh 的厂商账号登录插件:在设置界面里用你自己的订阅账号,登录那些根本拿不到 API Key 的 coding plan——Claude Pro/Max/Team、ChatGPT Plus/Pro、GitHub Copilot、SuperGrok——直接跑套餐内额度,不按 token 付费。
发得出 API Key 的厂商故意不收:那些在 dsh「模型」页配一条 apiKeyEnv 就行。
⚠️ 这些 OAuth 令牌按各家条款是发给它们自己官方客户端的。在第三方 harness 里复用属于灰色地带,存在违反服务条款、被限流或封号的风险。本插件走的就是各家自己的 OAuth / 设备码流程,令牌只存在你自己机器上——要不要这么用,是你自己的判断。
支持的厂商
| 厂商 | 登录方式 | 为什么没有 API Key |
|---|---|---|
Anthropic(anthropic) |
OAuth — 本机回调 53692,或粘贴授权码 |
Pro/Max/Team 额度只认 Claude 账号登录;ANTHROPIC_API_KEY 是 Console 的另一套账 |
OpenAI(openai-codex) |
OAuth — 本机回调 1455 |
ChatGPT Plus/Pro 额度只认 "Sign in with ChatGPT";API 平台单独计费 |
GitHub Copilot(github-copilot) |
设备码 — github.com/login/device |
Copilot 不发 API Key,第三方只能走设备码 OAuth |
xAI(xai) |
设备码 — auth.x.ai |
SuperGrok / X Premium+ 额度只认 OAuth;console.x.ai 的额度是另一条轨 |
前置条件
- 已安装 dsh(
dsh在PATH上),pnpm在PATH上。 - 目标 profile 是
web——卡片只在 dsh Web 界面出现。 - 宿主机能开浏览器完成授权。两家回调流程要求本机
53692、1455端口空闲;两家设备码流程不监听任何端口,浏览器在不在这台机器上都行。
安装
dsh plugin --profile web add dsh-vendor-login
装完重启 dsh web。从源码装:pnpm install && pnpm build,然后 dsh plugin --profile web add -w .。
使用
打开 设置 → 插件 → 厂商账号登录:
- 点某一家的登录按钮,在浏览器里完成授权。
- 流程若要求粘贴授权码或选择账号,直接在卡片里操作。
- 显示成功后,这家的模型立刻出现在模型选择器里——路由已由插件自动写进
llm-pi-ai。
「登出」只是本地删掉存的凭据,不会通知厂商吊销授权——要真正撤销,去各家账号页面操作。如果你后来给自动写的路由加过自己的配置(换了 baseURL、填了 apiKeyEnv、裁过 models),登出时它会保留。
配置
卡片显示哪几家由 vendor-login 命名空间的 vendors 字段决定,默认就是上表四家:
vendors: [anthropic, openai-codex, github-copilot, xai]
每一项都得是 pi-ai 自带登录方式的 provider id;填了别的,那一行会直接显示错误,而不是给你一个按不动的按钮。
注意与限制
/plugin/vendor-login/*没有自己的鉴权——这点和/api不同,/api前面还有apiproxy。替代的是一道跨站检查:Sec-Fetch-Site/Origin表明不是来自 dsh 自己页面的请求一律拒绝,POST 还必须是application/json(这是网页无法跨站直接发出、必然触发 preflight 的 content-type)。它挡住的是你随手开着的某个网页对本机做 drive-by 登出、drive-by 启动登录流程。但它不是鉴权:把webServer绑到本机之外,这些路由对任何能连上该端口的人依然暴露,插件启动时会打 warning。- 登录流程活在开着的连接里:登录中途刷新页面就得重来。
- 一家同时只能有一次登录尝试;第二个窗口会被以
ALREADY_IN_FLIGHT拒绝。 - xAI 可能按订阅档位限制 OAuth 接口——部分标准档 SuperGrok 账号能完成登录、但推理返回 HTTP 403(实例)。遇到就改用 console.x.ai 的 API Key 走「模型」页配置。
发现 bug,或某家的登录政策变了?提个 issue。
许可证
MIT