J
patch-relay
jayden-ren/patch-relay
把代码修改放进评审回路,而不是让模型直接改文件:每处改动以带行号的两列 diff 卡片提出,用户手动落地或一键应用,再点一下把接力棒交回给 AI 复核。
安装
dsh plugin --profile web add github:jayden-ren/patch-relayREADME
PatchRelay
AI 提改动,你手动落地,改完点一下把接力棒交回来。
把「AI 直接改你的代码」换成「AI 给你可审查的 diff,你自己动手改」。 目的有三个:diff 保持小、你对代码保持熟悉、每个改动都被真的读过一遍。
它做什么
propose_patch工具:读取真实文件,校验old_string是否唯一出现,返回真实的多段 unified diff 和行号。它从不写文件。edit/write被关掉:新建的 agent 工具表里直接没有这两个;已在运行的会话仍能看到,但调用会被拒绝并提示改用propose_patch。- 两列彩色 diff 卡片:
原代码 | 修改后,左右各有行号,卡头是路径:行号(IDE 的「跳转到文件:行号」可直接用);绿=新增、红=删除、蓝=原行修改。 - 复制 / 直接应用:卡片顶部可一键复制修改后的代码;点「直接应用」由 Host 侧把提案写入文件,文件在提案后被改过会拒绝应用(仍可手动改)。
- 交接回路:每轮以一张
ask_user_question卡片收尾(「已应用,继续 / 还要再改」),你点一下 AI 才继续下一步。
工作流
AI 读代码定位根因
→ propose_patch 给出 diff + 行号(文件不动)
→ 你在 IDE 里手动改,或点卡片「直接应用」
→ 点「已应用,继续」
→ AI 读回文件、跑项目自检、提下一处
安装
从 GitHub 安装到 profile(把 <profile> 换成你的 profile 名,如 web;Desktop 用桌面自带的 dsh 命令):
dsh plugin --profile <profile> add github:Jayden-ren/patch-relay
也可以在 DSH 插件管理里直接从本仓库地址安装;安装后在 profile 内全局生效。
验证
node selfcheck.mjs # diff / 行号 / 左右分列的行配对断言
已知边界
- 只拦
edit/write;shell 工具(pwsh/bash)仍然能写文件。要更严格请一并禁用,代价是构建与测试也跑不了。 - 客户端卡片需要在页面刷新后加载;刷新前显示为原生 diff 卡片。
- 卡片里的「修改」判定基于行配对:同一处改动里删几行补几行,按顺序一一配对(配对上的标蓝,剩下的标红/绿)。
- 「直接应用」由 Host 侧会话命令
patch-relay-apply执行(不经过手动粘贴);提案后文件被改过会拒绝应用,需要重新提案。
许可证
MIT