DeepSeek Harness 怎么做 GitHub 代码评审?DSH plugin webhook 与会话
DeepSeek Harness 的 github-review overlay 给 dsh web 加一个签名 GitHub 端点:当已配置仓库的 pull request 从 draft 变为 ready for review 时,规则会在该仓库的 Web Workspace 下创建带标题的根 Session,并启动只读评审提示词——默认监听 127.0.0.1:3081,密钥走 DSH_GITHUB_WEBHOOK_SECRET(来源)。
DeepSeek Harness GitHub 评审 overlay 是什么、要准备什么
这是一个可选 overlay,把「PR 转正式评审」这个事件变成一次自动的只读代码评审会话;要跑起来得先备好四项前置(来源)。 逐项确认:
- 本地 checkout — 准备一个能被 DeepSeek Harness 注册为 Web Workspace 的仓库目录。预期:overlay 默认用启动目录当 Workspace,你也可以显式指定。
- 高熵 webhook 密钥 — 生成一个密钥并以
DSH_GITHUB_WEBHOOK_SECRET凭据引用访问。预期:GitHub 侧的 Secret 与它填同一个值。 - 公网入口 — 准备一个能把单个公共 URL 转发到 loopback 监听器的 TLS 反向代理或 tunnel。预期:GitHub 能访问到你的
/github端点。 - GitHub 侧订阅 — webhook 订阅
Pull requests事件,content type 选application/json。预期:只有 PR 相关事件会被推送过来。
评审会读代码、也可能用到插件能力。想先给评审会话加点插件(比如 skills 或工具类),可以从 DSH Plugin Hub 浏览社区插件,再按下面把它并进同一个 profile。
生成密钥、启动 DeepSeek Harness 并暴露 /github 端点
先生成并固定密钥,再用 --patch 加载 overlay 启动;主 Web UI 与 /api 仍在 3080,overlay 另挂一个只注册 POST /github 的监听器(来源)。 步骤:
- 生成并保存密钥 — 执行
export DSH_GITHUB_WEBHOOK_SECRET="$(openssl rand -hex 32)",并用printf '%s\n' "$DSH_GITHUB_WEBHOOK_SECRET"打印出来,重启后继续用同一个值。预期:密钥固定,签名校验才稳定。 - 在开发 checkout 里启动 — 设
DSH_GITHUB_REVIEW_WORKSPACE指向仓库,再执行pnpm dsh web --patch apps/cli/config/examples/github-review/cordis.yml。预期:overlay 被加载,监听 3081。 - 安装版用绝对路径 — 直接
dsh web --patch /absolute/path/to/github-review/cordis.yml。预期:效果与开发 checkout 一致。 - 做永久 profile — 把
github-ready-review-rule.mjs放到$DSH_HOME/profiles/web/cordis.patch.yml旁边,把cordis.yml里需要的行追加进该 patch,然后直接dsh web。预期:随附 CLI 已包含两个 webhook 包,只需 overlay 激活。 - 暴露端点 — overlay 在隔离 realm 里挂第二个 WebServer,只注册
POST /github、其他路径返回 404。用反向代理只放行该路径,例如 Caddy:
hooks.example.com {
route {
@github path /github
reverse_proxy @github 127.0.0.1:3081
respond 404
}
}
- 填 GitHub webhook — Payload URL 填
https://hooks.example.com/github,Content type 选application/json,Secret 填上一步的密钥值,Events 选Pull requests,Active 打开。预期:GitHub 侧配置就绪。
DeepSeek Harness GitHub 评审的规则行为与交付语义
规则只接受来源 primary-github、仓库 deepseek-harness/deepseek-harness、事件 pull_request 与动作 ready_for_review;它把精确 head SHA 与选定 PR 字段传给评审提示词,禁止改文件、分支、PR 或 GitHub 状态(来源)。 关键点:
- 会话参数是只读的 — Session 请求选择
standardagent preset 与read-onlypermission preset。预期:评审只读不写,不会动你的代码。 - 工作区被规范化 —
workspacePath通过WorkspaceRegistry.create()规范化,第一次匹配交付会在 Workspace 不存在时创建它,后续交付复用。预期:同一仓库稳定落到同一工作区。 202不等于成功建会话 — HTTP 响应刻意弱于 Agent 结果:202只表示签名与 JSON 已被接受、规则调用已在内存中调度。预期:别把202当成「已创建 Session」。- 交付无状态 — webhook runtime 不存储交付或执行状态,重复交付可能创建另一个 Session;崩溃会丢失尚未接纳提示词的规则调用。预期:提示词接纳后,工作才由普通 Session 日志、persistence、Workspace 与 Agent 生命周期拥有。
- 可程序化扩展 —
run()是普通受信任 JavaScript,可在返回 Session 请求前查询内部策略服务,或把仓库名映射到不同本地路径。预期:适合接入企业自己的评审策略。
注意事项与常见问题
- 密钥只管入站:
DSH_GITHUB_WEBHOOK_SECRET只验证来自 GitHub 的数据,不会向规则代码或所创建的 Agent 授予出站 GitHub 访问权;需要时单独配置。 - 小心重复触发:无状态设计意味着同一次交付重发就可能多一个会话,留意 GitHub 的重投递。
- 端口别冲突:3080 是主 Web UI,3081 是评审 overlay;换端口用
DSH_GITHUB_WEBHOOK_PORT。 - 会话日志与数据位置:评审产生的会话同样落在会话存储里,查阅见《DeepSeek Harness 会话记录在哪、怎么查》。
- 网络出不去:如果你的 DeepSeek Harness 在被代理的网络里,webhook 与模型调用都要过代理,见《DeepSeek Harness 怎么配网络代理》。
常见问题
DeepSeek Harness 的 GitHub 自动评审靠一个可选 overlay:当已配置仓库的 pull request 从 draft 变为 ready_for_review 时,webhook 规则会在该仓库的 Web Workspace 下创建带标题的根 Session,并启动只读评审提示词。
配置 DeepSeek Harness GitHub 评审需要四项前置:一个能被 DeepSeek Harness 注册为 Web Workspace 的本地 checkout、一个高熵 webhook 密钥存放为 DSH_GITHUB_WEBHOOK_SECRET、一个把公共 URL 转发到 loopback 的 TLS 反向代理或 tunnel,以及 GitHub webhook 订阅 Pull requests 事件且 content type 为 application/json。
DeepSeek Harness 的 GitHub 评审 overlay 默认把启动目录当作 Workspace,并在隔离 realm 里监听 127.0.0.1:3081,只注册 POST /github,其他路径返回 404;主 Web UI 与 /api 仍在 3080。可用 DSH_GITHUB_WEBHOOK_PORT 与 DSH_GITHUB_REVIEW_WORKSPACE 覆盖。
DeepSeek Harness 的 webhook 返回 202 并不等于已创建评审会话:202 只表示签名与 JSON 已被接受、规则调用已在内存中调度,不代表规则已匹配,也不代表已创建 Session。
会,DeepSeek Harness 的 webhook runtime 不存储交付或执行状态,重复交付会再次运行规则并可能创建另一个 Session;崩溃也会丢失尚未接纳提示词的规则调用。提示词被接纳后,工作才由普通 Session 生命周期接手。
相关术语
- overlay(叠加层)
- overlay 是 DeepSeek Harness 在不改动主应用的前提下追加能力的配置叠加,这里指给 dsh web 增加签名 GitHub 端点的那份 github-review 配置。— DeepSeek Harness 官方文档 - 通过 GitHub Webhook 创建评审会话
- DSH_GITHUB_WEBHOOK_SECRET
- DSH_GITHUB_WEBHOOK_SECRET 是 DeepSeek Harness 用来校验入站 GitHub webhook 签名的高熵密钥,需在启动环境中导出并与 GitHub 侧 Secret 填成同一个值;它只验证入站数据,不授予出站访问权。— DeepSeek Harness 官方文档 - 通过 GitHub Webhook 创建评审会话
- read-only permission preset
- read-only permission preset 是 DeepSeek Harness 中限制 agent 只读的权限档位;GitHub 评审会话使用它,配合 standard agent preset,禁止修改文件、分支、PR 或 GitHub 状态。— DeepSeek Harness 官方文档 - 通过 GitHub Webhook 创建评审会话
- ready_for_review
- ready_for_review 是 GitHub pull_request 事件的动作之一,表示 PR 从草稿变为待评审;DeepSeek Harness 的规则只接受该动作,并核对仓库与来源。— DeepSeek Harness 官方文档 - 通过 GitHub Webhook 创建评审会话
来源
- DeepSeek Harness 官方文档 - 通过 GitHub Webhook 创建评审会话· deepseek-harness
- dsh CLI README· deepseek-ai