David Prince
production: clean source snapshot — no history bloat
71b4454
Raw
History Blame Contribute Delete
1.36 kB
import time
import uuid
from typing import Dict, Any, Optional, List
from pydantic import BaseModel, Field
class WorkspaceSession(BaseModel):
session_id: str
workspace_root: str = "."
active_files: List[str] = Field(default_factory=list)
created_at: float = Field(default_factory=time.time)
metadata: Dict[str, Any] = Field(default_factory=dict)
class SessionManager:
def __init__(self):
self._sessions: Dict[str, WorkspaceSession] = {}
def create_session(self, workspace_root: str = ".", metadata: Optional[Dict[str, Any]] = None) -> WorkspaceSession:
session_id = f"sess_{uuid.uuid4().hex[:12]}"
session = WorkspaceSession(
session_id=session_id,
workspace_root=workspace_root,
metadata=metadata or {}
)
self._sessions[session_id] = session
return session
def get_session(self, session_id: str) -> Optional[WorkspaceSession]:
return self._sessions.get(session_id)
def set_active_files(self, session_id: str, files: List[str]) -> bool:
session = self.get_session(session_id)
if not session:
return False
session.active_files = files
return True
def list_sessions(self) -> List[WorkspaceSession]:
return list(self._sessions.values())
session_manager = SessionManager()