使用已捕获句柄关闭未绑定的配对运行时窗格¶
一个已恢复的窗格在 remote.attach() 等待 terminal.resolvePane 时,可能已经持有作用域 remote:<environment>@@<handle> 布局绑定。传输的 getPtyId() 仍为 null。因此,显式 split 关闭会向 closeWebRuntimeTerminal 传递 null,移除布局绑定,并只销毁查看器。宿主终端保持连接。这种附加/拆除行为存在于 v1.4.198。
这是一种特定的保留宿主终端机制。该变更叠加在 #21001 中的本地/直接 SSH 待关闭修复之上,并复用其当前所有者查询。它并未证明 #15210 中的事件频率、Linux Electron-main 增长,或 #19831 的内存斜率。
范围与权限¶
只有完全匹配的作用域句柄,且其环境与拥有工作区的运行时匹配,才能授权此修复。现有退役规划和共享当前所有者查询保护其他标签页、同级别名和已绑定传输。提供者辅助函数捕获配对修订,执行其现有兼容性检查,然后在分发前立即再次检查配对和当前所有权。第二次调用仅跳过刚刚完成的检查。它发送针对已捕获句柄的现有 terminal.close 请求。
实际宿主测试夹具验证,以新实例重新注册相同 PTY ID 会分配新句柄。指向旧句柄的关闭会被拒绝,并且永远不会调用控制器的 kill 操作。客户端同叶采用、被替换的传输映射以及工作树/配对所有权变更也会抑制排队请求。普通分离仍然仅针对查看器。
原生宿主 PTY 提示、没有显式环境的旧句柄以及返回的不同句柄不在本修复范围内。当前客户端快照注册表保留新鲜度/帧标识,而不是实时终端行实例。从迟到的原生提示解析推断破坏性权限可能会阻止替换。独立的只读原生提示和待处理 Web 激活复现仍位于 notes/paired-pending-split-close;它确立了被省略的请求,并不声称这些被排除的情况已修复。未引入父标签页关闭、本地回退、新的 wire 字段或能力。请求不是进程死亡的确认;提供者故障保留其现有处理。
关闭确认审查更正¶
公共 split 关闭回调现在会在授权退役之前探测已捕获的作用域句柄,包括在 terminal.resolvePane 仍待处理时。实时或未经验证的待处理工作会打开现有确认对话框。取消会保留宿主终端;确认会重新检查已捕获的标签页、窗格、传输、句柄、宿主和配对修订。替换或成为唯一窗格的 split 会使旧决策失效。宿主现有的句柄实例围栏和兼容性分发检查仍然有效。
pending-pane-close-confirmation.test.ts 为本地/直接 SSH 和配对待处理窗格都添加了公共回调控制。下面的对比计数仍是原始证明快照,该快照直接调用了确认后的 executeClosePane 回调。
复现¶
在仓库根目录中使用现有依赖运行:
该脚本使用实际的 split 关闭钩子和远程传输运行 13 个测试,另外还有两个测试将关闭 RPC 投递到带有假 PTY 控制器的实际 OrcaRuntimeService。React 注册和无关的展示回调被模拟。未使用 Electron 窗口、宿主进程清单或真实 PTY 子进程。
临时 Vite 转换仅回滚 fix.patch;基线包含来自 #21001 的 IPC 修复。工作源码保持未修改。该脚本使用共享的跨平台进程运行器,并在 results.json 中记录源哈希和确切用例。
| 版本 | 通过 | 失败 |
|---|---|---|
| 作用域句柄修复前 | 5 | 10 |
| 作用域句柄修复后 | 15 | 0 |
基线失败数包含新的急切请求/兼容性断言,而不是十个独立泄漏。额外验证:21 个选定渲染器套件中的 255 个测试、完整渲染器类型检查、直接 lint 以及变更代码质量门均通过。原始 24 用例 IPC 证明在共享所有权提取后仍可运行;其已提交结果仍是已发布 IPC 源码的快照。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 orca48/orca