feat(03-01): extend session metadata and PID tracking

- Add idle_timeout field (default 600s) to session metadata
- Add get_session_timeout() helper to SessionManager
- Add pid property to ClaudeSubprocess for PID tracking
- Enables lifecycle management to query timeout values and track process PIDs
This commit is contained in:
Mikkel Georgsen 2026-02-04 23:28:40 +00:00
parent 488d94ebcf
commit 74f12a13fc
2 changed files with 28 additions and 1 deletions

View file

@ -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.

View file

@ -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.