diff --git a/telegram/claude_subprocess.py b/telegram/claude_subprocess.py index 3e7d757..a50a646 100644 --- a/telegram/claude_subprocess.py +++ b/telegram/claude_subprocess.py @@ -113,6 +113,16 @@ class ClaudeSubprocess: """Return whether subprocess process is running.""" return self._process is not None and self._process.returncode is None + @property + def pid(self) -> Optional[int]: + """ + Return process ID of running subprocess. + + Returns: + PID if process is running, None otherwise + """ + return self._process.pid if self._process and self._process.returncode is None else None + async def start(self) -> None: """ Start the persistent Claude Code subprocess. diff --git a/telegram/session_manager.py b/telegram/session_manager.py index 57457c0..ca0ef19 100644 --- a/telegram/session_manager.py +++ b/telegram/session_manager.py @@ -162,7 +162,8 @@ class SessionManager: "last_active": now, "persona": persona, "pid": None, - "status": "idle" + "status": "idle", + "idle_timeout": 600 } self._write_metadata(name, metadata) @@ -293,6 +294,22 @@ class SessionManager: self._write_metadata(name, metadata) logger.debug(f"Updated session '{name}': {kwargs}") + def get_session_timeout(self, name: str) -> int: + """ + Get session idle timeout in seconds. + + Args: + name: Session name + + Returns: + Idle timeout in seconds (defaults to 600s if not set) + + Raises: + ValueError: If session does not exist + """ + metadata = self._read_metadata(name) + return metadata.get('idle_timeout', 600) + def session_exists(self, name: str) -> bool: """ Check if session exists.