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.13.0;Codex 原生差异需要下文的可选接入补丁,默认自动模式无需补丁。paseo plugin add Laokashouji/paseo-turn-changes --ref fe32893c09a46a766741163ae8043d50ed678117Git security status and fallback installation are pinned to commit fe32893c09a4.
From the plugin's README
需要 Paseo 客户端与 daemon 均为 0.8.x–0.12.x,并已开启目标主机的插件功能。在连接该主机的 Paseo CLI 中运行:
paseo plugin add github:Laokashouji/paseo-turn-changes
默认配置可直接使用官方 Paseo,无需宿主补丁:Codex 优先使用原生本轮差异,不可用时自动汇总文件编辑记录;其他执行后端默认汇总文件编辑记录。依赖在安装时按锁文件准备,无需发布到 npm。
更新已安装的 Git 来源插件:
paseo plugin update turn-changes
README
Paseo 插件,按一轮 Agent 执行汇总文件改动。在回答后显示文件数量、增删行数和文件列表,点击文件或“审核”查看当轮差异;“撤销”恢复这一轮之前的文件内容。
以下截图使用实际插件组件和模拟文件数据;审核面板外框为测试宿主,不包含真实项目内容。
需要 Paseo 客户端与 daemon 均为 0.8.x–0.12.x,并已开启目标主机的插件功能。在连接该主机的 Paseo CLI 中运行:
paseo plugin add github:Laokashouji/paseo-turn-changes
默认配置可直接使用官方 Paseo,无需宿主补丁:Codex 优先使用原生本轮差异,不可用时自动汇总文件编辑记录;其他执行后端默认汇总文件编辑记录。依赖在安装时按锁文件准备,无需发布到 npm。
更新已安装的 Git 来源插件:
paseo plugin update turn-changes
>=0.8.0 <0.13.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 或编辑记录缺少修改前内容、替换内容无法唯一定位、记录被截断时,不提供自动撤销。Write 只有写入后正文时可审核正文,但不能判断是新建还是覆盖,不推算增删行数。move_path 会显示为重命名:卡片和审核页展示目标路径与原路径,“打开源文件”打开目标文件。纯重命名显示 +0 / -0;重命名不开放自动撤销。旧卡片也可从同轮日志补回重命名关系。.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.13.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
本插件采用 Apache-2.0 许可证。Paseo 接入补丁的上游版权与许可保留在 patches/PASEO-LICENSE。
Scanned 20 Oct 2026, 04:00 UTC from Laokashouji/paseo-turn-changes.