核心概念
隔离与回退
子代理、后台和你选定的对话各自在独立的工作树里改文件,改完自动合并回项目;每一轮都留检查点,随时可以整轮回退。
让 Agent 放手去改,前提是改坏了能退回来。Rna 从两头保证这一点:改动先落在独立的工作树里,确认后才合并进项目文件夹;每一轮都留检查点,写进项目的东西都能整轮还原。
谁在独立工作树里干活
| 谁 | 在哪里改 | 什么时候合并回项目 |
|---|---|---|
| 子代理(worker) | 每个子代理一个工作树 | 做完后,条件满足时宿主合并,否则保持待处理,由主对话用 agent_merge 合并 |
| 后台工作 | 每次运行一个工作树 | 运行结束时合并 |
| 你选定的对话 | 这个对话自己的工作树 | 每次这个对话把结果交还给你时应用 |
| 其他对话 | 直接在项目文件夹里 | 写入即生效,靠检查点回退 |
对话要不要用独立工作树,只能在新建时选择(输入框旁的“在独立工作树中运行”)。终端、文件面板和预览都会跟着这个对话的工作树走。
合并时的规矩
- 你在项目文件夹里还没提交的改动,永远是合并的一方,不会被覆盖。
- 不动你的 Git 索引、
HEAD和分支,也不会把冲突标记写进项目文件夹。 - 每个文件写入前都会核对它在合并期间没被别人改过;写之前先记账,中途崩溃也能接着恢复。
- 被
.gitignore忽略的文件(比如dist/)不会合并回来;依赖清单变了会提醒你在项目文件夹里重新安装。
两边改了同一处、一边改一边删、二进制文件两边都改了,这类情况算冲突。子代理的冲突由主对话用 agent_merge 处理:查看两边、选一边或手动解决;需要你拍板的,会以卡片的形式出现在输入框上方。
每一轮都能回退
每一轮开始时都会留一个检查点。这一轮写进项目文件夹的改动,在轮次末尾会显示“已应用到项目文件夹 · N 个文件”,旁边就是回退本轮。
- 回退只还原这一轮写进去的文件;之后又被改过的文件会单独标出来,不会被一并覆盖。
- 回退之后还能撤销回退,把改动重新写回去。
- “工作区改动”面板里能看到每一次应用记录(对话应用、子代理合并、后台应用、冲突处理),可以逐条回退。
回退会告诉模型。 你回退了一轮、丢掉了一个子代理的改动、还原了后台改动,下一轮对话开头都会带上一句“用户撤销了什么”。模型不会再相信过期的工具结果,后台也不会把你的回退当成“没同步上”,提议再改回去。
本轮交付按净改动计算
“本轮交付”和“审阅”显示的是宿主算出来的、每个文件这一轮的净改动,而不是把每次编辑片段的差异加起来。中间被别处改过的文件会分段标出,被回退的文件保留并注明。
需要什么条件
工作树隔离需要项目文件夹是 Git 仓库,并且:
- 本机有 git 2.38 或更高版本;
- 有 macOS 沙箱;
- 仓库没有配置自定义的过滤器或合并驱动。
不满足时,对话直接在项目文件夹里工作,检查点和整轮回退照常可用。
把项目变成 Git 仓库
项目文件夹还不是 Git 仓库时,可以选择初始化为 Git 仓库:Rna 会执行 git init、写入或追加 .gitignore、提交一次,不添加远端。执行前会先列出要做的事,确认后才动手。