dsh-lint-loop:面向改动的质量闭环,只修代理引入的新问题

前言

在 DeepSeek Harness(DSH)里让智能体改代码,常见困境是:仓库里本来就有 lint 警告、类型错误或失败用例,普通 lint 包装会把「旧账」和「本次改动引入的回归」混在一起展示;智能体要么被历史噪音牵着走,要么 lint 一过就宣称完成,却漏掉类型或受影响测试的退化。

下面介绍社区插件 dsh-lint-loop(维护者 lemonxiny55,分类:工作流)。它在首次编辑前抓取基线证据,只让可归因的新回归驱动修复与续跑,历史失败仍记录在案但不当作本次必须清零的目标,并在结束时给出可核查的 Quality Receipt。

这是什么

dsh-lint-loop 是面向 DeepSeek Harness 的 change-aware quality loop(改动感知质量闭环)。官方简介概括为:Fix what the agent broke. Ignore what was already broken. Prove the change is clean.

与「每次全量 lint、新旧问题不分」的做法相比,它对比代理改动与第一次编辑前捕获的证据:保留历史失败可见,安全修复新的 lint 回归,并在完成前校验类型与受影响测试。当前 npm 版本为 0.6.0(Quality Loop)。插件不捆绑 linter、编译器或测试框架,依赖仓库已安装的工具;支持 Node 22/24,DSH peer 策略见仓库说明。

核心功能

只 steer 新回归

旧 lint、类型、测试失败会继续记录为历史债务;默认门禁只对可归因的新回归发起 bounded continuation(每轮默认最多两次强制续跑、两次 autofix)。读操作与失败的写入不会进入变更集;不用 stash、worktree reset 等方式「伪造」基线。

双车道(Two speeds)

Fast Lane: 沿用「编辑 → lint delta → 提示反馈」;lint_repair 仅安全修复本回合的 lint 回归,不会通过改代码去修类型/测试失败。

Completion Lane: 在 agent/turn-stopping 检查点或调用 quality_verify 时,用原始基线对本回合文件做完成校验;首次编辑前一次性捕获 Node/TS typecheck 与测试基线(初捕可能有独立预算)。同一回合内的 completion-gate 续跑保留整回合范围;用户新回合不会继承已结束回合的基线。

Quality Receipt

完成态会输出结构化 Quality Receipt:实际执行的命令、跑过的测试、修复项、忽略的债务、缺失证据等。clean 表示在执行范围内没有新回归,不等于整个仓库全部通过;缺基线、不支持的 runner、跳过测试、发现上限、畸形输出或超时会得到 incomplete,不会冒充全绿。

演示仓库 dsh-lint-loop-demo 公开了桌面端实测收据与 provenance(例如:保留 17 条历史 lint、2 条新回归被安全 autofix、受影响测试 12/12、lint/types/tests 为 clean)。

模式预设

默认使用 balanced;可在 profile patch 里覆盖 lint-loop 插件行:

- id: lint-loop
  config:
    mode: balanced
预设 Fast Lane Completion Lane Sweep budget
fast lint delta + 按需安全修复 仅 lint;显式跳过 types/tests 60s
balanced(默认) 同上 lint delta、仓库包 typecheck、保守 fallback 的 impacted tests 60s
strict 同上 lint delta、仓库包 typecheck 与仓库包测试套件 120s

fast 会刻意产生 incomplete 的「全质量」收据;strict 扩大测试范围,仍忽略历史失败且不做无限工作量。

工具一览

工具 用途
quality_verify 只读 Completion Lane,返回完整 Quality Receipt
quality_receipt 取本会话/仓库最近一次收据,不重新跑检查
lint_status 本回合 lint 回归与 ignored debt
lint_repair 有界、仅回归范围的安全 autofix;编辑后调用
lint_diagnostics 文件级发现;scope: all / introduced / preexisting 等
lint_workspace_errors 本会话检查过的文件中的 error,含回归范围
lint_fix 单文件修复;有基线时强制 regression-only

关键词显示插件可与 eslint、biome、ruff 等生态配合(具体选择由仓库与 linters / linterPath 配置决定)。

安装与启用

将 npm 包装入你的 DSH profile(把 web 换成实际 profile 名):

dsh plugin --profile web add dsh-lint-loop@0.6.0

桌面用户也可通过 DSH 的 plugin_manager 安装 发布包 v0.6.0。本地开发时可在仓库内 pnpm install --frozen-lockfile 与 pnpm build 后,用绝对路径 dsh plugin --profile web add /absolute/path/to/dsh-lint-loop 挂载。

典型用法

1、安装插件并确认仓库内已有项目自带的 lint / typecheck / test 命令(插件不自带这些工具)。

2、在智能体开始改文件前,插件会在首次编辑前捕获基线;之后每次编辑走 Fast Lane 的 lint delta 与可选 lint_repair。

3、回合结束前依赖 Completion Lane 或主动调用 quality_verify,阅读 tool result 中的 Quality Receipt;需要回顾时可用 quality_receipt 读取最近一次结果。

4、若要复现 README 中的 walkthrough,可参考 dsh-lint-loop-demo 与仓库 assets/quality-loop-walkthrough.gif 对应说明。

Before → after 对比(README 摘要):

普通 lint 包装:旧债 + 新错一起展示,易漏 type/test 回归,lint 通过即可能宣称 done。

Quality Loop:Fast Lane 处理新 lint → 安全修复;Completion Lane 做 lint delta + types + impacted tests;
仅对新回归 steer(默认每回合最多两次);旧失败保留为历史债务;输出验证范围与最终裁决。

适用场景与注意

适合: 在 DSH 中做智能体编码、希望「别为历史 lint/测试背锅,但本次改动必须可证明干净」的团队;Node/TS monorepo 或带 eslint/biome/ruff 的多语言仓库(以仓库实际工具为准)。

注意:

  • 插件以当前 DSH 进程权限运行,安装前请阅读 GitHub 源码 与 MIT 许可证(见 package.json),确认符合你的安全与合规要求。
  • 社区目录 SkillHub 插件页 与 GitHub 为独立信息源;DSH 生态强调「一切皆插件」,该目录站点与 DeepSeek / 幻方无官方从属关系,勿当作官方应用商店。
  • 高级项(如 completionChecks、qualityTimeoutMs、gateMaxSteers 等)会覆盖预设;详见 README 的 Modes 与 Options 表。

结尾

dsh-lint-loop 把「代理改坏了什么、什么本来就是坏的、本次改动是否干净」拆开处理,用基线 + 双车道 + Quality Receipt 把质量闭环落到可核查的命令与测试范围上。若你在 DSH 工作流分类里找回归感知的质量门禁,可从目录页与仓库 README 入手安装 0.6.0 并按 demo 复现收据。

  • 目录页:https://www.skillhub.cn/plugins/lemonxiny55/dsh-lint-loop
  • GitHub:https://github.com/lemonxiny55/dsh-lint-loop
羽毛球分组比赛记分
小程序二维码

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

Xiaoye