AI 代理工作区中自动生成 state 文件的排查记录
背景 某 AI 代理工具的工作区目录中,反复出现一个状态文件。即使手动删除,过一段时间后文件仍会重新生成。 工作区中同时还能看到另一个隐藏目录下的状态文件。经过人工对比,这两个文件内容完全相同。于是问题变成了: 现象 工作区中存在两个状态文件: 其中顶层的 state 文件删除后会再次出现。隐藏目录中的 state 文件一直存在。 两个文件内容相同,JSON 结构也相同,主要记录工作区初始化状态,例如: 这些字段看起来不像用户数据,也不像配置密钥,而是程序用于判断工作区是否完成初始化的运行状态信息。 排查方式 排查过程中保持只读原则,没有删除、移动、修改文件,也没有重启服务。 主要检查方向包括: 排查结果 结果显示,这两个文件都属于工具正常运行会产生的文件,但地位并不完全相同。 顶层的状态文件是当前版本代码中的 canonical 路径,也就是当前主状态文件。 隐藏目录中的状态文件是 legacy 兼容路径,也就是旧路径或兼容路径。当前代码仍然会读取它,并在需要时把里面的状态迁移回顶层的 canonical 文件。 换句话说,这不是两个互相冲突的状态文件,而是同一份工作区状态在新旧路径之间共存。 为什么删除后还会出现 删除顶层状态文件后,如果隐藏目录中的 legacy 状态文件仍然存在,那么下一次工具启动、工作区初始化、代理会话创建或 heartbeat 触发时,程序会重新读取 legacy 状态。 如果程序发现顶层 canonical 状态文件不存在,就会根据 legacy 状态重新生成顶层文件。 因此,文件并不是“神秘复活”,而是程序的兼容迁移逻辑主动恢复了它。 可以理解为: 是否属于异常 从排查结果看,没有明显异常迹象。 两个文件内容一致,权限正常,字段结构正常,也没有发现异常进程或可疑写入行为。顶层文件比隐藏目录中的文件更新,说明当前程序确实更偏向使用顶层 canonical 文件,而隐藏目录中的文件更像历史兼容残留。 这种情况更像是软件版本迁移期间的兼容设计,而不是数据损坏或异常垃圾文件。 …