dsh-github-gate:面向 DSH 的带审批门 GitHub 工具

前言

在 DeepSeek Harness(DSH)里让模型读写 GitHub,常见矛盾是:读操作要顺畅,写操作不能靠模型自己一句「确认」就落地。不少 GitHub 类插件用 confirm: true 表达意图,但意图不等于人工同意。若还需要在 REST 上留 unrestricted 逃生舱,表面工具多,信任边界反而更难讲清楚。

dsh-github-gate(维护者 1273984347,社区分类 admin-security)把取舍写死在实现里:9 个类型化的 github_* 工具、共 61 个 action,凡改状态的动作都要 confirm: true,并经过模型无法伪造的人工审批缝;底层统一走 GitHub CLI(gh),用 argv 数组拉起子进程(shell: false),运行时依赖为 0。下面介绍它是什么、怎么装、日常怎么用,以及使用前需要接受的边界。

这是什么

一句话:dsh-github-gate 是挂在 DSH 上的 GitHub 工具包,让模型可以自由「看」仓库与 PR,但在合并、改 Issue、发 Release 等写操作前必须有人点同意。

与 README 中的对比表一致,它和「面更大、门更松」的同类插件差异主要在:

维度 常见做法 本插件
写安全 仅 confirm: true(由模型设置) confirm: true 且 人工审批缝(模型不能设置)
原始 REST 无限制逃生舱 路径须相对、禁止 ..,写方法在运行时分类并加门
自更新 — github_update 按 GitHub 公布的 sha256 校验后暂存,安装仍走平台流程

环境要求(资料原文):DeepSeek Harness >=0.2.0-0 <0.3.0,系统已安装 gh 且在 PATH 上;支持 Linux、macOS、Windows。Node >=18。

核心功能

九个 github_* 工具与写操作门

README 写明:61 个 action 中有 29 个标记为 destructive,需要 confirm: true 和 人工审批。模型传的 confirm 只表示「打算写」,不构成授权。典型链路如下:

github_pr { action: "merge", number: 42, confirm: true }
  → 弹出审批,写明该 PR;选「否」则中止
  → 同意后执行:gh pr merge 42 --repo owner/name

github_api 接受的四种写方法在运行时分类,不能靠拼 shell 把模型文本变成命令:gh 始终以 shell: false 启动。

凭证链与设置页

每次调用按顺序解析凭证:DSH credential store → 环境变量 GH_TOKEN / GITHUB_TOKEN → gh auth login → git credential helper。轮换 token 后下一次调用即生效。

GUI 路径:Settings → Plugins → GitHub:可粘贴 PAT、对 API 做连通测试、查看当前哪一层生效;token 不会回显。Device Flow 登录(github_auth { action: "login" })需要自备 OAuth App,README 有专节说明。

诊断用 github_auth { action: "probe" } 可逐层隔离失败原因;401 / 403(配额或 SSO)/ 404 / 422 等错误会指向可操作的修复说明,而不是只抛 HTTP 码。

分支胶囊(branch pill)

浏览器侧仅 client.js(约 26 KB)注入会话头 conversation.session.header.utilities:展示当前检出分支、该分支上的 PR,并提供切换分支菜单;在无法判断调用方身份时会 fail closed。插件在 webServer 上注册 /branch、/branches、/diagnostics、/switch 等 loopback 路由;无 connection 服务时读路由仍可用,并会打一条警告日志。

提示词片段与按需技能

除工具 schema 外,插件贡献 prompt section 与三个按需加载的 workflow skill:github-pr-review、github-ci-triage、github-issue-to-pr,用于说明何时用哪条能力、结论需要哪些证据、何时应停止。

摘要校验的自更新

github_update 会暂存 release,并对照 GitHub 公布的 digest 校验 sha256,再交给平台侧的安装/审批流程。

安装与启用

安装一律通过 Harness 插件管理器的 plugin_manager action install_bundle,不要用源码目录直接 link 安装(README 说明会产生 junction,导致 ERR_MODULE_NOT_FOUND 且插件无法激活)。

方式一:GitHub Release

  1. 在 Releases 下载 dsh-github-gate-<version>.tgz。
  2. 解压后,将解压目录(或持有该包的本地路径)交给 install_bundle。

方式二:自行打包

在源码目录外执行打包,再安装生成的 tgz:

npm pack --pack-destination ../packages

然后对 ../packages/dsh-github-gate-<version>.tgz 执行 install_bundle。修改源码后需重新 pack 并 reinstall;重启后加载新模块代。

一键下载脚本(不自动安装)

脚本只拉取最新 release、校验 sha256 并打印安装路径,真正安装仍须你经 install_bundle 并过审批:

# Linux / macOS
curl -fsSL https://raw.githubusercontent.com/1273984347/dsh-github-gate/main/install.sh | sh
# Windows
irm https://raw.githubusercontent.com/1273984347/dsh-github-gate/main/install.ps1 | iex

按脚本输出的路径再执行 install_bundle。

DSH 生态是「一切皆插件」;社区目录 SkillHub 上的条目 为独立站点,与 DeepSeek / 幻方无官方从属关系。

典型用法

工作区已配置 git remote 时,多数调用可省略 repo,默认对当前仓库操作。

1. 检查是否已有凭证

github_auth { action: "status" }
  → credential source: credentials-seam | environment | gh-cli | git-credential-helper | none

2. 没有凭证时

github_auth { action: "login" }    # Device Flow,需自备 OAuth App

或在 Settings → Plugins → GitHub 粘贴 PAT,或在终端执行 gh auth login,由凭证链自动拾取。

3. 排查认证问题

github_auth { action: "probe" }

4. 围绕 PR 工作

github_pr { action: "status" }                              # 当前分支 CI
github_pr { action: "view", number: 42 }
github_pr { action: "checks", number: 42 }
github_pr { action: "merge", number: 42, confirm: true }   # 触发人工审批

更完整的工具列表与 action 说明见仓库 README 的 What it provides 与 Safety model。

适用场景与注意

适合谁:需要模型在 Harness 会话里查 PR、CI、Issue、Release,但任何改仓库状态的操作都必须经真人点头;愿意接受工具面刻意收窄(9 工具 / 61 action),换更清晰的信任模型。

不适合谁:追求「工具越多越好、写操作尽量少拦截」——README 明确说这不是目标用户。

安全与合规:

  • 插件以当前 DSH 进程权限运行,能触达的仓库与 token 能力取决于你配置的凭证与本机 gh / git 状态;安装前请自行审阅 源码与许可证,勿在未信任的环境粘贴生产级 PAT。
  • PAT 与 OAuth 配置只应给必要 scope;审批缝减少误操作,不能替代代码审查与组织侧的 GitHub 权限策略。
  • 自更新虽校验 digest,是否应用新版本仍取决于你对 release 内容与变更日志的判断。

已知限制、后台任务等行为以仓库 Known limitations 为准;开发构建与测试说明见 Development(README 提到大量自动化测试与 argv shape 校验,属质量背书,非使用前提)。

结尾

dsh-github-gate 把 GitHub 写操作拆成「模型表达意图」与「人给出同意」两层,并用 gh 子进程与审批 UI 把后者钉死在平台侧。若你的 DSH 工作流需要在 GitHub 上读多写少、写必过人,可以从凭证状态与 PR 只读 action 起步,再在确有需要时带上 confirm: true 走审批链。

羽毛球分组比赛记分
小程序二维码

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

Xiaoye