File size: 1,360 Bytes
71b4454
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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()