前言¶
DeepSeek Harness(DSH)里的 LLM 接入通常按 API key 来做。官方 dsh-llm-pi-ai 走 API key 认证,不会执行 OAuth 登录或刷新。如果你已经有 Grok、GitHub Copilot、ChatGPT / Codex、Anthropic、OpenRouter、Kimi For Coding 等订阅,希望在自己的 DSH profile 里直接使用这些订阅,而不是再维护一组 API key,下面介绍 dsh-llm-oauth。
这是什么¶
dsh-llm-oauth 是一个 standalone OAuth / subscription-plan LLM plugin,仓库维护者是 ziyou979,许可证为 MIT。
它安装到指定的 DSH profile 中,不 patch Harness 仓库。插件复用已安装的 @earendil-works/pi-ai 模型目录,并使用 durable CredentialStore,让订阅 token 在请求路径上刷新。模型 id 来自已安装的 @earendil-works/pi-ai,本插件不维护私有模型表。
仓库地址:
https://github.com/ziyou979/dsh-llm-oauth
支持的订阅¶
插件支持的订阅 provider id 如下:
| 订阅 | Provider id |
|---|---|
| Grok | xai |
| GitHub Copilot | github-copilot |
| ChatGPT / Codex plan | openai-codex |
| Anthropic subscription | anthropic |
| OpenRouter | openrouter |
| Kimi For Coding | kimi-coding |
安装后,插件不会立刻把所有模型灌进选择器。只有启用后的 provider 才会列出模型;启用后,这些 provider 会出现在 Settings → Models,与 API-key 路由并列。
安装¶
先执行安装命令:
dsh plugin --profile web add github:ziyou979/dsh-llm-oauth
如果本地已经有一份 checkout,也可以用本地路径安装:
dsh plugin --profile web add ./dsh-llm-oauth
安装完成后,可以检查当前 profile 的配置层:
dsh --profile web --dump-config
从 git 安装时,profile 的 pnpm-workspace.yaml 可能需要允许 prepare 构建:
allowBuilds:
dsh-llm-oauth: true
Enable、Sign in、Disable¶
使用这三个概念时,先区分动作:
- Enable:注册 LLM 路由,provider 出现在模型选择器里。
- Sign in:把 token 写入本地凭据文件。
- Disable:从模型选择器移除 provider,但保留已存储的 token。
凭据存储在:
$DSH_HOME/pi-ai-oauth.json
如果未设置 $DSH_HOME,默认路径是:
~/.dsh/pi-ai-oauth.json
在 Web UI 的聊天里可以执行:
/oauth status
/oauth list
/oauth enable xai
/oauth login xai
/oauth disable xai
/oauth logout xai
以 xai 为例,一个常见流程是:
/oauth enable xai
/oauth login xai
/oauth status
如果需要终端登录,可以执行:
node bin/login.mjs --list
node bin/login.mjs xai
也可以在 settings.yaml 里直接启用 provider,不经过 UI:
llm-oauth:
providers:
xai: {}
Web 设置页与 HTTP API¶
Web UI 会提供 Settings → OAuth / Subscriptions 页面。这个页面用于管理订阅 provider,提供:
- enable
- disable
- sign in
- sign out
启用并登录后的 provider 会出现在 Settings → Models 里,与 API-key 路由并列。
插件还提供 same-origin Host HTTP API:
| Method | Path | Body |
|---|---|---|
GET |
/dsh-llm-oauth/status |
— |
POST |
/dsh-llm-oauth/enable |
{ "provider": "xai" } |
POST |
/dsh-llm-oauth/disable |
{ "provider": "xai" } |
POST |
/dsh-llm-oauth/login |
{ "provider": "xai" } |
POST |
/dsh-llm-oauth/logout |
{ "provider": "xai" } |
ChatGPT / Codex 的设备码登录¶
openai-codex 走的是 ChatGPT / Codex plan 的 OAuth 登录,不是普通 OpenAI API key。
使用 openai-codex 前,需要先在 ChatGPT 中开启设备码授权:
- 打开 ChatGPT 的设置页,进入
Apps & connectors,或根据当前 UI 找到Connectors / Codex。 - 找到
Codex,开启Enable device code authorization for Codex。 - 回到
dsh-llm-oauth的OAuth / Subscriptions页面,对openai-codex执行 sign in。 - 打开授权 URL,并输入页面上显示的 code。
这里有一个明确的账号风险:通过 device code 或其他非官方客户端 OAuth 登录 Codex / ChatGPT,可能导致 ChatGPT 账号被限制或封禁。如果尝试这条路径,建议不要使用重要账号,也不要把它用于无法承受损失的付费账号。插件不能替你避免或撤销封禁。
与 llm-pi-ai 的边界¶
dsh-llm-oauth 面向订阅 / OAuth 路径。普通 API-key 路径仍按原方式处理。
需要注意:如果在 llm-pi-ai: 配置段里声明同一个 provider id,会抛出 DUPLICATE_ADAPTER。
可以按下面方式分工:
- 订阅 / OAuth:
dsh-llm-oauth - 普通 OpenAI API、DeepSeek 官方:继续使用 API key
限制与注意¶
下面这些限制来自插件说明,使用前要确认自己的需求是否命中:
- 模型列表跟随
@earendil-works/pi-ai;插件不维护私有模型表。 - 没有 image / vision 路径。
- 没有 full native replay signatures。
- 没有 in-browser OAuth callback server;使用 device code / open URL。
- 普通 OpenAI API 和 DeepSeek 官方仍走 API key。
Settings → Models里的 curated editors 面向 API key;OAuth enable 和 login 在Settings → OAuth / Subscriptions页面完成。
另外,插件安装进 profile 后,会由当前 DSH 进程加载并运行,并且会把 token 写入本机凭据文件。加入生产 profile 前,建议先检查 GitHub 源码、MIT 许可证和依赖;对 openai-codex 这类有账号风险的 provider,要谨慎使用。
结尾¶
dsh-llm-oauth 解决的问题很具体:在 DSH profile 里接入订阅制 LLM,同时保持它与 API-key 路由的边界。它不改 Harness 仓库,不维护私有模型表,也不替代普通 API key 路径。
GitHub 仓库:
https://github.com/ziyou979/dsh-llm-oauth