ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Plandex 变更审查与安全落地:理解 pending changes 沙箱、diff / reject / apply 全流程

Plandex 变更审查与安全落地:理解 pending changes 沙箱、diff / reject / apply 全流程 Plandex 变更审查与安全落地理解 pending changes 沙箱、diff / reject / apply 全流程【免费下载链接】plandexOpen source AI coding agent. Designed for large projects and real world tasks.项目地址: https://gitcode.com/GitHub_Trending/pl/plandexPlandex 是面向大型项目与真实任务的开源 AI 编码代理AI coding agent。默认情况下它不会把 AI 生成的修改直接写进你的项目文件而是先累积在一个受版本控制的sandbox沙箱中等待你审查后再决定落地。本文围绕plandex diff、plandex reject、plandex apply三条核心命令完整讲解查看变更 → 拒绝或保留 → 应用落地 → 自动执行与调试的完整工作流并结合仓库源码说明其底层实现帮助你安全、可控地把 AI 产出合并进真实代码库。理解沙箱Sandbox与待定变更模型当你给 Plandex 下达一个任务时默认情况下模型的产出并不会直接应用到项目文件上。相反Plandex 会把所有改动累积进它自己的版本控制沙箱里这些改动被称为pending changes待定变更。你可以随时审查、部分拒绝、全部拒绝或最终把它们一次性应用到真实项目文件中。这一模型与 Plandex 的版本控制机制深度绑定参见 版本控制文档计划plan中几乎每一个动作都会在计划历史中创建一个新版本包括手动或自动添加、移除、更新上下文你发送提示词Plandex 做出响应Plandex 将某个文件的拟议更新构建为待定变更待定变更被拒绝reject待定变更被应用到你的项目apply模型或模型设置被更新。也就是说reject和apply都不是一次性操作它们都会在计划历史中留下痕迹也都可以通过plandex rewind回退——自 v2.0.0 起plandex apply之后执行rewind还会默认同时回退项目文件可用auto-revert-on-rewind配置项关闭。任务完成后的审查菜单Review Menu当 Plandex 完成一个任务后你会看到一个审查菜单review menu其中包含若干热键选项。这些热键本质上是下文各条命令的快捷键让你不必敲长命令即可快速切换审查方式在 diff 浏览器 UI 中按s切换到 side-by-side左右并排视图按l切换到 line-by-line逐行视图按g切换到 git diff 格式按↓下方向键打开操作选择列表可切换视图、退出菜单按enter/q退出菜单继续。热键的具体处理逻辑见 app/cli/cmd/diffs.go其中s、l、g分别对应 side-by-side、line-by-line、git diff 三种视图切换CtrlC直接退出进程。查看变更plandex diff与plandex diff --ui终端 git diff 视图当 Plandex 完成你的任务后可以用plandex diff命令审查待定变更它以git diff 格式输出所有改动plandex diff常用参数参数说明--plain/-p以纯文本输出 diff不含任何 ANSI 颜色码适合重定向到文件或管道处理--git显式指定以 git diff 格式输出命令行中默认即为此格式--ui在本地浏览器 UI 中查看 diff见下节--side/-sUI 视图使用 side-by-side并排模式--line/-lUI 视图使用 line-by-line逐行模式从源码看diff命令还注册了别名diffsUse: diff, Aliases: []string{diffs}见 app/cli/cmd/diffs.go。执行时CLI 会调用GetPlanDiffs从服务端拉取当前计划分支的 diff若没有待定变更终端会输出 No pending changesapp/cli/cmd/diffs.go。非纯文本输出会经过term.PageOutput分页展示方便在长 diff 中翻页阅读。浏览器 UI 视图除了终端文本你还可以用浏览器 UI 查看变更plandex diff --uiUI 视图额外提供两种展示模式--side-by-side/-s并排对比视图默认--line-by-line/-l逐行对比视图。其底层实现是CLI 在本机net.Listen(tcp, :0)上启动一个临时 HTTP 服务由操作系统自动分配空闲端口把 diff 内容 JSON 序列化后灌入内嵌 HTML 模板借助前端库diff2html渲染高亮 diff然后用ui.OpenURL唤起默认浏览器打开http://localhost:port/view见 app/cli/cmd/diffs.go。浏览器页面关闭、终端进程退出后临时服务随监听器Close()自动释放不会留下后台残留进程。拒绝变更plandex reject如果计划对某个文件的改动应用错了、或你出于其他原因不想要这些改动你有两种处理方式先plandex apply应用全部改动再手动修正问题用plandex reject拒绝某个或多个文件的改动然后自己手动实现你想要的修改。reject会提示你选择要拒绝的文件plandex reject # 交互式选择要拒绝的文件它支持三种用法plandex reject # 交互多选列出所有待定文件空格多选后回车确认 plandex reject --all # 拒绝当前所有待定文件-a 为简写 plandex reject file1.ts file2.ts # 直接按路径拒绝指定文件从源码看app/cli/cmd/reject.go--all标志绑定为-a不带参数时会先获取当前计划的文件状态用survey.MultiSelect弹出多选列表app/cli/cmd/reject.go带路径参数时会逐一校验文件是否存在于待定变更中否则报错退出app/cli/cmd/reject.go。拒绝成功后 CLI 会打印被拒绝的文件清单并同步调用RejectAllChanges/RejectFiles服务端接口。如果因为改动应用方式不对而拒绝了一个文件但你仍然想要其中的代码可以向上滚动从计划输出中复制或者运行plandex convo输出完整对话记录并从中复制再自行手动应用到该文件plandex convo # 输出完整对话找到对应代码片段手动应用注意reject命令也有别名rj且要求当前存在已加载的计划无当前计划时会提示错误。应用变更plandex apply当审查完改动、确认满意后用plandex apply把它们应用到项目文件plandex applyApply Flags 与相关配置Plandex v2 为apply引入了若干新的配置项与命令行参数用来控制应用之后发生什么。与apply强相关的核心配置包括配置项说明默认值auto-apply计划完成后自动应用变更不提示、不审查falsecan-exec是否允许命令执行安全开关trueauto-exec应用变更后自动执行命令trueauto-debug命令执行失败时自动调试falseauto-debug-tries自动调试的最大尝试次数5auto-commit应用成功后自动提交 gittrueauto-revert-on-rewindrewind 时同时回退项目文件trueskip-changes-menu响应结束且有待定变更时跳过交互菜单false也可以直接用命令行参数覆盖默认行为仅对本次命令生效不修改已保存的配置# 无论当前自治等级与配置如何都应用变更、自动执行命令并自动调试 plandex tell add a feature --apply --auto-exec --debugapply 的底层流程暂存、落盘与回滚计划从源码看plandex apply别名ap的核心执行逻辑在 app/cli/lib/apply.go流程大致如下获取当前计划状态若存在未构建的变更会提示先构建检查是否有过期上下文outdated context需要时先同步将待应用文件与待删除文件列表交给ApplyFiles并行写入项目app/cli/lib/apply.go写入前会把每个文件的原始内容与权限记录进ApplyRollbackPlanToRevert/ToRemove一旦后续命令执行失败可据此完整回滚app/cli/lib/apply.go若有执行脚本_apply.sh则在文件写入后执行命令成功后调用服务端ApplyPlan标记变更已应用若项目是 git 仓库且未禁用提交则用自动生成的提交信息GitAddAndCommitPaths提交这些文件commitAppliedapp/cli/lib/apply.go。ApplyFiles对每个文件做了内容未变化则跳过的优化app/cli/lib/apply.go因此重复 apply 不会产生无效写入。另外plandex apply之后计划历史中会新增一个版本可以用plandex rewind撤销由于 v2.0.0 起auto-revert-on-rewind默认为truerewind 会同时回退项目文件若你在 apply 之后又手动改过文件Plandex 会提示你处理冲突参见 版本控制文档。命令执行与调试Command Execution Debugging应用变更之后Plandex 可以自动执行待定的命令——这对跑测试、启动服务端或执行其他用于验证改动是否生效的动作非常有用。CLI 会把待执行命令整理为一个_apply.sh脚本含 shebang 与set -euo pipefail错误处理在项目根目录执行并实时回显输出app/cli/lib/apply.go。如果命令失败改动会被回滚利用 apply 时记录的回滚计划恢复原文件。随后根据自治等级与配置Plandex 会二选一自动调试在auto-debug开启、且尝试次数未超过auto-debug-tries默认 5时自动把失败输出回传给模型并重新尝试提示调试选项弹出菜单让你选择处理方式。从源码看失败处理会提供四个选项app/cli/plan_exec/apply_exec.go选项行为Debug and retry once用失败输出驱动模型调试一次后重试Debug in full auto mode切换为 full 自治模式并自动调试重置尝试计数Rollback changes and exit回滚全部改动并以失败状态退出Apply changes and exit保留已应用的文件改动跳过执行脚本并退出选中调试并重试后CLI 会基于失败退出码与输出构造提示词调用TellPlan再递归进入MustApplyPlanAttempt完成下一次应用 → 执行 → 验证循环app/cli/plan_exec/apply_exec.go直到成功或达到尝试上限。Auto-Applying 与全自动模式当启用auto-apply时计划完成后 Plandex 会自动应用变更不弹出提示、不做人工审查。该行为在full完全自动自治等级下默认开启并且在自动调试auto-debug过程中同样生效。你还可以通过--full标志以全自动模式应用变更 调试一步到位plandex apply --full从源码看app/cli/cmd/apply.go--full会把当前计划的配置临时提升为 full 自治模式resolveAutoModeSilent同时把AutoConfirm、AutoCommit、AutoExec、AutoDebug等标志全部置为开启。Autonomy Matrix自治矩阵auto-apply、auto-exec、auto-debug、auto-commit这几个开关在不同自治等级下的默认取值可参考下表完整矩阵见 自治等级文档SettingNoneBasicPlusSemiFullauto-apply❌❌❌❌✅auto-exec❌❌❌❌✅auto-debug❌❌❌❌✅auto-commit❌❌✅✅✅可以看到auto-apply与auto-exec、auto-debug一样只有在Full等级下才会自动开启而auto-commit从Plus等级起就默认开启。你可以用以下命令切换自治等级详见 自治等级文档plandex set-auto none # 无自动化 plandex set-auto basic # 仅自动继续 plandex set-auto plus # 智能上下文管理 plandex set-auto semi # 自动加载上下文v2 默认等级 plandex set-auto full # 完全自动化也可以在创建新计划或启动 REPL 时直接指定plandex new --full、plandex --no-auto或在 REPL 内用\set-auto full。安全提示请对 full auto 模式保持高度谨慎它可以在没有任何提示与审查的情况下快速产生大量改动并且可能执行对系统有破坏性的命令。建议运行前确保 git 工作区干净先git checkout到一个隔离的分支再执行在计划分支上做实验配合rewind与 branches分支 保留可恢复的历史。小结本文覆盖了 Plandex 变更审查与落地的完整闭环任务产出先进沙箱成为待定变更 →plandex diff终端 / 浏览器 UI审查 →plandex reject部分或全部拒绝 →plandex apply应用到项目 → 自动执行验证命令并在失败时回滚、调试 → 在 full 自治等级下全程自动化。结合 app/cli/cmd/diffs.go、app/cli/cmd/reject.go、app/cli/cmd/apply.go 与 app/cli/lib/apply.go 等源码你可以清楚看到每次操作背后的回滚保障、版本记录与自动调试机制——这套设计让 AI 生成的代码既能高效落地又始终处于你的掌控之中。【免费下载链接】plandexOpen source AI coding agent. Designed for large projects and real world tasks.项目地址: https://gitcode.com/GitHub_Trending/pl/plandex创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表