From fb654c15d86627da51b236f538c75345948fc1ed Mon Sep 17 00:00:00 2001 From: Teknium Date: Fri, 3 Apr 2026 15:07:18 -0700 Subject: [PATCH] fix: add type hints to session key helpers, extend context-local key to terminal_tool - Add contextvars.Token[str] type hints to set/reset_current_session_key - Use get_current_session_key(default='') in terminal_tool.py for background process session tracking, fixing the same env var race for concurrent gateway sessions spawning background processes --- tools/approval.py | 4 ++-- tools/terminal_tool.py | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/tools/approval.py b/tools/approval.py index 5e8e4cfe5..ab2a10927 100644 --- a/tools/approval.py +++ b/tools/approval.py @@ -29,12 +29,12 @@ _approval_session_key: contextvars.ContextVar[str] = contextvars.ContextVar( ) -def set_current_session_key(session_key: str): +def set_current_session_key(session_key: str) -> contextvars.Token[str]: """Bind the active approval session key to the current context.""" return _approval_session_key.set(session_key or "") -def reset_current_session_key(token) -> None: +def reset_current_session_key(token: contextvars.Token[str]) -> None: """Restore the prior approval session key context.""" _approval_session_key.reset(token) diff --git a/tools/terminal_tool.py b/tools/terminal_tool.py index f4ffeec79..e11f9d434 100644 --- a/tools/terminal_tool.py +++ b/tools/terminal_tool.py @@ -1088,9 +1088,10 @@ def terminal_tool( # Spawn a tracked background process via the process registry. # For local backends: uses subprocess.Popen with output buffering. # For non-local backends: runs inside the sandbox via env.execute(). + from tools.approval import get_current_session_key from tools.process_registry import process_registry - session_key = os.getenv("HERMES_SESSION_KEY", "") + session_key = get_current_session_key(default="") effective_cwd = workdir or cwd try: if env_type == "local":