opencode-semantic-memory 0.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,5 @@
1
+ """Session management modules for opencode-memory."""
2
+
3
+ from opencode_memory.session.registry import SessionRegistry
4
+
5
+ __all__ = ["SessionRegistry"]
@@ -0,0 +1,57 @@
1
+ """Session registry for tracking active OpenCode sessions."""
2
+
3
+ from datetime import UTC, datetime
4
+
5
+ from opencode_memory.models import Session
6
+ from opencode_memory.storage.sqlite import SQLiteStorage
7
+
8
+
9
+ class SessionRegistry:
10
+ """Manage active sessions and their claims."""
11
+
12
+ def __init__(self, storage: SQLiteStorage):
13
+ self.storage = storage
14
+
15
+ def register(self, session_id: str, working_on: str | None = None) -> Session:
16
+ """Register a new session."""
17
+ session = Session(
18
+ id=session_id,
19
+ started_at=datetime.now(UTC),
20
+ last_heartbeat=datetime.now(UTC),
21
+ working_on=working_on,
22
+ )
23
+ self.storage.upsert_session(session)
24
+ return session
25
+
26
+ def heartbeat(self, session_id: str) -> None:
27
+ """Update session heartbeat."""
28
+ sessions = self.storage.get_active_sessions(stale_minutes=60 * 24)
29
+ for s in sessions:
30
+ if s.id == session_id:
31
+ s.last_heartbeat = datetime.now(UTC)
32
+ self.storage.upsert_session(s)
33
+ return
34
+
35
+ def claim_item(self, session_id: str, item_ref: str) -> bool:
36
+ """Claim an item for a session. Returns False if already claimed.
37
+
38
+ Uses atomic database operation to prevent race conditions.
39
+ """
40
+ success, _ = self.storage.atomic_claim_item(session_id, item_ref)
41
+ return success
42
+
43
+ def release_item(self, session_id: str, item_ref: str) -> None:
44
+ """Release a claimed item."""
45
+ self.storage.atomic_release_item(session_id, item_ref)
46
+
47
+ def get_active_sessions(self) -> list[Session]:
48
+ """Get all active sessions."""
49
+ return self.storage.get_active_sessions()
50
+
51
+ def unregister(self, session_id: str) -> None:
52
+ """Remove a session."""
53
+ self.storage.delete_session(session_id)
54
+
55
+ def get_item_owner(self, item_ref: str) -> str | None:
56
+ """Get the session that owns an item."""
57
+ return self.storage.get_item_owner(item_ref)
@@ -0,0 +1,6 @@
1
+ """Storage modules for opencode-memory."""
2
+
3
+ from opencode_memory.storage.sqlite import SQLiteStorage
4
+ from opencode_memory.storage.vectors import VectorStorage
5
+
6
+ __all__ = ["SQLiteStorage", "VectorStorage"]