AI资讯

DSH插件开发经历104个测试全绿却会话重启失败

开发者在构建DSH插件时,经历了从临时hack到官方修复的过程,记录了AI agent和人类开发者都会遇到的坑。

AI云图智寻编辑部2026-09-29 15:21
阅读时间:约 2 分钟访问0
DSH插件开发经历104个测试全绿却会话重启失败
开发者在为Codex构建回滚功能时,遇到了一系列问题,尽管104个测试全部通过,但在会话重启后无法正常工作。本文记录了从临时hack到官方修复的过程,提供了对其他插件开发者的宝贵经验。

插件开发中的关键问题

开发者在为Codex构建回滚功能时,将文件快照与恢复的部分抽成了独立的FileSnap插件。然而,在实际开发过程中,遇到了包安装成功但监听器未触发、文件回退成功但对话位置错误等问题。这些问题在最初的87个测试中并未被发现,直到104个测试通过后才显现出来。这些问题不仅涉及框架的依赖注入和生命周期管理,还包括事件顺序和持久化机制。

监听器和事件处理的问题

FileSnap插件需要在写文件之前读取旧内容,但最初监听fs/write-intent和fs/edit-intent事件时,部分文件未能正确记录。原因是这些事件经过waterfall,而官方的fs-observation-policy占据了决策位置,导致第三方监听器无法执行。为解决这个问题,开发者将监听器前置,并确保其在宿主决策之前执行。此外,还必须验证监听器是否先执行、政策是否仍执行以及政策拒绝时是否真的没有写文件。

会话持久化和fork问题

早期版本的插件将自定义事件写入Session,虽然当前进程看起来正常,但在冷加载时会出现未知事件错误。开发者最初通过修改内部集合来解决这个问题,但最终放弃了向对话写这类事件。另一个问题是,早期atSeq会向后寻找所属轮次的turn/end,导致文件和对话不同步。官方后来修正了这一问题,引入了精确事件前缀fork,使显式atSeq成为包含所选事件的精确边界。开发者建议在设计回退功能时,应验证文件和对话是否停在同一时刻。