github-oauth-plugin: OAuth Integration with GitHub in DSH, Credentials Encrypted with AES-256-GCM and Persisted to Disk

前言

在 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
羽毛球分组比赛记分
小程序二维码

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

Xiaoye