fix(gateway): add HERMES_SESSION_KEY to session_context contextvars
Complete the contextvars migration by adding HERMES_SESSION_KEY to the unified _VAR_MAP in session_context.py. Without this, concurrent gateway handlers race on os.environ["HERMES_SESSION_KEY"]. - Add _SESSION_KEY ContextVar to _VAR_MAP, set_session_vars(), clear_session_vars() - Wire session_key through _set_session_env() from SessionContext - Replace os.getenv fallback in tools/approval.py with get_session_env() (function-level import to avoid cross-layer coupling) - Keep os.environ set as CLI/cron fallback Cherry-picked from PR #7878 by 0xbyt4.
This commit is contained in:
@@ -40,11 +40,18 @@ def reset_current_session_key(token: contextvars.Token[str]) -> None:
|
||||
|
||||
|
||||
def get_current_session_key(default: str = "default") -> str:
|
||||
"""Return the active session key, preferring context-local state."""
|
||||
"""Return the active session key, preferring context-local state.
|
||||
|
||||
Resolution order:
|
||||
1. approval-specific contextvars (set by gateway before agent.run)
|
||||
2. session_context contextvars (set by _set_session_env)
|
||||
3. os.environ fallback (CLI, cron, tests)
|
||||
"""
|
||||
session_key = _approval_session_key.get()
|
||||
if session_key:
|
||||
return session_key
|
||||
return os.getenv("HERMES_SESSION_KEY", default)
|
||||
from gateway.session_context import get_session_env
|
||||
return get_session_env("HERMES_SESSION_KEY", default)
|
||||
|
||||
# Sensitive write targets that should trigger approval even when referenced
|
||||
# via shell expansions like $HOME or $HERMES_HOME.
|
||||
|
||||
Reference in New Issue
Block a user