前言¶
智能体在编辑代码或配置后,往往需要知道当前修改是否符合项目既定的质量标准。传统的 CI 检查在提交时运行,与当前正在进行的对话过程割裂;如果在对话中运行,又容易打断上下文或消耗过多 token。
DSH(DeepSeek Harness)提供了「一切皆插件」的扩展能力。dsh-quality-gate 作为一个 turn-end quality gate,在每回合编辑完成、进入收口阶段时,自动运行项目声明的检查,将失败注入为修复指令,继续下一轮对话。
这是什么¶
dsh-quality-gate 是一个 DSH 插件,由 JayYuen666 维护。它将质量检查集成到 DSH 的 agent/turn-stopping 事件中,根据项目声明的白名单命令执行检查(pnpm check、cargo check、ruff check、tsc),并将结果作为修复指令注入下一轮对话。
它解决的问题是:在对话过程中,让 AI 按照项目规范持续验证代码,而不是等到对话结束才去跑一次 CI。
核心功能¶
回合收口触发¶
插件的钩子位于 DSH 的 agent/turn-stopping 事件。在回合即将结束时,它会读取本次会话中所有「成功」的文件编辑,向上遍历到最近的 manifest root,检测是否存在质量门禁声明,如果存在则执行。
三种结果¶
一次检查只有三种结果:
pass:命令真正完成且退出码为 0code-failure:命令运行并报告了代码错误not-run:命令从未运行(通常是因为项目未声明该命令)
未真正完成的检查永远不会被记录为通过;”无法运行”也不会与”代码错误”混淆——前者会注入”请手动确认”的提示,不写入记忆,也不会作为 gate-failure 发送到 lesson bus。
白名单命令¶
每个根目录只能声明四种命令之一:pnpm check、cargo check、ruff check、tsc。如果没有声明,该目录不会收到门禁。宁可没有门禁,也不要使用一个会确定性失败的命令。
runaway protection¶
修复指令的注入受到配额限制:
- 每个会话按回合分配配额,用完即止
- 达到配额上限后,会注入一条用户可见的说明,并停止自动修复
- 整个门禁执行有时间总预算,超时会注入失败而不是静默通过
不做的边界¶
- 不编辑代码
- 不阻止危险命令(那是 danger-guard 插件的职责)
- 不写入任何文件
安装与启用¶
安装命令如下:
dsh plugin --profile web add @jayyuen66/dsh-quality-gate
移除时使用:
dsh plugin --profile web remove @jayyuen66/dsh-quality-gate
安装前需要满足以下条件:
- Node.js >= 22.12
- DSH 版本 >= 0.2.1-rc.3
- 运行时依赖
@jayyuen66/dsh-plugin-shared已在同一个 registry 中安装
启用方式¶
- 确认层已挂载:
dsh --profile web --dump-config的输出末尾应出现# == @jayyuen66/dsh-quality-gate以及- id: quality-gate。该命令会重写配置文件的根 assembly,需同时检查 stdout 和 stderr。 - 在设置页面的插件列表中,找到 “quality-gate turn-end quality gate” 卡片,修改任意值并保存,将其从禁用状态切换为启用。
配置项¶
插件提供以下设置项(在 DSH 设置页面配置):
quality-gate.enabled:是否启用该插件quality-gate.sessionQuota:每个会话的修复配额(次数)quality-gate.sessionBudget:每个会话的总时间预算(秒)
适用场景与注意¶
适合在需要持续验证代码质量的项目中使用,特别是使用 pnpm、Cargo、Ruff 或 TypeScript 的项目。
使用前建议:
- 检查插件源码,确认符合安全要求
- 确认项目已正确声明要运行的命令
- 了解 DSH 的运行权限范围,避免因权限不足导致检查失败
短结尾¶
dsh-quality-gate 将 CI 检查融入对话流程,在回合收口时自动运行项目声明的质量门禁,将失败转化为修复指令,帮助智能体在对话中持续交付可用的代码。
插件目录:https://www.skillhub.cn/plugins/JayYuen666/dsh-quality-gate
GitHub:https://github.com/JayYuen666/dsh-quality-gate