dsh-llm-oauth:给 DeepSeek Harness 加订阅制 LLM 登录

前言

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 中开启设备码授权:

  1. 打开 ChatGPT 的设置页,进入 Apps & connectors,或根据当前 UI 找到 Connectors / Codex
  2. 找到 Codex,开启 Enable device code authorization for Codex
  3. 回到 dsh-llm-oauthOAuth / Subscriptions 页面,对 openai-codex 执行 sign in。
  4. 打开授权 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
羽毛球分组比赛记分
小程序二维码

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

小夜