fix(gateway): use filtered history length for transcript message extraction
The transcript extraction used len(history) to find new messages, but history includes session_meta entries that are stripped before passing to the agent. This mismatch caused 1 message to be lost from the transcript on every turn after the first, because the slice offset was too high. Use the filtered history length (history_offset) returned by _run_agent instead. Also changed the else branch from returning all agent_messages to returning an empty list, so compressed/shorter agent output does not duplicate the entire history into the transcript.
This commit is contained in:
@@ -945,9 +945,12 @@ class GatewayRunner:
|
||||
}
|
||||
)
|
||||
|
||||
# Find only the NEW messages from this turn (skip history we loaded)
|
||||
history_len = len(history)
|
||||
new_messages = agent_messages[history_len:] if len(agent_messages) > history_len else agent_messages
|
||||
# Find only the NEW messages from this turn (skip history we loaded).
|
||||
# Use the filtered history length (history_offset) that was actually
|
||||
# passed to the agent, not len(history) which includes session_meta
|
||||
# entries that were stripped before the agent saw them.
|
||||
history_len = agent_result.get("history_offset", len(history))
|
||||
new_messages = agent_messages[history_len:] if len(agent_messages) > history_len else []
|
||||
|
||||
# If no new messages found (edge case), fall back to simple user/assistant
|
||||
if not new_messages:
|
||||
@@ -2070,6 +2073,7 @@ class GatewayRunner:
|
||||
"messages": result_holder[0].get("messages", []) if result_holder[0] else [],
|
||||
"api_calls": result_holder[0].get("api_calls", 0) if result_holder[0] else 0,
|
||||
"tools": tools_holder[0] or [],
|
||||
"history_offset": len(agent_history),
|
||||
}
|
||||
|
||||
# Start progress message sender if enabled
|
||||
|
||||
Reference in New Issue
Block a user