前言¶
在 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
- 在 Releases 下载
dsh-github-gate-<version>.tgz。 - 解压后,将解压目录(或持有该包的本地路径)交给
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 走审批链。