前言¶
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