已关闭的 TUI 会话保留转录监听器¶
在结构化会话交接给终端后,StructuredTuiTranscriptCatchup 会跟踪提供程序转录。成功的 StructuredAgentSessionHost.close 停止了 TUI 所有者,持久释放了其租约,并移除了宿主会话,但没有停止其转录追赶。实时监听器和追赶状态(包括先前已见的消息 ID)仍然可达。重复关闭不同会话可能累积这些资源,直到宿主拆除。
该修复在已验证的终端关闭和持久租约迁移成功后,调用现有的 stopTuiHistoryCatchup 回调。它在后续日志驱逐之前移除追赶状态并取消订阅监听器。未验证的停止或失败的租约写入会保留监听器以便重试。后续的日志关闭失败无法撤销已完成的监听器清理。执行宿主保留权限;不涉及客户端对远程进程死亡或线路变化的推断。
复现¶
在已安装现有依赖的仓库根目录中:
该证明使用真实结构化宿主、记录存储、日志、交接协调器和转录监听器,针对临时合成的 Codex 转录。只有提供程序进程获取/停止是测试传输;不会启动真实 shell 或 Orca 窗口。它在临时 Vite 转换中移除单个清理调用以建立基线,然后针对修复后的源代码运行相同的四个测试。它使用仓库的 runProcess 并清理临时配置/模块文件。源代码哈希记录在 results.json 中。
| 版本 | 通过 | 失败 |
|---|---|---|
| 修复前 | 0 | 4 |
| 修复后 | 4 | 0 |
成功关闭用例观察到一个新增监听器,证明实时 TUI 文本到达日志,关闭会话,验证租约已释放且会话已移除,并期望监听器数量返回原始值。修复前它保持高一个。其余用例验证未验证终端停止/重试、失败持久迁移/重试和失败日志驱逐/重试。这些是对一个清理遗漏的四个检查。
现有追赶测试还验证实时追加以及在宿主宕机期间写入的恢复保持完整。所有七个目标测试均通过,Node 类型检查和直接 lint 也通过。
版本与限制¶
对 v1.4.198 的指定路径读取确认,其宿主关闭调用相同的 owner-close 辅助函数,该辅助函数省略了追赶清理,且其追赶拥有相同的状态/监听器生命周期。可执行比较使用当前生产源代码。这确立了报告构建中存在的保留路径;它并未确立 #19831 或 #19768 中的任何一个执行了此交接并关闭序列,也未测量任一报告的内存增长。
另一个异步获取竞态仍未解决:拆除在排空交接之前调用 stopAll,而追赶设置可能仍在等待路径解析或订阅获取。仅仅拒绝已取消的准备不足以作为完整的拆除修复:前向交接的现有失败恢复可能获取一个原生替代,并且交接排空有五秒限制。该竞态需要自己的所有者取消策略和回归证明;此更改覆盖已获取 TUI 所有者的成功关闭。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 orca48/orca