前言¶
做智能體開發時經常有這類需求:讓 AI 查一下倉庫的 open issues、代提一個 issue、看看某次 Actions 的運行結果。常規做法要麼自己搭回調服務器接 OAuth,要麼把 Token 塞進各種腳本里來回傳遞,鏈路長,還容易把令牌暴露給第三方中轉。
dsh-github-connect 換了一種做法:在 DSH 對話框左下角放一個常駐按鈕,用 GitHub OAuth 設備流(或直接粘貼 PAT)完成授權,不建回調服務器、不經過第三方中轉。連接之後,AI 可以通過插件提供的 github_api 工具直接對 GitHub 發 REST 請求。下面介紹它的功能、安裝與使用。
這是什麼¶
dsh-github-connect 是一個 DSH 插件,作者是 Moon-shiyue,許可證爲 MIT(package.json 中聲明)。定位一句話:便攜式 GitHub 連接插件,連接後 AI 可通過 github_api 工具直接操作你的 GitHub。
所謂便攜,是指整個插件目錄拷到另一臺機器上裝好就能用:連接走 GitHub OAuth 設備流,瀏覽器輸入驗證碼即完成授權;令牌只保存在本機插件目錄的 .github-auth.json 文件裏。
核心功能¶
- 左下角常駐按鈕:composer 工具行左端顯示 GitHub 按鈕,綠點表示已連接。
- 兩種連接方式:OAuth 設備流(自填 Client ID,瀏覽器輸入驗證碼後自動輪詢)或粘貼 Personal Access Token(建議 fine-grained PAT)。
- AI 側
github_api工具:連接後 AI 可對api.github.com發 REST 請求,覆蓋 Issues、PR、倉庫、Gist、Actions 等操作,並自動附帶 system prompt 引導模型使用。 - 本地令牌存儲:
.github-auth.json(已 gitignore),面板裏可一鍵斷開。 - 自帶受信網絡層
lib/net.js(基於 undici):默認自動走代理,並處理系統 CA 信任。 - 零構建、零運行時框架:host 半是純 ESM,client 半是純
__ModuleLoader__模塊。 - 安裝腳本冪等:重複執行安全,並自動更新代碼。
安裝與啓用¶
最省事的方式是在 DSH 對話裏直接對 AI 說:
請你安裝這個插件:https://github.com/Moon-shiyue/dsh-github-connect
或者複製命令執行。Windows:
powershell -ExecutionPolicy Bypass -c "irm https://raw.githubusercontent.com/Moon-shiyue/dsh-github-connect/master/install.ps1 | iex"
macOS / Linux:
curl -fsSL https://raw.githubusercontent.com/Moon-shiyue/dsh-github-connect/master/install.sh | bash
一鍵腳本會自動完成克隆代碼、pnpm 安裝依賴、註冊進 profile(默認 web)三步。完成後重啓一次 dsh web 並刷新頁面,對話框左下角出現 GitHub 按鈕即安裝成功。
如果想手動裝,先克隆倉庫並安裝依賴,再把它以 link 方式註冊進 profile:
git clone https://github.com/Moon-shiyue/dsh-github-connect.git
cd dsh-github-connect
pnpm install
dsh plugin --profile web add link:<本目錄絕對路徑>
dsh web
裝完可以用下面的命令驗證,輸出中應包含 dsh-github-connect 一行:
dsh --dump-config --profile web
環境要求:Node >= 20.18.1(engines 聲明),依賴 undici ^7.29.0 與 @deepseek-ai/dsh-tools 0.1.1-rc.2,peerDependencies 爲 @deepseek-ai/cordis ^4.0.1。
連接與使用¶
1、點擊對話框左下角的 GitHub 按鈕,未連接時選擇一種方式:
- 設備流登錄:填入你自己的 GitHub OAuth App Client ID(在 github.com/settings/developers 創建,無需回調地址),按需調整 scopes,點「開始連接」,在打開的頁面輸入驗證碼,插件會自動輪詢直到授權完成;
- 粘貼 Token:填入 fine-grained PAT,建議只授予需要的倉庫與權限。
設備流的 scopes 默認爲 repo gist read:org workflow,可在面板中修改。插件不內置作者的 OAuth App,授權完全發生在「你的 App ↔ 你的賬號」之間。
2、看到「✓ 已連接」後直接對話即可,例如:
- 「把我賬號裏的 open issues 列出來」
- 「給 xxx/yyy 倉庫提一個 issue,標題…內容…」
3、想斷開時,面板裏點「斷開連接」(需二次確認)。斷開只刪除本地令牌文件;保險起見,也可以在 GitHub 的 Settings → Applications / Tokens 裏直接 revoke。
未連接時 AI 調用 github_api 會返回 401 結構錯誤,並提示先點左下角按鈕授權,不會卡死。
網絡與代理¶
插件自帶受信網絡層 lib/net.js,基於 undici,默認自動走代理,不需要設置任何環境變量。對每個 GitHub 請求,代理解析順序爲:
- 插件配置
proxy; - 環境變量
HTTPS_PROXY/HTTP_PROXY/ALL_PROXY(含小寫形式); - Windows 系統代理(自動讀取註冊表 WinINET 設置);
- 都沒有 → 直連。
NO_PROXY 同樣生效:環境變量與配置項 noProxy 都支持 *、host:port、.domain 後綴,默認豁免 localhost / 127.0.0.1。
系統 CA 信任方面:Windows 從系統證書庫導出根證書(緩存 30 天,自動刷新);macOS/Linux 讀取標準 CA 包路徑(如 /etc/ssl/certs/ca-certificates.crt)。這解決了本地 TLS 攔截代理導致的 unable to verify the first certificate,以及直連被重置的問題。所有步驟失敗都會回退到 Node 默認 fetch,插件不會因此崩潰。
需要手動指定代理時,在 profile 的 cordis.patch.yml 裏給該行加配置:
- id: dsh-github-connect
name: dsh-github-connect
config:
proxy: http://127.0.0.1:7890 # auto(默認)| direct | http(s)://host:port
noProxy: # 可選:這些主機不走代理
- localhost
- 127.0.0.1
適用場景與注意¶
適合的人羣:日常在 DSH 裏工作、希望 AI 直接讀寫自己 GitHub(查 issue、提 PR、看 Actions)的開發者,尤其是沒有條件自建回調服務、或在意令牌不經過第三方中轉的場景。
使用前需要注意幾點:
- 權限與審查:插件以當前 dsh 進程的權限運行,AI 連接後能以你的身份操作 GitHub。安裝前建議檢查源碼與許可證,PAT 按 fine-grained 最小權限授予,OAuth scopes 按需縮減。
- 令牌安全:令牌只保存在本機
.github-auth.json,除直接發送到api.github.com外不經過任何其他服務器。該文件已 gitignore,請勿分享或提交到 git。 - 排查「Token 無效」:先看報錯裏的具體原因。
Bad credentials說明令牌確實被 GitHub 拒絕(過期、撤銷或複製不完整);若是UNABLE_TO_VERIFY_LEAF_SIGNATURE或ECONNRESET/ETIMEDOUT,通常是本機有 TLS 攔截代理或需要走代理,網絡層會自動讀取系統代理與系統證書庫,重啓dsh web後一般即可用,仍失敗再按上文手動配置proxy。 - 卸載:
dsh plugin --profile web remove dsh-github-connect;若不再使用可刪除插件目錄,注意目錄內含.github-auth.json,刪除前先確認。 - 改代碼後如何生效:改 client 代碼刷新頁面即可;改 host 代碼(lib/index.js、lib/net.js)需要重啓
dsh web。
結尾¶
dsh-github-connect 把「讓 AI 操作 GitHub」壓縮成左下角一個按鈕:設備流或 PAT 授權,令牌留在本機,網絡層自動處理代理與證書。如果你的工作流裏 GitHub 高頻出現,值得一試。
- GitHub:https://github.com/Moon-shiyue/dsh-github-connect
- 社區目錄收錄頁:https://www.skillhub.cn/plugins/Moon-shiyue/dsh-github-connect (社區站點,與 DeepSeek / 幻方無官方從屬關係)