fix(runtime): normalize recovery session routing

This commit is contained in:
Xubin Ren
2026-08-24 00:58:04 +08:00
parent 58a1cc48d8
commit c7e2a474a0
2 changed files with 41 additions and 7 deletions
+8 -7
View File
@@ -1303,6 +1303,12 @@ class AgentLoop:
break
if deferred:
continue
routed_msg = msg
if effective_key != msg.session_key:
routed_msg = dataclasses.replace(
msg,
session_key_override=effective_key,
)
# A newer WebUI message must supersede an explicit recovery
# before it is injected into that recovery's pending queue.
# Without this admission point, a recovered turn could finish
@@ -1311,7 +1317,7 @@ class AgentLoop:
effective_key in self._pending_queues
and msg.channel == "websocket"
and self._recovery_admission is not None
and not await self._recovery_admission.admit(msg)
and not await self._recovery_admission.admit(routed_msg)
):
continue
# If this session already has an active pending queue (i.e. a task
@@ -1326,12 +1332,7 @@ class AgentLoop:
self.commands.dispatch,
)
continue
pending_msg = msg
if effective_key != msg.session_key:
pending_msg = dataclasses.replace(
msg,
session_key_override=effective_key,
)
pending_msg = routed_msg
session = self.sessions.get_or_create(effective_key)
followup_id = record_pending_followup(session, pending_msg)
if followup_id is not None: