From bcbaaa40203704f92cead3a308724112508b14b9 Mon Sep 17 00:00:00 2001 From: kshitijk4poor <82637225+kshitijk4poor@users.noreply.github.com> Date: Mon, 27 Jul 2026 23:28:06 +0500 Subject: [PATCH] fix: propagate logging session context after daemon-pool compress_context compress_context now runs on a daemon pool worker thread (via run_compress_context_with_progress_timeout). The session id rotation updates hermes_logging._session_context (a threading.local) on the WORKER thread, not the caller thread. After the wrapper returns, propagate self.session_id back to the caller's logging context so subsequent log lines carry the rotated id (#34089). Fixes CI failure in test_compression_logging_session_context. --- run_agent.py | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/run_agent.py b/run_agent.py index b7c8df670068f..ad99cec2468b5 100644 --- a/run_agent.py +++ b/run_agent.py @@ -7192,7 +7192,7 @@ class AIAgent: "session, or check auxiliary.compression." ) - return run_compress_context_with_progress_timeout( + result = run_compress_context_with_progress_timeout( worker=_run, messages=messages, system_prompt_fallback=_fallback_prompt, @@ -7200,24 +7200,22 @@ class AIAgent: total_ceiling_seconds=total_ceiling, on_timeout=_on_timeout, ) - self._active_compression_commit_fence = active_fence + # compress_context ran on a daemon pool worker thread; the session + # id rotation updated hermes_logging._session_context (a + # threading.local) on the WORKER thread, not this one. Propagate + # the current session_id back so subsequent log lines on this + # thread carry the rotated id (#34089). try: - return compress_context( - self, messages, system_message, - approx_tokens=approx_tokens, task_id=task_id, focus_topic=focus_topic, - force=force, - defer_context_engine_notification=defer_context_engine_notification, - commit_fence=active_fence, - ) - finally: - if previous_fence is missing_fence: - vars(self).pop("_active_compression_commit_fence", None) - else: - self._active_compression_commit_fence = previous_fence - # Restore whatever the caller had, so a compaction never leaks its - # tag into the surrounding scope. - if token is not None: - reset_conversation_context(token) + from hermes_logging import set_session_context + set_session_context(self.session_id) + except Exception: + pass + return result + finally: + # Restore whatever the caller had, so a compaction never leaks its + # tag into the surrounding scope. + if token is not None: + reset_conversation_context(token) def _set_tool_guardrail_halt(self, decision: ToolGuardrailDecision) -> None: """Record the first guardrail decision that should stop this turn."""