react-doctor 的 deslop 技能:Agent 驱动的代码简化(Code Simplification)工作流详解

react-doctor 的 deslop 技能:Agent 驱动的代码简化(Code Simplification)工作流详解 react-doctor 的 deslop 技能Agent 驱动的代码简化Code Simplification工作流详解【免费下载链接】react-doctorYour agent writes bad React. This catches it项目地址: https://gitcode.com/GitHub_Trending/re/react-doctor在 react-doctor 仓库中deslop是一个以 Skill 形式定义的 Agent 工作流它让编码 Agent 在写完或修改代码后以绝不改变功能、只改善写法的约束对近期改动做一轮精炼并用truffler模糊符号搜索合并近似重复函数。本文完整拆解 deslop 技能定义 的五条核心原则、truffler 查重合并流程与六步精炼过程并结合 AGENTS.md 中的仓库级工程约定说明这套代码去味deslop流程如何在实际提交流程中落地、可验证。1. 定位deslop 是什么不是什么deslop 不是一个独立运行的 CLI 工具或 Lint 规则而是一份放在.agents/skills/deslop/SKILL.md的 Agent 技能文档。它的 YAML frontmatter 声明了技能身份与触发条件--- name: deslop description: Simplify and refine recently modified code while preserving functionality. Use when asked to deslop, clean up code, simplify code, or after making changes that could benefit from refinement. version: 1.0.0 ---从description字段可以读出它的三个触发入口用户显式说 deslop、要求 clean up code / simplify code或者代码改完、适合再精炼一下的时机自动生效。技能正文的开篇将 Agent 角色设定为资深代码简化专家核心信条是两点只改变代码怎么做绝不改变做什么——所有原有功能、输出、行为必须原样保留可读、显式的代码优先于过度紧凑的写法——明确反对聪明的一行流代码。值得注意的是react-doctor 项目本身还有一个历史上的deslop包deslop-cli/deslop-js其变更日志已归档在 docs/archive/deslop-cli/CHANGELOG.md 和 docs/archive/deslop-js/CHANGELOG.md。当前的 deslop 技能与那些归档包是不同层面的东西技能定义的是改代码后的精炼纪律而非可发布软件。2. 五大核心原则deslop 技能把精炼规则组织为五个章节按约束强度排列。下面逐条继承原文档内容并补充仓库中的佐证。2.1 原则一Preserve Functionality保功能原文要求Never change what the code does - only how it does it.只改变实现方式不改变代码行为——所有原有功能、输出、行为都必须保持原样。这是整个 deslop 流程的硬边界任何简化若改变了行为就不属于 deslop 的范畴而是一次功能变更应当走正常的评审与 changeset 流程参见 AGENTS.md 的 Release authorization 一节。2.2 原则二Apply Project Standards应用项目标准deslop 要求精炼结果必须符合代码库的既定规范。原文列出的五项标准为使用 ES modules并做正确的 import 排序与扩展名处理顶层函数使用显式返回类型标注组件遵循显式 Props 类型的模式使用正确的错误处理模式尽量避免 try/catch保持命名约定一致。这些条款并非凭空而来可以在 AGENTS.md 的 General Rules 中找到更完整的仓库级版本例如MUST: Remove unused code and dont repeat yourself.删除无用代码、杜绝重复MUST: Use Boolean over !!.用Boolean而非!!取布尔值MUST: Put all magic numbers in constants.ts using SCREAMING_SNAKE_CASE with unit suffixes (_MS, _PX).魔法数字集中进constants.ts带单位后缀MUST: Put small, focused utility functions in utils/ with one utility per file.小工具函数一个文件一个放进utils/。最后一条在仓库中有非常直观的结构证据packages/core/src/utils/ 目录下每个文件只承载一个职责单一的工具函数如column-of-utf8-offset.ts、is-path-inside-directory.ts、map-with-concurrency.ts等正是 deslop 精炼时应当对齐的目标形态。2.3 原则三Enhance Clarity提升可读性这是 deslop 火力最集中的部分原文给出了 10 条具体操作降低不必要的复杂度与嵌套消除冗余代码与多余抽象通过更清晰的变量与函数命名提升可读性合并相关逻辑删除描述显而易见代码的注释删除所有不必要的间接层——折叠透传包装器pass-through wrappers、单分支辅助函数以及仅用于转发参数的中间层把单次使用的函数内联到其唯一调用点——只有当函数名本身让调用点更可读时才保留命名函数删除对最终方案不需要的全部代码——死分支dead branches、未使用的导出、投机性选项、以及前几轮迭代遗留的脚手架代码重点避免嵌套三元运算符——多个条件优先用switch或 if/else 链表达清晰优先于简短——显式代码通常好过过度紧凑的代码。其中第 6、7、8 条针对的是 AI 生成代码的典型病灶层层转发、以防万一的预留选项、以及迭代过程中遗留的半成品。deslop 明确要求把这些视为异味slop直接清除而不是保守保留。2.4 原则四Maintain Balance防止过度简化deslop 专门用一节约束反方向的错误即简化到损害代码的程度。原文列出的六个红线降低代码清晰度或可维护性制造难以理解的过于聪明的解法把过多关注点塞进单个函数或组件删掉有助于代码组织的有益抽象为行数更少牺牲可读性例如嵌套三元、密集的一行流;让代码更难调试或扩展。这一节与 2.3 节形成一对张力2.3 要求内联单次函数、折叠中间层2.4 要求保留有益抽象。判断标准落在行为契约上——只要输入形状、副作用、错误行为、返回形状都一致合并与内联就是安全的不一致时宁可保留分离这一点在第 3 节的 truffler 合并规则中再次出现。2.5 原则五Focus Scope控制作用域deslop 默认只精炼当前会话中最近修改或触碰过的代码除非用户明确要求审查更大范围。这条约束把 deslop 定位成提交前的最后一道局部打磨而不是全仓库重构。仓库中 ship 技能 的流水线恰好体现了这个定位——它的第二阶段就是Deslop the touched code只精炼被触碰的代码然后才进入提交与推送## 2. Deslop Run /deslop (.agents/skills/deslop/SKILL.md) to simplify the recently modified code while preserving functionality, including its truffler duplicate-consolidation pass. Apply the refinements before committing.也就是说deslop 是提交前的强制关卡精炼完成并应用之后才允许 commit。3. 用 truffler 合并近似重复函数deslop 文档中唯一给出具体命令的章节专门对付slop 最常见的藏身之处——以略不同的名字散落在多个模块里的近似重复函数。其工具是trufflerrayhanadev/truffler一个基于oxc-parser的 JS/TS 模糊符号搜索工具在本仓库中已经是固定的开发依赖见 package.jsondevDependencies: { ... rayhanadev/truffler: ^0.4.2, ... }AGENTS.md 将 truffler 设为硬性规定添加 utility、helper、type、constant、rule 之前必须先搜任务结束后再搜一次确认没有制造重复、并删掉被新代码取代的死代码。3.1 搜索命令deslop 给出的标准用法是按行为而不是仅按名字搜索——查询词 领域名词 动词bunx rayhanadev/truffler format duration packages --kind function,method,constant,type --limit 20参数拆解参数含义format duration行为查询词要做的动词 操作的领域名词packages搜索根目录本仓库的 monorepo 代码主目录--kind function,method,constant,type限定符号类型聚焦可合并的目标--limit 20返回条数上限便于人工逐条审阅对每个触碰过或新添加的 helper、type、constant都应按名字和行为各搜一次。3.2 合并判据宁可放过不可错杀deslop 文档对搜到之后怎么办给出了四条纪律逐个阅读每个近似匹配。模糊搜索必然捞出不相关的代码名字相近不构成重复的证据只合并契约一致的符号——相同输入形状、相同副作用、相同错误行为、相同返回形状才允许合并。合并方式是抽出一个聚焦的工具函数按仓库约定utils/下每文件一个函数把所有调用点指向它然后删除重复体及随之失效的 import契约不同的函数即使名字相近也要保持分离——这是第 2.4 节平衡原则在执行层的落地合并后重跑搜索确认该行为只剩一个定义。这些判据与姊妹技能 find-similar-functions 完全同构。后者把 truffler 定位为发现层discovery layer并额外要求 Agent 在最终回复中简要报告搜到了什么、复用了什么、或为何有意新增例如I checked for existing symbols withtrufflerusing queries likenormalize,path, andresolve. The closest match wasnormalizePathinsrc/files.ts, so I reused that behavior instead of adding a separate helper.可以推断deslop 在执行合并时同样应遵循这一报告惯例让重复消除过程本身可审查。4. 精炼过程Refinement Processdeslop 把执行步骤固化为六步清单可逐条核对1. Identify the recently modified code sections 定位近期修改的代码段 2. Analyze for opportunities to improve elegance and consistency 分析优雅性与一致性改进点 3. Apply project-specific best practices and coding standards 应用项目级最佳实践与编码标准 4. Ensure all functionality remains unchanged 确认功能未变 5. Verify the refined code is simpler and more maintainable 验证精炼后的代码更简单、更可维护 6. Document only significant changes that affect understanding 只记录影响理解的显著变更第 4 步是功能不变性的自校验第 6 步则抑制为了记录而记录的 changelog 噪音。文档结尾声明了技能的自主性You operate autonomously and proactively, refining code immediately after its written or modified without requiring explicit requests.无需显式请求代码写完/改完即应精炼——这正是它被嵌入 ship 流水线 第二阶段的原因不靠人记起来跑而是流程中自动执行。5. 与仓库工程体系的衔接如何验证 deslop 的效果deslop 本身不产出独立报告它的正确性由仓库既有的检查命令兜底。AGENTS.md 规定提交前运行pnpm test # 全部包测试 pnpm lint pnpm typecheck pnpm format # 仅校验时用 format:check pnpm smoke:json-report # 校验构建产物 CLI 的 JSON 输出符合 schema而 ship 技能 使用antfu/ni的等价形式nr test、nr lint、nr typecheck、nr format:check在 deslop 之后、commit 之前执行。这条链路给出可验证的闭环编码完成 → /deslop保功能精炼 truffler 查重合并 → 重跑 truffler 确认单一实现 → nr test / nr lint / nr typecheck / nr format:check → commit push测试层面仓库为各包配套了与源码同构的测试目录packages/core/tests/、packages/react-doctor/tests/等框架为vite-plus/test封装的 vitest见 AGENTS.md 的 Testing 一节。deslop 的功能不变承诺最终就是靠这些既有测试在精炼后全量通过来兑现的。6. 实践要点小结把 deslop 技能落到日常使用要点可以归纳为触发时机显式说 deslop或按 ship 流程 在 commit 前自动执行默认只处理本会话改动过的文件。安全边界行为不变是第一约束嵌套三元、透传包装、死分支、单次函数是该重点清理的四类目标有益抽象必须保留。查重闭环bunx rayhanadev/truffler 领域名词 动词 packages --kind function,method,constant,type --limit 20搜前确认无现成符号合并后重搜确认唯一。合并判据是输入/副作用/错误/返回四同名字相近不算数。验证出口精炼后跑nr test、nr lint、nr typecheck、nr format:check再提交让测试证明功能未变。deslop 的价值不在于某条具体规则而在于它把AI 生成代码的去味变成了一份可触发、可核对、有查重工具、有验证出口的确定性流程——这与 react-doctor 项目catch bad React的定位在 Agent 协作层面形成了呼应前者在提交前清理代码后者在提交时捕获坏模式。【免费下载链接】react-doctorYour agent writes bad React. This catches it项目地址: https://gitcode.com/GitHub_Trending/re/react-doctor创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考