fix: close Codex runtime on agent teardown

This commit is contained in:
JR Razmus 2026-07-18 16:42:29 -05:00
parent 3538f52cb2
commit b7d7cfd0ec
2 changed files with 41 additions and 0 deletions

View File

@ -3601,6 +3601,14 @@ class AIAgent:
except Exception:
pass
try:
codex_session = getattr(self, "_codex_session", None)
if codex_session is not None:
self._codex_session = None
codex_session.close()
except Exception:
pass
# 6. Free conversation history. Mirrors _release_evicted_agent_soft's
# soft-eviction clear — close() is the hard teardown for true session
# boundaries (/new, /reset, session expiry), so the message list won't

View File

@ -0,0 +1,33 @@
import threading
from run_agent import AIAgent
class _FakeCodexSession:
def __init__(self):
self.close_calls = 0
def close(self):
self.close_calls += 1
def test_agent_close_releases_codex_app_server_session(monkeypatch):
agent = AIAgent.__new__(AIAgent)
agent.session_id = "test-codex-lifecycle"
agent.client = None
agent._active_children_lock = threading.Lock()
agent._active_children = set()
agent._end_session_on_close = False
agent._session_messages = ["retained"]
codex_session = _FakeCodexSession()
agent._codex_session = codex_session
monkeypatch.setattr("run_agent.cleanup_vm", lambda _task_id: None)
monkeypatch.setattr("run_agent.cleanup_browser", lambda _task_id: None)
agent.close()
agent.close()
assert codex_session.close_calls == 1
assert agent._codex_session is None
assert agent._session_messages == []