前言¶
在 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