Review per-turn agent file changes in Paseo with inline diff cards, a file tree, guarded undo, and an in-panel source editor.
Supported platforms: Linux.
From the plugin's README
>=0.8.0 <0.9.0;Codex 原生差异需要下文的可选接入补丁,默认自动模式无需补丁。paseo plugin add Laokashouji/paseo-turn-changes --ref mainSecurity status covers commit 2dc56185b2b4. This command tracks main. Refresh the listing before installing if the branch changed.
From the plugin's README
需要 Paseo 客户端与 daemon 均为 0.8.x 正式版,并已开启目标主机的插件功能。在连接该主机的 Paseo CLI 中运行:
paseo plugin add Laokashouji/paseo-turn-changes
默认配置可直接使用官方 Paseo,无需宿主补丁:Codex 优先使用原生本轮差异,不可用时自动汇总文件编辑记录;其他执行后端默认汇总文件编辑记录。依赖在安装时按锁文件准备,无需发布到 npm。
更新已安装的 Git 来源插件:
paseo plugin update turn-changes
README
Paseo 插件,按一轮 Agent 执行汇总文件改动。在回答后显示文件数量、增删行数和文件列表,点击文件或“审核”查看当轮差异;“撤销”恢复这一轮之前的文件内容。
以下截图使用实际插件组件和模拟文件数据;审核面板外框为测试宿主,不包含真实项目内容。
需要 Paseo 客户端与 daemon 均为 0.8.x 正式版,并已开启目标主机的插件功能。在连接该主机的 Paseo CLI 中运行:
paseo plugin add Laokashouji/paseo-turn-changes
默认配置可直接使用官方 Paseo,无需宿主补丁:Codex 优先使用原生本轮差异,不可用时自动汇总文件编辑记录;其他执行后端默认汇总文件编辑记录。依赖在安装时按锁文件准备,无需发布到 npm。
更新已安装的 Git 来源插件:
paseo plugin update turn-changes
>=0.8.0 <0.9.0;Codex 原生差异需要下文的可选接入补丁,默认自动模式无需补丁。0.8.0 正式版 daemon 验证插件安装、两种来源、连续两轮、历史持久化和撤销。仅安装生产依赖的源码也通过相同验证。有改动的轮次结束后,对话中增加一张“已编辑 N 个文件”卡片。没有改动且没有异常时不插入空卡片。文件列表默认显示前六项,可以展开全部。历史卡片的差异保存在生成时,不随后续编辑或 Git 提交变化。
extends 识别,日志目录遵循该后端继承和覆盖后的 CODEX_HOME。日志缺失时保留原有记录;仅有正文而没有明确新增证据时不推算增删行数。审核旧记录也会补回同次调用遗漏的文件,保留原有文件顺序,仍不开放撤销。turn-changes → 数据来源:设置每个执行后端的来源。Paseo 0.8.0 的对话卡片在归档后重新打开会话时不会恢复:宿主没有持久化插件追加的消息,重建的模型历史也不含这张卡片。差异记录由本插件独立保存,仍可通过命令中心的“查看每轮改动”打开历史面板查看;不要把插件记录持久化与对话卡片持久化视为同一项能力。
npm run test:ui 会生成 tmp/preview.html,可直接在浏览器打开。预览使用真实插件组件、模拟数据及简化的宿主弹窗和设置控件;不能替代真实 Paseo 客户端验收。
默认值:
{
"defaultSource": "edits",
"providers": { "codex": "auto" }
}
auto 表示自动选择,native 固定使用原生本轮差异,edits 固定使用插件汇总。匹配的是 provider ID,不是模型名称。自定义 Codex provider ID 可在设置中单独添加。
设置从下一轮生效,历史记录保留原来源。同一 daemon 的客户端读取同一份配置;旧版本设置的保存会被拒绝,刷新后可重试。已有显式 native 配置仍为固定来源,需选择“自动(优先原生)”开启自动判断。
自动模式依据本轮结束事件是否包含 nativeDiff 判断能力,不依赖版本号或上一轮的缓存。字段缺失时使用插件汇总;字段为 null 或空字符串表示接口已接通但没有差异,不因此切换来源。卡片不展示来源说明,文件路径统一显示为改动所在主机上的绝对路径。自动选择本身不算记录异常,历史分页不完整或文件无法重建时仍会限制撤销。
设置页显示所配置原生来源最近一轮是否收到接口信号及检查时间,也可主动刷新。它是最近一次观察结果;安装后尚未完成轮次时显示“尚未确认”。移除某个执行后端的单独配置后,该后端使用“其他执行后端”的设置。
Codex 接入层只保留当前轮次最新的 turn/diff/updated,在完成、失败或取消时传给插件,不把差异重复插入普通消息流。
纯插件路径读取本轮最终状态为 completed 的结构化文件编辑记录,按文件反向应用本轮操作,计算净变化。同一文件连续修改会合并,修改后又恢复原样的不计入文件列表。开始之前已有的未提交内容不通过 Git 基线覆盖。
以下情况会影响完整性:
Write 或编辑记录缺少修改前内容、替换内容无法唯一定位、记录被截断时,不提供自动撤销。.git 内部文件。差异展示不以自动撤销成功为前提:文件在编辑后被格式化、位于工作目录外或无法还原时,仍展示已保存的编辑记录及增删行数。多次编辑无法合并时,审核页标注“编辑记录 · 行数为各次编辑合计”,可能包含重复修改或格式化前的内容。只有修改后内容时标注“修改后内容”,不把未知旧内容当作空文件,也不虚构增删行数。上述情况均不开启自动撤销,不读取工作目录外的当前文件。
旧记录会从已保存的补丁恢复展示统计;旧记录缺少正文时,仅在原对话的轮次、时间线版本和结束序号完全匹配时补充工具提供的内容。读取审核不会改写历史、当前文件或撤销状态。若原对话记录已不可用且插件当时没有保存内容,则无法补回。
撤销前检查所有文件的内容和权限,确认仍等于记录结束时的状态;执行期间逐文件复核,失败时尝试恢复已写入的文件,并保留错误状态。工作目录或其父子目录内有正在运行的 Agent 时禁止撤销。撤销不会修改 Git 暂存区、提交或分支。文件系统没有跨进程事务,撤销期间仍应避免编辑器或其他进程同时写文件。
默认保存在 ${PASEO_HOME:-~/.paseo}/plugin-data/turn-changes,可用 PASEO_TURN_CHANGES_HOME 指定隔离目录。设置和差异记录使用原子替换写入,文件权限为 0600;记录包含修改前后文本。
目录属于运行插件的 daemon,不跨设备自动同步。当前版本不自动清理历史;卸载插件后数据目录仍保留。
patches/codex-turn-diff.patch 包含 Paseo 源码上下文及本插件所需修改;上游版权与许可保留在 patches/PASEO-LICENSE。
客户端和 daemon 需要匹配 Paseo 0.8 插件接口;清单要求 >=0.8.0 <0.9.0,不接受 0.7 或 0.8 beta。补丁基于官方 v0.8.0,提交 b8e24677e12b226c7c38c1c3a40649daa9f1152f,见 patches/codex-turn-diff.patch。官方 0.8.0 仍会丢弃 Codex 原生累计差异事件;补丁改动 server 内部事件和插件服务端钩子,不修改客户端协议。
在对应 Paseo 源码根目录应用补丁并构建:
git apply --check /absolute/path/paseo-turn-changes/patches/codex-turn-diff.patch
git apply /absolute/path/paseo-turn-changes/patches/codex-turn-diff.patch
npm ci --ignore-scripts --include-workspace-root --workspace=@getpaseo/server --workspace=@getpaseo/cli --workspace=@getpaseo/client --workspace=@getpaseo/protocol --workspace=@getpaseo/plugin --workspace=@getpaseo/relay --workspace=@getpaseo/highlight
npm run build:server
以上仅构建,不替换或重启当前 daemon。切换运行版本需要按目标机器的 Paseo 安装方式操作;有活动会话时先安排切换窗口。桌面和网页客户端也需要匹配版本。
在已运行兼容版本的目标 daemon 上:
cd /absolute/path/paseo-turn-changes
npm ci --omit=dev --ignore-scripts
paseo plugin install /absolute/path/paseo-turn-changes
需事先开启目标 daemon 的插件功能,CLI 也需指向正确主机。多台机器分别安装和配置。
从 Git 安装时,清单中的构建命令会安装锁定的生产依赖。开发检查则运行不带 --omit=dev 的 npm ci --ignore-scripts。
npm run typecheck
npm run lint -- client server shared index.client.tsx index.server.ts
npm test
npm run test:ui
npx tsx tests/daemon-smoke.mjs /absolute/path/paseo-turn-diff-host
集成测试使用随机端口、独立存储和脚本测试后端,不访问主 daemon、真实模型或真实工作文件,结束后关闭临时服务并清理目录。回执在 tmp/daemon-smoke.json、tmp/ui-smoke.json。
可通过 PASEO_TEST_PLUGIN_ROOT 指定仅安装生产依赖的插件副本,验证实际安装时的模块解析。
Paseo 补丁测试在其 packages/server 下运行:
npx vitest run src/server/agent/providers/codex-app-server-agent.test.ts --bail=1
Scanned 14 Sep 2026, 17:48 UTC from Laokashouji/paseo-turn-changes.