feat: Add presence heartbeat for Matrix online status

- matrix-gateway: POST /internal/matrix/presence/online endpoint
- usePresenceHeartbeat hook with activity tracking
- Auto away after 5 min inactivity
- Offline on page close/visibility change
- Integrated in MatrixChatRoom component
This commit is contained in:
Apple
2025-11-27 00:19:40 -08:00
parent 5bed515852
commit 3de3c8cb36
6371 changed files with 1317450 additions and 932 deletions

View File

@@ -0,0 +1,75 @@
import os
import json
from typing import Optional
from models import MemoryItem
from datetime import datetime
class KnowledgeBaseBackend:
"""
Long-term knowledge base (filesystem)
Phase 3: Stub implementation
Stores docs, roadmaps, and structured knowledge
"""
def __init__(self, kb_path: str = "/data/kb"):
self.kb_path = kb_path
async def initialize(self):
"""Create KB directory"""
if not os.path.exists(self.kb_path):
try:
os.makedirs(self.kb_path, exist_ok=True)
print(f"✅ KB directory created: {self.kb_path}")
except Exception as e:
print(f"⚠️ Failed to create KB directory: {e}")
print(" Using in-memory stub")
async def query(
self,
agent_id: str,
query_text: str,
limit: int = 5
) -> list[MemoryItem]:
"""
Query knowledge base
Phase 3: Returns stub/empty results
Phase 4: Implement proper KB indexing and search
"""
# Stub implementation for Phase 3
print(f" KB query (stub): {query_text[:50]}...")
# Return empty results for now
# In Phase 4, this would:
# 1. Index docs/roadmaps with embeddings
# 2. Perform semantic search
# 3. Return relevant knowledge chunks
return []
async def store(
self,
agent_id: str,
microdao_id: str,
kind: str,
content: dict,
metadata: Optional[dict] = None
) -> str:
"""
Store knowledge base entry
Phase 3: Stub implementation
"""
# Stub for Phase 3
entry_id = f"kb-{datetime.now().timestamp()}"
print(f" KB store (stub): {entry_id}")
# In Phase 4, would write to filesystem or DB
# with proper indexing
return entry_id