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.
- opencode_memory/__init__.py +3 -0
- opencode_memory/cache.py +261 -0
- opencode_memory/cli.py +794 -0
- opencode_memory/config.py +89 -0
- opencode_memory/daemon.py +879 -0
- opencode_memory/enrichment/__init__.py +0 -0
- opencode_memory/enrichment/gitlab.py +237 -0
- opencode_memory/extraction.py +225 -0
- opencode_memory/historical_ingest.py +142 -0
- opencode_memory/http_server.py +464 -0
- opencode_memory/ingestion/__init__.py +7 -0
- opencode_memory/ingestion/embeddings.py +211 -0
- opencode_memory/ingestion/extractors.py +287 -0
- opencode_memory/ingestion/opencode_db.py +448 -0
- opencode_memory/ingestion/parser.py +344 -0
- opencode_memory/ingestion/watcher.py +88 -0
- opencode_memory/linking/__init__.py +5 -0
- opencode_memory/linking/linker.py +323 -0
- opencode_memory/metrics.py +273 -0
- opencode_memory/models.py +171 -0
- opencode_memory/project.py +86 -0
- opencode_memory/query/__init__.py +5 -0
- opencode_memory/query/hybrid.py +196 -0
- opencode_memory/server.py +2795 -0
- opencode_memory/session/__init__.py +5 -0
- opencode_memory/session/registry.py +57 -0
- opencode_memory/storage/__init__.py +6 -0
- opencode_memory/storage/sqlite.py +1608 -0
- opencode_memory/storage/vectors.py +199 -0
- opencode_semantic_memory-0.1.0.dist-info/METADATA +531 -0
- opencode_semantic_memory-0.1.0.dist-info/RECORD +33 -0
- opencode_semantic_memory-0.1.0.dist-info/WHEEL +4 -0
- opencode_semantic_memory-0.1.0.dist-info/entry_points.txt +3 -0
|
@@ -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)
|