概览
iterate-plugin
README / ZH
插件文档
iterate-plugin for DeepSeek Harness (dsh)
dsh 桌面端的 iterate 质量指挥中心 + 经验银行插件(v3.2)。把 iterate 生态的同一套 review/fix loop 直接搬进 dsh 界面,新增质量门禁、经验银行、防御事件流与原生指挥操作。
开发与评审在 iterate-skill 主仓库 完成:插件代码由主仓库统一维护,通过
git subtree同步到本仓库;版本发版与 npm 发布在本仓库(插件仓库)进行,作为 dsh 生态的正式发布位。欢迎 star / fork 主仓库 并在 主仓库 Issues 反馈问题。
⭐ 如果这个插件对你的 dsh 工作流有帮助,欢迎为主仓库点亮 Star,这是对开源维护最大的支持!
iterate 生态一览 / The iterate Ecosystem
iterate 不是一个独立的工具,而是一套附着在现有 AI 助手之上的技能生态。 它不会替换你的 IDE 或 AI 工具,而是在你已有的工作流里,叠加一层"严格的代码收尾与把关"。整个生态由三个可互换组件构成,共用同一套 iterate.config.yaml 与同一套 9 维度审查体系:
- Core Skill + CLI / 核心技能与命令行 — 可移植 AI 技能
/iterate+iterateCLI。在 Trae / Claude Code / Cursor / Copilot / Codex 等 25+ 助手中以对话方式进行多轮迭代。 - iterate-harness / 无头引擎 — 独立无头引擎,命令
ih(npm:iterate-harness)。在终端 / CI / Git 钩子里脱离对话式助手,运行同一套闭环。 - iterate-plugin / dsh 桌面插件(本仓库) — dsh 桌面客户端插件(npm:
iterate-plugin)。把 harness 运行时直接接入 dsh 界面:收敛看板、分诊面板、轮次进度,均以原生 dsh 控件形式展示。
三者关系:Core Skill 是最通用的跨助手审查/修复引擎("大脑");iterate-harness 是同一引擎封装为无头 CLI + WebUI,适合跑在无需交互的场景;iterate-plugin(本仓库)把 harness 运行时进一步封装为 dsh 插件,直接在 dsh 桌面客户端内渲染分诊 UI 与收敛看板。配置(iterate.config.yaml)与 9 维度审查体系三者完全一致——理解其一,即可举一反三。
生态其余组件的快速安装/入口:
# Core Skill + CLI(一键安装到 25+ AI 编程助手)
npx iterate-skill-installer
# iterate-harness:无头引擎(npm 包装器,最简)
npm install -g iterate-harness
curl -fsSL https://raw.githubusercontent.com/jingzhao-l/iterate-harness/main/scripts/install.sh | bash
ih iterate init && ih iterate review
# iterate-plugin:dsh 桌面插件(本仓库,安装命令在下文「安装」一节重复列出)
dsh plugin --profile web add iterate-plugin
本文档从下一节开始聚焦 iterate-plugin(本仓库)。核心技能文档见 iterate-skill 主仓库,无头引擎文档见 iterate-harness 独立仓库。
这是什么 / About This Plugin
iterate 是一个让 AI 编程助手具备多轮自主代码审查与修复能力的开源项目。它解决很具体的痛点:
AI 助手往往"说得多、做得浅":一次对话只改几行、看过一个文件就不再管全局,也很少回头复核自己改坏的东西。iterate 把这些收尾工作——逐项审查、分维度排查、修复、验证、再迭代——自动化,让 AI 真正像资深工程师一样把改动做完、做对。
iterate-plugin 是 iterate 项目在 DeepSeek Harness (dsh) 桌面客户端中的落地插件。它把 iterate 的审查闭环(review → triage → fix → validate → 收敛)直接带进 dsh 的界面:提供自治闭环代码迭代(normal 模式)与 dry-run 纯多轮审查(只读)两种能力。
v3.2 质量指挥中心:插件已从"被动观察面板"升级为"主动指挥中心 + 知识库"。新增质量门禁读取与可写计算(compute)、经验银行(检索 / 采纳 / 新增 add)、防御事件流(记录 + 中英双语标签)、原生命令按钮与 task_mode 指示器。
除 17 个纯函数工具外,还内置一套免构建的 Web UI 层(收敛看板、分诊面板、统计卡片、10 标签页运行时观测台、主题皮肤等),直接挂在 dsh 客户端的既有 UI 槽位上。配置方式(iterate.config.yaml 与审查维度)与迭代生态的另外两个组件(技能 / 无头引擎)完全一致,迁移零成本。
📑 目录
✨ 特性
两种运行模式
插件与生态其他组件运行同一套 iterate 引擎,要么完全只读、要么作为自治修复闭环:
- dry-run(只读) — 反复多维度审查直到收敛,零文件修改。
- normal(自治) — 审查 → 原子修复 → 每轮验证 → 失败回滚 → 循环直到收敛。
两种模式共通:
- 多轮收敛反复审查
- 并行维度评审
- 确定性聚合 / 去重 / 排序
- meta-review 报告一致性审计
- 达标自停
- 断点保存 / 恢复(长迭代续跑)
normal 模式额外提供:
- 只修改 atomic 问题(architectural 问题保留待后续批准)
- 每轮修复后验证
- 修复失败自动回滚
UI 层(客户端免构建槽位,v3.2:10 个标签页)
- 收敛看板
ConvergenceDashboard(conversation.input.dock)— 输入框上方实时显示轮次进度条、严重度统计、维度徽章、趋势迷你图;normal 模式另显示修复计数徽章;还有运行阶段芯片(当前工作流阶段 + 运行中/已结束)与 v3.2 task_mode 指示器(code / iterate)。 - 运行时观测台
ObservatoryPanel(conversation.input.dock)— 输入框下方十个标签页运行时观测台:实时活动流(支持按活动类型筛选)、审查线程(支持全部展开/全部收起)、收敛趋势、发现定位(支持按严重度/维度/关键词筛选)、修复与回滚、断点恢复、决策时间线(支持按类型/轮次筛选与关键词搜索)。v3.2 新增标签:质量门禁(F8)、经验银行(F9)、防御事件(F10);支持一键导出全部观测数据为 JSON(优先下载,失败回退复制)。 - Findings 分诊面板
TriagePanel(conversation.chat.turnTail)— 逐条 y/n/a 判定,支持筛选、批量(含一键全选所有 findings)、键盘快捷键、localStorage 持久化、复制 YAML / 应用指令。v3.2:原生命令按钮(批准架构修复、触发新一轮、回滚到断点)。 - 收敛统计卡片
StatsCard(conversation.chat.turnTail)— 无 findings 时显示收敛统计、历史轮次、趋势图、完成摘要。 - iterate 主题皮肤(
theme.overrideTokens)— 暖琥珀配色的 13 个--dsw-*token 覆盖,明暗双模式,可在设置页开关。 - 进度胶囊
ProgressCapsule(shell.overlay)— 每轮完成 / 收敛时右下角弹出通知(含收敛确认)。 - iterate 设置区
SettingsPanel(settings.section)— 主题开关、分诊持久化说明、配置管理指引、运行时状态概览(产物布局 + 查看/清理工具指引)、一键清空分诊数据。
UI 层为防御式设计:slots / theme / React 任一不可用时自动降级,不会崩溃客户端。
工具之外的闭环行为
除 17 个注册工具(完整参考见下文)外,插件还端到端打通了几条关键闭环:
- findings 分诊闭环 — 审查 → UI 分诊(y/n/a)→
iterate_triage写回known_intentional→ 下一轮自动过滤 - 结构化修复系统 — 每次修复先备份、写注册表、记录 diff,验证失败可
iterate_rollback还原 - 断点续跑 — 长迭代在每轮开头保存 checkpoint,中断后可恢复进度
- 历史审计 —
iterate_history读取决策日志(按类型/时间/数量过滤)与修复注册表汇总,审查运行过程与修复明细 - 运行时清理 —
iterate_prune清理过期的决策日志条目、陈旧断点、孤儿修复备份与空轮次;默认 dry-run 只报告不删除,显式dryRun:false才真正清理,每次清理写入决策日志 - 配置读写 —
iterate_config支持带校验、备份、回滚的局部写入 - v3.2 经验银行 —
iterate_experience以检索 / 过滤 / 采纳查阅历史修复与模式,并可add持久化新的已验证修复——重复添加同一 pattern + dimension 时累加命中次数而非重复写入 - v3.2 质量门禁 —
iterate_quality_gate读取质量门禁状态(各维度收敛率 + PASS/FAIL),并可基于本轮 findings / 验证结果compute重新计算并持久化一份新的质量凭证(收敛率来自findingsByRound的真实收敛序列) - v3.2 防御事件流 —
iterate_defense_events查询防御事件(前置条件失败、回滚、不变量违反、假设证伪),并可record记录新事件;可读标签跟随项目语言(en / zh)
📦 安装
从 npm 安装
dsh plugin --profile web add iterate-plugin
# 或
pnpm add iterate-plugin
从 GitHub 安装(dsh 生态第三方安装方式)
dsh 官方支持从 GitHub 插件仓库直接安装:dsh plugin --profile web add "github:owner/repo#ref"(仓库根即插件,声明 dsh.bundle 后自动启用)。本插件在 iterate-plugin 独立仓库 维护仓库根即插件的发布位,由主仓库通过 git subtree 同步,内容与 npm 包一致:
dsh plugin --profile web add "github:jingzhao-l/iterate-plugin#main"
安装完成后需重启 dsh 服务(建议 dsh web --patch)并刷新页面,宿主与客户端 UI 层才会加载。
本地开发 / 源码挂载
dsh plugin --profile web add /path/to/iterate-skill/harness/iterate-plugin
# 或
pnpm add /path/to/iterate-skill/harness/iterate-plugin
然后在你的 profile cordis.patch.yml 添加:
- insert:
- id: iterate-plugin
name: 'iterate-plugin'
插件包自带
dsh.bundle.patch(即cordis.patch.yml),npm 包内files已白名单化(src/lib/dist/cordis.patch.yml/README.md/LICENSE)。其中dist/为 TypeScript 服务端逻辑的编译产物,随包分发以兼容 dsh 的github:owner/repo#refgit-clone 安装方式(Node 不擦除node_modules下的 TS 类型)。
💬 使用
dry-run 模式(纯反复审查,不修改文件)
当你想要"只是反复审查,不修改文件",prompt 示例:
dry-run review this project, find all issues across all dimensions
插件会自动触发 iterate 工作流:
plan→ 读取配置,生成评审计划loop→ 每轮并行评审,只找新问题 → 确定性聚合去重 → 统计收敛 → 无新问题则停止meta-review→ 审计报告一致性report→ 输出最终结果
normal 模式(自治闭环迭代)
当你想要"iterate this project / fix the issues found",prompt 示例:
iterate on this project, fix all atomic issues
工作流:
plan→ 读取配置loop→ 并行评审 → 聚合去重 → 原子问题并行修复 → 执行验证命令 → 验证失败则回滚 → 记录日志 → 无新问题则停止report→ 输出修复统计
⚙️ 项目配置
在项目根目录放 iterate.config.yaml:
# 评审目标(例如 "提高代码质量,修复潜在bug,改善可维护性")
goal: "Improve code quality of the project"
# 评审维度(从本插件预定义维度选或自定义)
dimensions:
- correctness
- security
- performance
- maintainability
- code-style
# 最大评审轮次
max_rounds: 3
# 评审范围
review:
scope: full # full = 全项目,changed-only = 只看变更文件
# 原子修复阈值(单次修复允许改动的最大行数,超过需 force)
atomic:
max_lines: 20
# 已知故意不修复的问题(评审会过滤掉,不再重复报告)
personalization:
known_intentional:
- file: src/example.ts
line: 42
dimension: security
reason: "Intentional for demonstration"
# 验证命令(修复后自动跑,结果记入日志)
validation:
commands:
- npm test
- npm run typecheck
配置可通过
iterate_config工具读取与校验式局部写入(自动备份,写入失败自动回滚)。
🔧 注册工具(v3.2:17 个)
iterate_config— 读取 / 写入iterate.config.yaml。operation=read返回完整配置或指定 section;operation=write做 schema 校验、备份后局部合并写入,失败自动回滚iterate_validate— 运行白名单验证命令,返回结果iterate_decision_log— 追加决策日志(只追加,不改旧),存储于.iterate/decision-log.jsonliterate_context— 读取SKILL.md/ITERATE.md上下文iterate_review— 确定性评审引擎:plan生成计划,aggregate聚合去重 + 收敛统计,meta-review审计报告一致性。纯计算,不触碰文件系统iterate_triage— 管理personalization.known_intentional:apply校验、去重(file|dimension|line)、备份后写回配置;list读回当前条目。是浏览器分诊面板写回配置的唯一通道iterate_fix— 应用一个原子修复:校验相对路径、备份原文件、按atomic.max_lines强制原子性(可force跳过)、写入新内容、记录 FixRecord 与atomic_fix日志。normal 模式唯一合法的改文件入口iterate_diff— 查看修复累积变更:指定file返回相对首个备份的 unified diff;省略则返回每个已修复文件的汇总iterate_rollback— 回滚一个已应用的修复:从备份还原文件、从注册表移除该 FixRecord、追加revert日志。用于某轮验证失败后iterate_checkpoint— 迭代断点:save保存当前进度到.iterate/checkpoint.json,load读回,resume加载并累加恢复计数(中断恢复),clear清除。长迭代可中断续跑iterate_status— 汇总当前迭代状态:模式、当前轮/总轮、已修复数、剩余 architectural、决策日志条数、是否存在 checkpoint;v3.4:同时返回持久化的质量门禁快照、经验银行摘要与防御事件摘要(qualityGate/experienceBank/defenseEvents)iterate_history— 读取迭代历史(只读):决策日志条目(可按type/since/limit过滤,默认取最新 50 条,上限 200 条)+ 修复注册表汇总(各轮 fixed/failed 计数)。用于审查运行过程、审计日志、盘点修复iterate_prune— 清理运行时产物:过期决策日志条目(按retainDays,默认 30 天)、陈旧断点、孤儿修复备份、空轮次。默认 dry-run 只报告不删除;dryRun:false才真正清理,每次清理写入决策日志iterate_transcript— 运行时观测台:把审查转录、线程、修复与 nudge 指令持久化到.iterate/transcript.json,供客户端观测台读取iterate_experience— v3.2 查询经验银行(list / search / get),或add一条新的已验证修复:重复添加同一 pattern + dimension 累加命中次数而非重复写入。持久化到.iterate/experience.jsoniterate_quality_gate— v3.2 读取质量凭证(read),或基于 findings、验证结果、findingsByRound与fixedByDimension重新计算并持久化一份新凭证(compute)。真实的逐维度收敛率iterate_defense_events— v3.2 查询防御事件(list / counts),或record记录一条新事件。可读标签跟随项目语言(en / zh)
📁 运行时产物布局
所有运行时状态都落在项目根目录的 .iterate/ 下(可由 .gitignore 排除):
.iterate/
decision-log.jsonl # 追加式决策日志(plan/review/fix/revert…)
checkpoint.json # 迭代断点(断点续跑)
transcript.json # 运行时观测台清单(各 reviewer 线程、趋势、修复、时间线、nudge)
transcript-live.ndjson # 追加式近实时 reviewer 活动流(read/fix/rollback/validate…),带字节上限
experience.json # v3.2:经验银行(跨会话积累的历史修复与模式)
quality-gate.json # v3.2:质量门禁快照(维度收敛率、验证通过率、PASS/FAIL)
defense-events.json # v3.2:防御事件流(前置条件失败、回滚、不变量违反、假设证伪)
fixes/
registry.json # 修复注册表(FixRecord 列表,按轮次组织)
<fix-id>_<ts>.bak # 每次修复前的原文件备份
🔐 权限、依赖与兼容性
Node.js / DSH 兼容范围
- Node.js:
>=20(package.json的engines.node)。 - DSH:在
dsh.compatibility.dshReleases中声明官方0.1.1-rc.1、0.1.2-alpha.4、0.1.2-alpha.5、0.1.2-rc.1、0.1.3-alpha.1五个版本为compatible。插件基于@deepseek-ai/dsh-tools/@deepseek-ai/dsh-util-values0.1.2-rc.1构建,只使用公开契约(工具注册、客户端 slots + theme、bundle patch);0.1.3-alpha.1为匹配当前 DSH 发布窗口的源码声明,插件不使用该发布变更的任何 API。 - 一次性 Profile 证据(真实,
dshCLI0.1.1-rc.1):在临时$DSH_HOME下dsh plugin --profile <p> add <本仓库>约 449ms 完成安装;dsh --profile <p> --dump-config正确合成iterate-pluginbundle patch;dsh plugin --profile <p> remove iterate-plugin约 602ms 卸载完成、合成配置中不存在残留引用。完整运行时 启动未在此环境演练(一次性 Profile 无模型提供方),故dshOperations的 start/rollback 证据为unknown/partial——确切命令与耗时见CHANGELOG.md。
运行时权限(保守披露)
插件与 DSH 宿主共享同一进程能力,涉及以下能力;具备高权限意味着 DSH Profile
安装仍需 user-reviewed/守卫,不会自动放行:
- 文件(files) — 读写
<projectRoot>/.iterate/下的项目本地状态(决策日志、 检查点、transcript、修复备份/注册表、质量门禁、经验银行、防御事件)。iterate_fix/iterate_triage还会就地修改用户源码(路径遍历防护限定在解析后 的项目根目录内,每次修复前备份、失败回滚)。客户端侧把分诊判定持久化到localStorage。 - 命令(commands) — 插件的工具本身只执行一个严格受限的命令面、且仅在模型调用时
于 dsh 宿主进程内运行:
iterate_validate运行iterate.config.yamlvalidation.commands中逐条精确匹配白名单的命令(是的,经由node:child_process执行,超时上限 600 秒);iterate_review(changed-only 范围) 在项目根目录运行git diff --name-only -z <branch>。除此之外不启动任何进程。 客户端"指挥按钮"只复制可粘贴的指令文本,不启动任何进程。 - 凭据(credentials) — 本插件运行时不读取或传输凭据。同生态的 iterate-skill / iterate-harness 组件在用户自行执行 Git/API 操作时可能读取 git 凭据 / GitHub token;它们是独立包,本插件从不加载它们。
- 网络(network) — 运行时无任何网络访问(全部本地)。
依赖
运行时依赖:@deepseek-ai/cordis、@deepseek-ai/dsh-tools、
@deepseek-ai/dsh-util-values、js-yaml——全部精确锁版。无安装期生命周期脚本
(preinstall/install/postinstall/prepare);仅 prepublishOnly(构建)在发布时运行。
失败边界
- 所有写入都是原子的(临时文件 + rename),且限定在
.iterate/下;写入中途崩溃 不会损坏 checkpoint / transcript。 - 持久化失败以结构化
{ ok: false, error }返回,而不是静默成功。 - 修复编辑先备份再应用,验证失败自动回滚。
- 某个 slot / 服务不可用时 UI 优雅降级。
🎨 设计
插件遵循 dsh "everything-is-a-plugin" 架构:
- 只做两件事 — 注入系统 prompt 教模型写 iterate workflow + 注册 17 个纯函数工具
- 所有 orchestration 通过 dsh 原生
workflow+agent+parallel完成 - 核心逻辑全部纯函数(去重 / 过滤 / 排序 / 收敛 / meta-audit / diff 计算 / 历史过滤 / 清理报告),可单元测试,无 I/O
- 安全模型 — 文件写入限定在解析后的项目根目录内(路径遍历防护);写文件前必备份,失败回滚;配置写入同样备份 + 回滚;
iterate_prune默认 dry-run、只清理.iterate/下产物、每次清理写日志;iterate_fix对 content 设字符上限、iterate_triage对 entries 设数量上限,防止异常超大负载 - UI 免构建 —
lib/client.js用React.createElement树 + 注入<style>标签,全部颜色走--dsw-*令牌,缺服务自动降级 - v3.2 质量指挥中心 — 把插件从"被动观察面板"升级为"主动指挥中心 + 知识库"——质量门禁(读 + compute)、经验银行(读 + add)、防御事件(读 + record)与原生指挥按钮
- 遵循 iterate 原技能的设计原则:确定性收敛,可审计,最小权限
🧪 运行测试
cd harness/iterate-plugin
npm install
npm run typecheck
npm test
所有测试通过:
- 466 个单元测试全绿,类型检查通过
- 覆盖:去重、过滤、排序、多轮收敛、meta-review 审计、路径安全、超时钳制、配置读写与回滚、triage 合并、diff 计算、checkpoint 校验、修复注册表、历史读取与过滤、prune 清理报告与 dry-run 语义、UI 纯函数(select-all 键、运行时状态指引)、v3.2:经验银行、质量门禁、防御事件、审批门禁 fail-open 路径等
⚠️ 免责声明与许可
免责声明
本项目按「现状」(AS IS)提供,不附带任何明示或暗示的担保,包括但不限于对适销性、特定用途适用性及不侵权性的担保。
自动化的代码审查与修复存在固有风险。 normal 模式下产生的改动均由 AI 模型生成,可能引入缺陷、回归或非预期行为。在合并改动前,你应当:
- 在应用到主分支或推送前,逐条 review 每一处 diff。
- 确保项目处于 git 版本控制之下,并可随时回滚(
git restore、revert 或从备份恢复)。 - 在每轮修复后运行项目自身的测试与构建检查。
- 切勿在密钥、凭证、
.env或任何不允许修改的文件上运行本项目;请在配置中设置protected_paths予以保护。
使用者需为本项目使用过程中所产生、修改或提交的代码负全部责任。使用本项目即表示你同意:维护者与贡献者不对因使用本项目而导致的任何损失、损害或法律后果承担责任。
License
MIT
