github-oauth-plugin:在 DSH 裏用 OAuth 連 GitHub,憑據 AES-256-GCM 落盤

前言

在 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 不會加載。

典型用法

第一次登錄(推薦路徑)

  1. 右側欄 + → GitHub →「使用 GitHub 登錄」,在 GitHub 頁授權一次即可。
  2. 若瀏覽器通過局域網 IP 訪問 DSH,需確認回調地址與 DSH 對外 URL 一致;可用工具 github_auth_start({ publicUrl: "http://<ip>:3080" }) 或按面板提示操作。

換成自己的 OAuth App(可選)

  1. 打開 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
  2. 在 設置 → 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
羽毛球分组比赛记分
小程序二维码

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

小夜