Repository navigation
fix(gateway): 重新接入后恢复已有会话 - #3046
BigPizzaV3 merged 1 commit into
Conversation
|
感谢提交!问题定位很清楚,Rust 侧只在连接字段变化时发布代际、模型目录刷新不会误触发,这部分做得很好,测试也覆盖得比较全。我们在独立工作树重新组装了注入产物,和分片一致; 合入前有几处想请你调整一下:
另外 Linux job 还在跑,等它通过后我们再看一轮。辛苦了! |
|
感谢更新!这一轮我们在独立工作树复核过了:注入产物与分片一致,前端相关 393 项和 Rust 的 cdp_bridge / gateway_apply / bridge_routes 280 项都通过了。读取代际失败降级、页面基线、prepareGateway 降级、collaborationMode 空值保护和两个用例都已经到位,辛苦了。 还剩一个小场景想请你再看一下:页面加载后连接代际发生过变化(比如基线 one → two),之后新建的会话首条消息因为还没有历史( 建议:没有历史这条早退路径,如果能确认线程是在当前代际下创建的(例如在 |
|
针对新建会话和临时侧聊两点,已在
还有一个已写入描述的边界:新版 Codex 可在宿主进程预热线程,再由页面取用。页面没看到创建请求时,无法区分是旧连接的预热线程,还是当前连接新建的线程,这时第二条消息仍可能多做一次恢复。直接用发送时的代际会漏掉旧连接,因此没有做这个推断。 本次重跑网关和插件适配定向测试,51 项通过;注入产物与分片一致,当前提交的 Windows、Linux、macOS CI 均通过。真实供应商场景尚未验收。 |
|
感谢!两点都核对过了:本地 这一轮已经可以合,只差一步:刚合入的 #3070 也升了 |
e52d6f5 to
a114d0c
Compare
a114d0c to
41f2dfa
Compare
|
已按这轮意见变基到 回归覆盖了三条路径:旧版 完整前端 1,977 项通过、2 项跳过,网关、桥接、注入和插件适配相关 Rust 用例 76 项通过。当前提交的三平台 CI 均通过,当前对 main 无冲突。宿主预热线程的创建代际不可见时仍按 PR 描述中的边界处理。 |
问题
外部工具改写 Codex 配置后,即使重新接入 Codex++ 网关,已经加载的会话仍可能使用旧连接,后续消息可能继续发往旧端点。
方案
thread/start和预热请求记录创建时的代际,避免新会话在代际未再变化时被重复恢复。临时会话直接放行,不分页、不卸载和不恢复,并缓存类型以避免重复检查。验证
9b22eebd,请求包装版本升到42,重新组装 43 个分片并检查产物一致。ephemeral侧聊在代际变化后仍正常发送,不分页、不卸载、不恢复。[Bug]: 侧边聊天发送消息被上下文刷新逻辑拦截,提示“此新会话尚无历史” #3062:没有历史的新版attachToSource侧聊先走原生发送,有历史后在同一会话应用待处理的连接变化。保留 fix: 相同上下文配置切换额度账号时避免多余线程重载 #3070 的同上下文账号切换路径。已知限制
新版 Codex 可在宿主进程中预热线程,随后由
startConversation取用。页面未观察到创建请求时无法可靠确认创建代际:这种新会话在页面基线与当前代际不同时,第二条消息仍可能发生一次多余恢复。不能把发送时的代际直接当成创建代际,因为预热线程可能来自旧连接。若页面启动时的基线读取失败,下一次读取成功之前发生的代际变化无法恢复出来;恢复期间旧线程仍被占用时可能需要稍后重试。重新接入前已打开但尚未发送过消息的空会话,以及已经由原生服务派发的队列,未保证立即切到新端点。真实供应商和官方登录尚未验收。