dsh-plugin-github:给 DSH 智能体装上 GitHub 检索能力

前言

用 DeepSeek Harness(DSH)搭智能体时,经常会遇到这类需求:让模型查某个仓库的元数据、找某个 repo 下的 issue、读一段源码文件。DSH 的理念是「一切皆插件」,这类联网检索能力不必自己从零接入,社区里已有现成实现。下面介绍的 dsh-plugin-github 就是其中之一:安装后智能体获得两个工具,可以直接检索 GitHub 仓库与 issue,并完整读取单个资源。

这是什么

dsh-plugin-github 是 moxingovo 维护的 DSH 插件,MIT 许可证,解决的问题是:让智能体以工具调用的方式访问 GitHub 公开数据,而不是靠人工粘贴内容。

两个工具分工明确:

  • github_search:使用 GitHub 原生搜索语法检索仓库与 issue/PR,例如 repo:vercel/next.js is:issue
  • github_get:完整读取单个资源——仓库元数据、issue/PR 正文,或解码后的文件内容。

插件默认匿名可用,匿名限流为每 IP 每小时 60 次请求;配置一个只读 fine-grained token 后,可解锁代码搜索,并把限流提升至每小时 5000 次。设计上只读:插件从不创建 issue、评论或代码。

安装与启用

官方安装命令:

dsh plugin --profile web add dsh-plugin-github

README 也给出了从 Git 直装的等价命令:

dsh plugin --profile web add git+https://github.com/moxingovo/dsh-github

安装后重启 dsh web,新会话会自动获得 github_searchgithub_get 两个工具,没有额外的注册步骤。

可选 token:解锁代码搜索与更高限流

匿名模式下大部分功能都能用,只有代码搜索和更高的限流需要 token。先在 GitHub 创建 fine-grained personal access token,Repository access 选 Public Repositories (read-only),再把它放进环境变量或 $DSH_HOME/.env

GITHUB_TOKEN=github_pat_...

不配置 token 一切照常,匿名可用;token 只影响代码搜索和限流额度。

配置项

经过上面的步骤,插件已经可用。需要调优时,插件提供四个字段:

配置项 默认值 说明
tokenEnv GITHUB_TOKEN 存放可选 token 的环境变量名
requestTimeoutMs 30000 单次请求超时(毫秒)
searchMaxPerPage 30 github_search 的单页数量上限(API 上限为 100)
fileMaxChars 200000 github_get 读文件的字符上限(值级截断,带 truncated 标志)

覆盖方式是在 profiles/web/cordis.patch.yml 中修改任意字段,后层按行优先。

错误码

工具失败时返回带结构化错误码的错误,排查时可对照:

  • GITHUB_UNAUTHORIZED:401,常见于无 token 时调用代码搜索;
  • GITHUB_FORBIDDEN:403,限流或权限不足;
  • GITHUB_NOT_FOUND:404;
  • GITHUB_API_ERROR:422 或其他非 2xx 响应;
  • GITHUB_BAD_RESPONSE:响应体不是 JSON;
  • GITHUB_REDIRECT_REFUSED:凭据安全防护,请求重定向被拒绝;
  • GITHUB_REQUEST_FAILED:网络错误;
  • GITHUB_FILE_TOO_LARGE:大于 1MB 的文件不会被 API 内联返回。

安全设计

token 相关的约束有三条:

1、token 只从环境变量读取,不会进入配置文件、日志或工具输出;
2、所有请求拒绝重定向,token 不可能被转发到其他源;
3、token 只发送到 api.github.com

配合前面提到的只读设计,这套插件对 GitHub 既不能写,也不会把凭据带出预期范围。

附带的 skills

插件在 skills/ 目录附带两个 skill:plugin-tool-github 讲工具用法,plugin-web-github 讲服务配置与错误码。把它们复制进 harness 的 skills 目录,智能体会在调用工具前先查阅,减少误用。

已知问题与规避

上游 DeepSeek Harness 的早期 rc 版本声明了一个未发布的 peer dependency:dsh-agent 0.0.1-rc.1/rc.2 与 dsh-session 0.0.1-rc.1/rc.2 都依赖 @deepseek-ai/dsh-type-meta,而这个包尚未发布到 npm。新安装的解析器若落在这些版本上,会因 @deepseek-ai/dsh-type-meta 报 404(在 pnpm 11 与 npmmirror 镜像下复现;npm 会解析到 0.0.1-rc.5 并正常安装)。

两种规避方式:

1、用 npm 配合仓库提交的 package-lock.json 安装(npm ci);
2、在一个已安装好的 harness workspace 内执行 dsh plugin add,其 lockfile 锁定了可解析的版本。

这是上游 rc 阶段的发布问题,上游修复元数据后会自然消失。另外,若要参与插件本身的开发,要求 Node 22+,仓库内执行 npm ci && npm test 即可,测试套件完全离线运行(HTTP 已 mock)。

适用场景与注意

适合的场景:

  • 让智能体引用某个仓库真实的 issue/PR 讨论;
  • 查仓库元数据、读解码后的源码文件;
  • 只需要检索公开数据,不需要任何写操作。

注意两点。其一,匿名限流是每 IP 每小时 60 次,高频使用请按上文配置 token;其二,插件以当前 dsh 进程的权限运行,安装前建议先检查源码与许可证——本项目为 MIT,源码在 GitHub 上可查。

结尾

回顾一下:dsh-plugin-github 用 github_searchgithub_get 两个工具覆盖了 GitHub 检索的主要场景,匿名可用、只读设计、token 可选。如果你在用 DSH 搭智能体,需要接入 GitHub 公开数据时可以从它开始。

  • 社区插件目录页:https://www.skillhub.cn/plugins/moxingovo/dsh-github (社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系)
  • 源码仓库:https://github.com/moxingovo/dsh-github
羽毛球分组比赛记分
小程序二维码

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

小夜