dsh-plugin-github:在 DSH 里绑定 GitHub 并完成克隆、读写与提交推送

前言

在 DeepSeek Harness(DSH)里让智能体操作真实仓库,常见做法是自己在会话里贴路径、手动跑 git,或把 PAT 写进对话。这样既难复现,也容易把凭证带进模型上下文。社区插件 dsh-plugin-github(维护者 liufangrui1105,分类:联网工具)把「账号绑定 + 本地 git + GitHub REST」收成一组 gh_* 工具,由智能体在配置好的边界内调用。插件为纯 ESM JavaScript,无构建步骤、零运行时依赖,也不依赖 @deepseek-ai/* 包,降低加载失败风险。

下面介绍它做什么、如何安装,以及一条可复现的典型流程。

这是什么

dsh-plugin-github 用于把 GitHub 仓库接到 DSH:在授权范围内让智能体克隆仓库、读改文件、提交,并在显式开启写权限后推送到远端。首次需要凭证时会引导绑定 GitHub 账号(Personal Access Token),之后默认沿用已绑定账号。凭证按文档设计不会写入仓库、命令行或模型上下文(详见仓库 README 中的 Security model)。

核心功能

插件通过下列工具暴露能力(名称与行为以 README 为准):

工具 作用概要
gh_account 绑定、列出、切换默认账号、移除、查看状态
gh_repo 克隆或拉取已有克隆、状态、diff、log、分支、创建远端仓库
gh_file 按行号窗口读取、列表、整文件写入/创建、精确替换编辑
gh_commit 暂存并提交;push: true 可一步提交并推送
gh_push 推送到 origin(受 allowPush 约束;force 仅 --force-with-lease 且需 allowForcePush)
gh_pull 从远端拉取(默认 --ff-only;可选 rebase: true)
gh_config 查看/设置凭证相关配置(status 不返回 token)
gh_api 直接调用 GitHub REST API;写操作需 allowApiWrite: true

默认偏安全:allowPush、allowApiWrite 均为 false,写远端或 API 写操作须在 profile 配置里显式打开。本地路径受 workspaceRoot 限制,仓库名还可配合 allowRepos 白名单。

安装与启用

需要 Node.js ≥ 20。安装命令须使用资料中的完整写法(github:liufangrui1105/dsh-plugin-github),安装后完全退出并重启 DSH,再让智能体列出可用的 gh_* 工具。

指定 profile 安装:

dsh plugin --profile <your profile> add github:liufangrui1105/dsh-plugin-github

桌面 profile 示例:

dsh plugin --profile desktop add github:liufangrui1105/dsh-plugin-github

也可从本地目录或打包产物安装:

dsh plugin --profile desktop add ./dsh-plugin-github
dsh plugin --profile desktop add ./dsh-plugin-github-0.1.0.tgz

卸载示例:

dsh plugin --profile desktop remove dsh-plugin-github

升级:对 GitHub 源再次执行 add github:liufangrui1105/dsh-plugin-github 让 pnpm 重新解析,然后重启 DSH;热重载不会重新拉取依赖。

绑定账号与配置写权限

推荐:首次需要凭证时,插件会弹出输入框要求 PAT,校验 /user 通过后保存并设为默认账号。也可显式调用:

gh_account(action="bind")
gh_account(action="bind", token="ghp_xxxx")

若希望 token 不出现在会话记录中,可在启动 DSH 前设置 GITHUB_TOKEN,或写入 $DSH_HOME/.credentials.yaml 的 refs:。解析顺序(先命中先用):已绑定账号 → 环境变量 → .credentials.yaml 的 refs: → 工作区 .env。只读至少需要 PAT 的 repo 范围(细粒度 token 上 Contents: Read);读写需 Contents: Read and write。

在 profile 的 cordis.patch.yml 里,插件行的 config: 会整体替换(非深度合并)。开启推送与 API 写的示例:

- id: github-repo
  config:
    allowPush: true
    allowApiWrite: true
    allowRepos:
      - your-name/your-repo
    workspaceRoot: '/path/to/clones'

其他常用项包括:workspaceRoot(克隆根目录,所有 gh_* 路径限制在其下)、allowRepos(仅接受 owner/repo 形式,不接受完整 URL)、allowForcePush、allowApiReadOutsideAllowlist、gitExecutable、commandTimeoutMs、maxDiffChars / maxReadChars 等,默认值见 README 配置表。

典型用法

README 给出的常见顺序如下,适合「克隆 → 改文件 → 提交 → 推送」一类任务:

gh_account(action=bind)
  → gh_repo(action=clone, repo="owner/repo")
  → gh_file(action=get/edit/put)
  → gh_commit(message="…")
  → gh_push()

只读场景可在未开 allowPush 时完成 clone、get、diff、log 与只读 gh_api GET/HEAD。

适用场景与注意

适合需要在 DSH 会话里闭环操作 GitHub.com 上自己有权访问的仓库 的开发者:查代码、小改、本地提交,以及在明确打开 allowPush / allowApiWrite 后推送或调 Issues、PR、Actions 等 API。

使用前请注意:

  1. 插件以当前 DSH 进程权限运行,安装前建议阅读源码与 MIT 许可证,并理解 README 中的授权与安全模型。
  2. 社区目录(如 skillhub.cn)为独立站点,与 DeepSeek / 幻方无官方从属关系;DSH 生态强调「一切皆插件」,本插件为社区贡献,非官方内置能力。
  3. 默认禁止强推与非 GitHub 远端;自托管 Git 需 allowNonGithubRemotes: true,并理解 PAT 可能被发往非 github.com 主机。
  4. 多账号:多次 bind 会累积,最近绑定的为默认;用 gh_account(action="use", login="…") 切换。

结尾

dsh-plugin-github 把 GitHub 账号、本地 git 与 REST API 统一成 gh_* 工具,默认只读、写操作可配置,适合在 DSH 里做可审计的仓库协作。进一步了解可打开 社区目录页 与 GitHub 仓库 README。

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

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

Xiaoye