fix(agent): propagate effective session key through subagent pipeline

The previous fix hardcoded session_key_override as channel:chat_id which
broke unified session mode where pending queues use "unified:default".
Propagate the effective key from _set_tool_context through SpawnTool
into the origin dict so _announce_result routes to the correct pending
queue in both normal and unified session modes.
This commit is contained in:
chengyongru
2026-04-20 14:47:14 +08:00
committed by Xubin Ren
parent 2193a64c80
commit 68466b1c2a
4 changed files with 104 additions and 8 deletions
+7 -5
View File
@@ -107,7 +107,7 @@ class SubagentManager:
"""Spawn a subagent to execute a task in the background."""
task_id = str(uuid.uuid4())[:8]
display_label = label or task[:30] + ("..." if len(task) > 30 else "")
origin = {"channel": origin_channel, "chat_id": origin_chat_id}
origin = {"channel": origin_channel, "chat_id": origin_chat_id, "session_key": session_key}
status = SubagentStatus(
task_id=task_id,
@@ -241,15 +241,17 @@ class SubagentManager:
)
# Inject as system message to trigger main agent.
# Use session_key_override to align with the main agent's session key
# so the result is routed to the pending queue (mid-turn injection)
# instead of being dispatched as a competing independent task.
# Use session_key_override to align with the main agent's effective
# session key (which accounts for unified sessions) so the result is
# routed to the correct pending queue (mid-turn injection) instead of
# being dispatched as a competing independent task.
override = origin.get("session_key") or f"{origin['channel']}:{origin['chat_id']}"
msg = InboundMessage(
channel="system",
sender_id="subagent",
chat_id=f"{origin['channel']}:{origin['chat_id']}",
content=announce_content,
session_key_override=f"{origin['channel']}:{origin['chat_id']}",
session_key_override=override,
metadata={
"injected_event": "subagent_result",
"subagent_task_id": task_id,