Skip to content

Commit 11b6f48

Browse files
Address tmux cleanup review feedback
Co-authored-by: openhands <openhands@all-hands.dev>
1 parent 7ce93c7 commit 11b6f48

File tree

4 files changed

+13
-13
lines changed

4 files changed

+13
-13
lines changed

openhands-agent-server/openhands/agent_server/api.py

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -44,34 +44,30 @@
4444
from openhands.agent_server.vscode_service import get_vscode_service
4545
from openhands.sdk.logger import DEBUG, get_logger
4646
from openhands.sdk.utils.redact import sanitize_dict
47+
from openhands.tools.terminal.constants import TMUX_SOCKET_NAME
4748

4849

4950
logger = get_logger(__name__)
5051

5152

52-
async def cleanup_stale_tmux_sessions() -> None:
53+
def cleanup_stale_tmux_sessions() -> None:
5354
"""Clean up any stale tmux sessions on server startup.
5455
5556
Tmux sessions live in a separate process that survives agent-server restarts.
56-
This function kills all existing sessions on the openhands socket to prevent
57-
accumulation of orphaned sessions. Reconnecting conversations will create
58-
fresh sessions as needed.
57+
This function kills all existing sessions on the shared OpenHands tmux socket
58+
to prevent accumulation of orphaned sessions.
5959
"""
6060
try:
6161
import libtmux
6262

63-
# Connect to the dedicated OpenHands tmux server
64-
server = libtmux.Server(socket_name="openhands")
65-
66-
# Get all sessions on this server
63+
server = libtmux.Server(socket_name=TMUX_SOCKET_NAME)
6764
sessions = server.sessions
6865
if not sessions:
69-
logger.debug("No tmux sessions found on openhands socket")
66+
logger.debug("No tmux sessions found on %s socket", TMUX_SOCKET_NAME)
7067
return
7168

7269
logger.info("Cleaning up %d stale tmux session(s) on startup", len(sessions))
7370

74-
# Kill all sessions - they're all stale since we're starting up
7571
for session in sessions:
7672
try:
7773
logger.debug("Killing tmux session: %s", session.name)
@@ -91,7 +87,7 @@ async def cleanup_stale_tmux_sessions() -> None:
9187
@asynccontextmanager
9288
async def api_lifespan(api: FastAPI) -> AsyncIterator[None]:
9389
# Clean up stale tmux sessions from previous server runs
94-
await cleanup_stale_tmux_sessions()
90+
cleanup_stale_tmux_sessions()
9591

9692
service = get_default_conversation_service()
9793
vscode_service = get_vscode_service()

openhands-tools/openhands/tools/terminal/constants.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@
3434
POLL_INTERVAL: Final[float] = 0.5
3535
HISTORY_LIMIT: Final[int] = 10_000
3636

37+
TMUX_SOCKET_NAME: Final[str] = "openhands"
38+
3739
# Tmux session dimensions (columns x rows).
3840
# Large values ensure output is not wrapped or truncated by the virtual terminal.
3941
TMUX_SESSION_WIDTH: Final[int] = 1000

openhands-tools/openhands/tools/terminal/terminal/tmux_pane_pool.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
HISTORY_LIMIT,
2424
TMUX_SESSION_HEIGHT,
2525
TMUX_SESSION_WIDTH,
26+
TMUX_SOCKET_NAME,
2627
)
2728
from openhands.tools.terminal.terminal.tmux_terminal import TmuxTerminal
2829

@@ -112,7 +113,7 @@ def initialize(self) -> None:
112113
return
113114

114115
env = sanitized_env()
115-
self._server = libtmux.Server(socket_name="openhands", environment=env)
116+
self._server = libtmux.Server(socket_name=TMUX_SOCKET_NAME, environment=env)
116117
session_name = f"openhands-pool-{self.username}-{uuid.uuid4()}"
117118
self._session = self._server.new_session(
118119
session_name=session_name,

openhands-tools/openhands/tools/terminal/terminal/tmux_terminal.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
HISTORY_LIMIT,
1212
TMUX_SESSION_HEIGHT,
1313
TMUX_SESSION_WIDTH,
14+
TMUX_SOCKET_NAME,
1415
)
1516
from openhands.tools.terminal.metadata import CmdOutputMetadata
1617
from openhands.tools.terminal.terminal import TerminalInterface
@@ -47,7 +48,7 @@ def initialize(self) -> None:
4748

4849
env = sanitized_env()
4950
# Use a dedicated socket to isolate OpenHands sessions from the user's tmux
50-
self.server = libtmux.Server(socket_name="openhands", environment=env)
51+
self.server = libtmux.Server(socket_name=TMUX_SOCKET_NAME, environment=env)
5152
_shell_command = "/bin/bash"
5253
if self.username in ["root", "openhands"]:
5354
# This starts a non-login (new) shell for the given user

0 commit comments

Comments
 (0)