前言¶
在 DeepSeek Harness(DSH)里让 agent 处理 GitHub,常见做法是挂一个「GitHub MCP」或让模型自己拼 curl。前者往往把 Personal Access Token 写进对话或工具链里,后者既难审计权限,也容易在日志里泄露凭据。若你希望 agent 能像你在终端里一样读仓库、翻 issue 与 PR、查 Actions、发评论,又不想让 token 经过模型上下文,就需要一条「登录一次、宿主内调 API」的接入路径。
下面介绍社区插件 @ptfm/dsh-github(仓库 w32394045-dotcom/dsh-github),维护者为 w32394045-dotcom,在 SkillHub 目录中归类为联网工具。它在 DSH 设置页或 CLI 完成 GitHub 登录后,向 agent 暴露 12 个 github-* 工具,并在需要时把 DSH_GITHUB_TOKEN 注入 shell,使 git / gh 与工具调用共用同一登录态。
这是什么¶
@ptfm/dsh-github 是 DeepSeek Harness 的 GitHub 接入插件:凭据落在本机 $DSH_HOME/github.json,插件在宿主内直接请求 api.github.com,模型只看到结构化返回。与其他「GitHub MCP」类方案相比,README 强调的核心差异是 token 不经过模型上下文。
当前 package 版本为 0.1.0,许可证 MIT,零运行时第三方依赖(仅 Node 内置模块与 DSH 服务接口)。
架构与凭据流¶
登录完成后,大致数据流如下(摘自 README 示意):
- DSH Web UI 设置 → GitHub 或 CLI 写入凭据;
- 插件宿主侧维护 12 个
github-*工具、/api/github精确路由,以及DSH_GITHUB_TOKEN注入; - agent 调用工具或跑 shell 时,均以你账号在 GitHub 上的权限为准。
环境变量 DSH_GITHUB_TOKEN / GITHUB_TOKEN 若已设置,会覆盖本地存储,便于临时切换身份。
核心功能¶
三条登录路径¶
- Personal Access Token:在设置页粘贴;插件会先请求
/user校验,通过才落盘。 - OAuth Device Flow:无需
client_secret。在 GitHub 创建 OAuth App 并勾选 Enable Device Flow,把client_id填进设置页;「开始授权」后按 8 位码在浏览器确认。插件只保存client_id。 - 纯 token CLI(不依赖 DSH 进程):
node lib/cli.mjs status # 状态 + 实时校验,永不打印明文 token
node lib/cli.mjs login --token <token> # 也支持 --stdin / 交互式隐藏输入
node lib/cli.mjs login --device --client-id <id>
node lib/cli.mjs whoami --json # 机器可读
node lib/cli.mjs token # 唯一输出明文的命令(stdout)
node lib/cli.mjs logout
安装后亦可通过 dsh-github 二进制(package.json 中 bin)调用同一 CLI。
12 个 agent 工具¶
| 工具 | 用途 |
|---|---|
github-search |
搜索 issue / PR / 仓库 / 代码 / 提交 |
github-status |
登录状态、账号、token scope、速率限制 |
github-account |
用户资料 |
github-repo |
仓库信息、目录树;action=local 读本地 .git/config(不消耗 API) |
github-issues |
列 / 读 / 建 / 评论 / 改状态 |
github-pulls |
列 / 读 / 建 / 评论 / review / merge |
github-branches |
分支列表、HEAD、建/删、compare |
github-actions |
工作流运行、job 与步骤、日志尾部、手动触发 |
github-releases |
Release 列表 / 详情 / 创建 / 修改 / 删除 / 资产 |
github-notifications |
通知:列未读、标记已读、归档、订阅 |
github-cloud |
Codespaces、自托管运行器、Actions 配额、Pages、Packages、Models,以及成本报告与闲置回收 |
github-api |
直通任意 REST 端点 |
repo 参数支持三级推断:显式传入 → 当前工作目录所属 git 仓库 → 设置里的默认仓库。在仓库目录内说「这个仓库的 open issue」即可,不必每次写全 owner/repo。
github-search 针对 GitHub 搜索接口更紧的限流(认证用户 30 次/分钟)做了分页、查询增强(如 @me、days:、无 repo: 时自动限定当前仓库)、90 秒短时缓存,以及 422/限流时的明确报错与替代建议。
云端成本护栏¶
Codespaces 等按使用计费。插件在 lib/lifecycle.mjs 集中规则,设置页与 github-cloud 共用,包括:
- 创建时默认较短空闲自动停止(默认 15 分钟);
- 计费类
create前预检现有环境与花费; action=reap闲置回收(支持dryRun=true);- 安全窗口内、
manual模式或持有 DSH 活跃租约时不误关;stop/delete对近期仍有活动的环境可拒绝,需force=true。
设置 → GitHub → 云端成本提供三种模式:平衡(默认)、极致省钱、手动;github-cloud action=cost 可查看成本报告与 README 中的省钱顺序说明。
权限与安全(插件侧行为)¶
- 能力完全跟随 token 自身 scope,插件不做二次裁剪。
- 存储文件权限 0600、原子写;
statusOf()仅返回掩码预览,不向浏览器序列化明文 token。 - scope 不足时,403/404 会提示缺哪个 scope、去哪补。
- 会产生费用的操作(如创建 Codespace、
dispatch工作流等)在工具描述中要求先征得用户同意。
安装与启用¶
Windows(PowerShell):
git clone https://github.com/w32394045-dotcom/dsh-github.git
cd dsh-github
powershell -ExecutionPolicy Bypass -File scripts\install.ps1
macOS / Linux:
git clone https://github.com/w32394045-dotcom/dsh-github.git
cd dsh-github
bash scripts/install.sh
安装器会幂等地将插件放入 $DSH_HOME/plugins/dsh-github,在目标 profile 登记 link: 依赖与 bundle,并用 DSH 自带 pnpm 完成链接。装完后打开 DSH → 设置 → GitHub → 粘贴 token;若插件未立刻出现,重启一次 DSH。
手动安装:在 profile 的 package.json 里把 "@ptfm/dsh-github": "link:<插件目录>" 加入 dependencies 和 dsh.profile.bundles,再执行 pnpm install。
典型用法¶
- 完成安装并在设置页或 CLI 登录。
- 在 agent 对话中直接描述 GitHub 任务(如查 open issue、看 PR CI、搜代码),agent 调用对应
github-*工具;需要本地 git 操作时,shell 可使用注入的DSH_GITHUB_TOKEN。 - 使用 Codespaces 或云相关能力前,先看
github-cloud的成本与模式设置;批量清理前可用reap的dryRun=true预演。
仓库 README 还提到备用上传脚本 scripts/upload-via-api.mjs:经 Git Data API 上传,用于 git 传输域不可用时的场景(属维护者提供的辅助脚本,非日常安装步骤)。
适用场景与注意¶
适合谁: 已在用 DSH、希望 agent 以你的 GitHub 账号做真实读写(issue/PR/Actions/Release/通知/部分云计算管理),且在意 token 不进入模型上下文的开发者。
使用前请知悉:
- 插件以当前 DSH 进程权限运行;安装与启用前请自行审阅 源码 与 MIT 许可证。
- 社区目录 SkillHub 插件页 与 GitHub 仓库由社区维护,与 DeepSeek / 幻方无官方从属关系;DSH 生态理念是「一切皆插件」,本文仅介绍该插件能力,不代官方背书。
- 宿主半边若曾处于加载失败状态,README 说明需重启 DSH 才能恢复;改插件代码时需留意 Cordis 对模块 specifier 的缓存等行为(见仓库「开发须知」)。
卸载:从 profile 的 package.json 删除 dependencies 与 dsh.profile.bundles 中的 @ptfm/dsh-github,重跑 pnpm install;可选删除 $DSH_HOME/plugins/dsh-github 与 $DSH_HOME/github.json。
结尾¶
@ptfm/dsh-github 把 GitHub 登录、12 个结构化工具、shell token 注入和云端成本护栏收进 DSH 一条链路:设置里登录一次,agent 在宿主内以你的权限调用 GitHub API,而 token 留在本机。进一步了解可访问 SkillHub 目录页 与 GitHub 仓库 README。