前言¶
在 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)。
- 仓库:https://github.com/liufangrui1105/dsh-plugin-github
- 社区目录页:https://www.skillhub.cn/plugins/liufangrui1105/dsh-plugin-github
- 许可证:MIT(package.json)
- 运行要求:Node.js ≥ 20(DSH 自带运行时即可)
核心功能¶
插件通过下列工具暴露能力(名称与行为以 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。
使用前请注意:
- 插件以当前 DSH 进程权限运行,安装前建议阅读源码与 MIT 许可证,并理解 README 中的授权与安全模型。
- 社区目录(如 skillhub.cn)为独立站点,与 DeepSeek / 幻方无官方从属关系;DSH 生态强调「一切皆插件」,本插件为社区贡献,非官方内置能力。
- 默认禁止强推与非 GitHub 远端;自托管 Git 需
allowNonGithubRemotes: true,并理解 PAT 可能被发往非 github.com 主机。 - 多账号:多次
bind会累积,最近绑定的为默认;用gh_account(action="use", login="…")切换。
结尾¶
dsh-plugin-github 把 GitHub 账号、本地 git 与 REST API 统一成 gh_* 工具,默认只读、写操作可配置,适合在 DSH 里做可审计的仓库协作。进一步了解可打开 社区目录页 与 GitHub 仓库 README。