前言¶
在 DeepSeek Harness(DSH)裏讓智能體讀 issue、查倉庫、改文件,通常繞不開 GitHub API 和 access token。自己把 token 寫進環境變量或配置文件,輪換和多人協作都麻煩;直接在對話裏粘貼 token 也不合適。社區維護者 MFCJ45681 的 github-oauth-plugin(npm 包名 @local/github-oauth,版本 1.0.0,MIT)走 authorization code + 網頁回調 的 GitHub OAuth,把 client_secret 與 token AES-256-GCM 加密後寫入本機 vault,並同時提供對話內 github_* 工具、右側欄面板和 設置 → GitHub 頁面。下面介紹它是什麼、怎麼裝、怎麼用。
這是什麼¶
一句話:DSH 的 聯網工具 類插件,用同源路由 /plugins/github-oauth/* 完成 OAuth,憑據與倉庫偏好進加密庫,Agent 通過 15 個 github_* 原生工具調用 GitHub REST API。
- 維護者:MFCJ45681
- 目錄頁:https://www.skillhub.cn/plugins/MFCJ45681/github-oauth-plugin
- 源碼:https://github.com/MFCJ45681/github-oauth-plugin
插件自帶內置默認 OAuth App(lib/default-app.js),裝好即可登錄,不必先去 GitHub 創建應用;也可隨時換成自己的 OAuth App。
核心功能¶
OAuth 與界面¶
- 授權流程:生成一次性 state,瀏覽器在 GitHub 授權頁點同意,回調
/plugins/github-oauth/callback換 code 並加密存 token。 - 右側欄 GitHub 面板:登錄狀態、倉庫速覽;未連接時可通過面板登錄。
- 設置 → GitHub:更換 OAuth App、切換/移除賬戶、管理默認倉庫與固定倉庫。
- 輸入框下方賬戶按鈕(緊挨權限管理):默認只顯示頭像,點擊展開多賬戶列表並一鍵切換;偏好在加密 vault 內,與憑據一併管理。
加密憑據庫¶
| 項目 | 做法 |
|---|---|
| 算法 | AES-256-GCM(node:crypto),每條記錄隨機 12 字節 IV |
| 主密鑰 | <DSH_HOME>/github-oauth/master.key,或環境變量 GITHUB_OAUTH_MASTER_KEY(經 scrypt 派生) |
| 數據文件 | <DSH_HOME>/github-oauth/vault.json(AEAD 信封,權限 0600,原子寫) |
| 覆蓋範圍 | client_secret、access/refresh token、賬號信息、倉庫偏好;對外只暴露 clientIdMasked,不回顯 secret 與 token |
GITHUB_OAUTH_DATA_DIR 可覆蓋數據目錄。解密失敗會拋 E_VAULT_DECRYPT,提示主密鑰不匹配或文件被篡改。
Agent 工具(15 個)¶
對話內可調用的工具包括:github_auth_status、github_auth_setup、github_auth_start、github_auth_logout、github_accounts、github_account_switch、github_account_remove、github_api_request、github_repo、github_issues、github_pulls、github_search、github_file、github_create_issue、github_preferences。
github_repo、github_issues、github_pulls、github_file、github_create_issue 的 repo 可省略,此時使用設置裏的默認倉庫;未設置則返回 E_NO_REPO。github_repo 等默認會在結果後追加「倉庫上下文」(元數據、頂層文件樹、README 摘要),傳 withContext: false 可關閉。
所有工具返回統一信封(ok / code / text / data 等);失敗爲 ok: false 並帶中文提示,不中斷多工具回合。
默認 OAuth 權限(scopes)¶
插件請求:repo read:user user:email。如需更小權限,需改 lib/oauth.js 的 DEFAULT_SCOPE 後重裝。
安裝與啓用¶
推薦用 DSH 官方插件命令(等同插件市場安裝方式):
dsh plugin --profile web add github:MFCJ45681/github-oauth-plugin
# 然後重啓 DSH(正在運行的進程不會重新加載 bundle)
離線等價方式(資料中的源碼安裝腳本,非 git clone 流程描述):
DSH_PROFILE_DIR=/root/projects/.dsh/profiles/web ./install.sh
dsh plugin add 會通過 pnpm 安裝到 <profile>/node_modules/@local/github-oauth 並寫入 dsh.profile.bundles。卸載可用 dsh plugin --profile web remove @local/github-oauth,或倉庫內 ./uninstall.sh [--purge](--purge 同時刪除加密憑據庫)。
運行環境:package.json 要求 Node >=20;客戶端注入面向 web profile(cordis.patch.yml 補丁 bundle)。
安裝後必須重啓 DSH,否則 bundle 不會加載。
典型用法¶
第一次登錄(推薦路徑)¶
- 右側欄
+→ GitHub →「使用 GitHub 登錄」,在 GitHub 頁授權一次即可。 - 若瀏覽器通過局域網 IP 訪問 DSH,需確認回調地址與 DSH 對外 URL 一致;可用工具
github_auth_start({ publicUrl: "http://<ip>:3080" })或按面板提示操作。
換成自己的 OAuth App(可選)¶
- 打開 https://github.com/settings/developers → New OAuth App
- Homepage URL:你的 DSH 地址(例如http://127.0.0.1:3080)
- Authorization callback URL:http://127.0.0.1:3080/plugins/github-oauth/callback - 在 設置 → GitHub → OAuth App → 使用自定義 OAuth App 填寫 Client ID / Client Secret,保存即生效;或由 Agent 調用:
github_auth_setup({ "clientId": "...", "clientSecret": "..." })
CLI 等價:
node scripts/configure.js set --client-id Iv1.xxxxxxxx --client-secret-stdin
切回內置應用:github_auth_setup({ useDefault: true }) 或 node scripts/configure.js use-default。
多賬戶¶
composer 下拉「添加其他賬戶…」或面板登錄走同一 OAuth 流程;在輸入框賬戶按鈕或 設置 → GitHub 切換 @login,已保存 token 無需重新授權。移除賬戶可用設置頁或 github_account_remove({ login })。
在對話裏查倉庫¶
配置默認倉庫後,Agent 可直接調用例如 github_issues、github_file 而省略 repo;任意 REST 可用 github_api_request。
適用場景與注意¶
適合:在 DSH web profile 裏做 issue/PR 協作、讀倉庫文件、搜索代碼,並希望 token 留在本機加密庫而非明文配置裏的開發者。
注意:
- 插件以當前 DSH 進程權限運行,HTTP 路由
/plugins/github-oauth/*爲同源本機服務;安裝前應閱讀源碼與 MIT 許可證,自行評估信任邊界。 - 內置 OAuth App 的 client secret 隨插件分發,資料中說明其相當於公開信息;真正權限來自你在授權頁的同意。敏感環境建議改用自有 OAuth App。
- SkillHub 等社區目錄爲獨立站點,與 DeepSeek / 幻方無官方從屬關係;本文事實以倉庫 README 與
package.json爲準。
結尾¶
github-oauth-plugin 把 GitHub OAuth、AES-256-GCM 憑據庫、15 個 github_* 工具、右側欄與設置頁收進一個 DSH bundle,默認應用即可登錄,也支持自定義 OAuth App 與多賬戶切換。
- 目錄頁:https://www.skillhub.cn/plugins/MFCJ45681/github-oauth-plugin
- GitHub:https://github.com/MFCJ45681/github-oauth-plugin