返回资讯中心
外部精选
软件工程
#开发者实时流

Foremerge 0.6.0 修复编码代理中途终止任务留下的失效冲突记录问题

来源标题:Coding Agents stop mid-task

Foremerge 0.6.0 修复了编码代理会话中断后未关闭意图、导致协调存储堆积无效冲突的问题。此前代理会话常因上下文耗尽、合盖或定时任务结束而中断,遗留的开放意图被当作仍有效,在某个共享仓库中累积了 3896 条开放冲突,其中 98% 双方均无活跃代理。新版本让被放弃的计划不再被误判为进行中。

Hacker News 最新naw1032026/11/4 · 今天11 分钟阅读

以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。

Agent 会话结束时会留下未收尾的工作,而一个把废弃计划当作活跃计划的协调存储会不断堆积噪音。Foremerge 0.6.0 改了什么,以及为什么。

Foremerge 会在每个编码 agent 动手修改之前,记录它计划改什么;当两个计划不可能同时成立时,就发出告警。这只有在记录是最新的前提下才有效。0.6.0 版本修复了它此前失效的方式。

agent 会话结束时未关闭其 intent 的情况,比你想象的要常见得多。上下文窗口满了。笔记本合上了。定时运行到了时间片末尾。agent 发布的 intent 仍然开着,它的 claim 过期了,却没有人关闭它。

Foremerge 把这种被废弃的工作当成了活跃工作。之后针对同一批文件的每个 intent 都会与它比较,每次比较只要发现问题就会被记录下来。我们自己的一个仓库里,定时 agent 和交互式会话共用一个协调存储,积累了 3,896 个未关闭的冲突,其中 98% 的两侧都没有活跃 agent。在一个繁忙文件上新建 intent 时,打开就带着大约 40 条针对它的记录,而那些值得看的记录被淹没在不值得看的记录里。

这个问题只有在长时间同时运行多个 agent 时才会出现。单个 agent、单个会话,记录会碰巧保持整洁。

HIGH 级别的发现会拦住验收,一个只是安静下来的 agent 不能失去这层保护。所以这道关卡没有变。一个已停止的 intent,如果它声明的计划确实和你的计划矛盾,它仍然会主张自己,你仍然必须在 ChangeSet 被接受之前处理它。这条规则只移除这道线以下的提示性噪音。

以前,在一个拥挤的文件上新建 intent,返回的是一长串已记录的冲突,大多数针对的 agent 已经离开好几天了,而列表里没有任何信息告诉你哪条是哪条。现在同一个 intent 返回时只带活跃的发现。已停止的工作仍然留在 related_work 末尾,每条都带有 owner_stopped_since,标明其 agent 安静下来的时间,这样你能看到哪些被搁置了,如果值得完成就可以捡起来。

已经记录在案的冲突不会被升级触及。要清理像我们这样的积压,请关闭那些已停止的 intent。

Foremerge 以前会在打开账本时顺带迁移它的 schema,而每条命令都会打开账本,包括只读的命令。一次用较新版本的二进制在错误目录下运行的 status,迁移了一个真实仓库的共享协调存储,并把所有较旧的客户端锁在了外面。

Foremerge 不再在打开时迁移。遇到较旧账本的命令会以 MIGRATION_REQUIRED 拒绝,并让文件保持原样。foremerge ledger migrate 负责迁移,其他任何东西都不做:当另一个进程打开了账本时它拒绝运行,把账本连同其 WAL 内容复制到一个带时间戳的备份目录,检查副本的完整性,执行迁移,并打印如何回滚。不加 --yes 时它只报告它会做什么。

schema 本身自 0.4.0 以来没有变过,所以从任何 0.4.x 或 0.5.x 构建升级都不需要迁移,两个版本读取同一个存储。只有最后一次被 0.3.x 打开过的账本才需要这一步。这就是为什么 0.6.0 是次版本号而不是补丁版本。

curl -fsSL https://foremerge.com/install.sh | sh

这会在 macOS 和 Linux 上安装一个经过校验和验证的发布二进制。在 npm 上,同样覆盖 Windows x64:

npm install -g foremerge

完整的变更列表在 0.6.0 发布说明中。

如果你在为 agent 构建协调机制,需要设计的故障模式不是某个 agent 与另一个 agent 意见不合。而是那个再也不会回来的 agent。人类协作者最终会关闭他们的工单,因为有人要求他们这么做。一个进程已经退出的 agent 没有这种压力,而一个假设相反情况的存储会慢慢堆满没有人在做、也永远不会有人撤回的工作。

面向并行编码 agent 的开源协调协议,构建在 Git 之上。agent 在写代码之前声明 intent 和语义范围,这样不可能同时成立的计划会在一个可查询的存储中碰撞,而不是在你的合并中碰撞。单个 Rust 二进制,Apache-2.0,本地优先。

intent 冲突是两个不可能同时成立的已声明计划。Git 看不到它,因为 Git 比较的是行,不是计划。一个定义、一个示例,以及它不是什么。

给每个 agent 自己的工作树,按每个任务改什么来拆分工作,然后测试合并后的结果。这能处理文件。它处理不了两个不可能同时成立的计划,而 Git 会一声不吭地把它们合并。

正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。

打开原文
去社区讨论 →