@ptfm/dsh-github:把 GitHub 接进 DeepSeek Harness,token 不进模型上下文

前言

在 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 若已设置,会覆盖本地存储,便于临时切换身份。

核心功能

三条登录路径

  1. Personal Access Token:在设置页粘贴;插件会先请求 /user 校验,通过才落盘。
  2. OAuth Device Flow:无需 client_secret。在 GitHub 创建 OAuth App 并勾选 Enable Device Flow,把 client_id 填进设置页;「开始授权」后按 8 位码在浏览器确认。插件只保存 client_id。
  3. 纯 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。

典型用法

  1. 完成安装并在设置页或 CLI 登录。
  2. 在 agent 对话中直接描述 GitHub 任务(如查 open issue、看 PR CI、搜代码),agent 调用对应 github-* 工具;需要本地 git 操作时,shell 可使用注入的 DSH_GITHUB_TOKEN。
  3. 使用 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。

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

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

Xiaoye