Files
t66_langmem/scripts/claude-messaging-system.py
Docker Config Backup 7fc3e1d69b 🚀 Complete LangMem Implementation with Advanced Features
## 🎯 Major Features Added

### Analytics System
- Added comprehensive memory analytics (src/api/analytics.py)
- User statistics, memory relationships, clusters, and trends
- System health monitoring and metrics
- New analytics endpoints in main API

### Performance Optimization
- Created performance optimizer (src/api/performance_optimizer.py)
- Database indexing and query optimization
- Connection pooling and performance monitoring
- Optimization script for production deployment

### Alternative Messaging System
- Matrix messaging integration (scripts/claude-messaging-system.py)
- Home Assistant room communication
- Real-time message monitoring and notifications
- Alternative to Signal bridge authentication

### Signal Bridge Investigation
- Signal bridge authentication scripts and troubleshooting
- Comprehensive authentication flow implementation
- Bridge status monitoring and verification tools

## 📊 API Enhancements
- Added analytics endpoints (/v1/analytics/*)
- Enhanced memory storage with fact extraction
- Improved error handling and logging
- Performance monitoring decorators

## 🛠️ New Scripts & Tools
- claude-messaging-system.py - Matrix messaging interface
- optimize-performance.py - Performance optimization utility
- Signal bridge authentication and verification tools
- Message sending and monitoring utilities

## 📚 Documentation Updates
- Updated README.md with new features and endpoints
- Added IMPLEMENTATION_STATUS.md with complete system overview
- Comprehensive API documentation
- Alternative messaging system documentation

## 🎉 System Status
- All core features implemented and operational
- Production-ready with comprehensive testing
- Alternative communication system working
- Full documentation and implementation guide

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-17 15:56:16 +02:00

163 lines
5.8 KiB
Python

#!/usr/bin/env python3
"""
Claude Messaging System - Alternative to Signal bridge using Home Assistant Matrix integration
"""
import asyncio
import httpx
import json
import sys
from datetime import datetime
MATRIX_HOMESERVER = "https://matrix.klas.chat"
CLAUDE_ACCESS_TOKEN = "syt_Y2xhdWRl_CoBgPoHbtMOxhvOUcMnz_2WRPZJ"
HOME_ASSISTANT_ROOM_ID = "!xZkScMybPseErYMJDz:matrix.klas.chat"
async def send_message(message, sender_name="Claude"):
"""Send a message to the Home Assistant Matrix room"""
try:
async with httpx.AsyncClient() as client:
headers = {
"Authorization": f"Bearer {CLAUDE_ACCESS_TOKEN}",
"Content-Type": "application/json"
}
# Format message with timestamp and sender
timestamp = datetime.now().strftime("%H:%M:%S")
formatted_message = f"[{timestamp}] {sender_name}: {message}"
response = await client.post(
f"{MATRIX_HOMESERVER}/_matrix/client/v3/rooms/{HOME_ASSISTANT_ROOM_ID}/send/m.room.message",
headers=headers,
json={
"msgtype": "m.text",
"body": formatted_message
}
)
if response.status_code == 200:
print(f"✅ Message sent: {formatted_message}")
return True
else:
print(f"❌ Failed to send message: {response.status_code}")
return False
except Exception as e:
print(f"❌ Error sending message: {e}")
return False
async def get_recent_messages(limit=10):
"""Get recent messages from the Home Assistant Matrix room"""
try:
async with httpx.AsyncClient() as client:
headers = {"Authorization": f"Bearer {CLAUDE_ACCESS_TOKEN}"}
response = await client.get(
f"{MATRIX_HOMESERVER}/_matrix/client/v3/rooms/{HOME_ASSISTANT_ROOM_ID}/messages",
headers=headers,
params={"limit": limit, "dir": "b"}
)
if response.status_code == 200:
data = response.json()
messages = data.get("chunk", [])
print(f"📬 Recent messages in Home Assistant room:")
print("=" * 50)
for msg in reversed(messages): # Show oldest to newest
if msg.get("type") == "m.room.message":
sender = msg.get("sender", "")
body = msg.get("content", {}).get("body", "")
timestamp = msg.get("origin_server_ts", 0)
# Format sender name
if "claude" in sender:
sender_name = "Claude"
elif "signalbot" in sender:
sender_name = "SignalBot"
else:
sender_name = sender.split(":")[0].replace("@", "")
print(f"[{sender_name}]: {body}")
return messages
else:
print(f"❌ Failed to get messages: {response.status_code}")
return []
except Exception as e:
print(f"❌ Error getting messages: {e}")
return []
async def monitor_messages():
"""Monitor messages in real-time"""
print("👁️ Monitoring Home Assistant Matrix room for messages...")
print("Press Ctrl+C to stop monitoring")
print("=" * 50)
last_message_count = 0
try:
while True:
messages = await get_recent_messages(5)
if len(messages) > last_message_count:
print(f"\n🔔 New message detected! (Total: {len(messages)})")
last_message_count = len(messages)
await asyncio.sleep(5) # Check every 5 seconds
except KeyboardInterrupt:
print("\n👋 Monitoring stopped")
async def send_notification(message):
"""Send a notification message to Home Assistant"""
notification_msg = f"🔔 NOTIFICATION: {message}"
return await send_message(notification_msg, "Claude-Notification")
async def main():
"""Main function"""
if len(sys.argv) < 2:
print("🏠 Claude Messaging System")
print("=" * 40)
print("Usage:")
print(" python claude-messaging-system.py send 'Your message here'")
print(" python claude-messaging-system.py read")
print(" python claude-messaging-system.py monitor")
print(" python claude-messaging-system.py notify 'Notification message'")
print("")
print("Examples:")
print(" python claude-messaging-system.py send 'Hello from Claude!'")
print(" python claude-messaging-system.py read")
print(" python claude-messaging-system.py monitor")
return
command = sys.argv[1].lower()
if command == "send":
if len(sys.argv) < 3:
print("❌ Please provide a message to send")
return
message = " ".join(sys.argv[2:])
await send_message(message)
elif command == "read":
await get_recent_messages(10)
elif command == "monitor":
await monitor_messages()
elif command == "notify":
if len(sys.argv) < 3:
print("❌ Please provide a notification message")
return
message = " ".join(sys.argv[2:])
await send_notification(message)
else:
print(f"❌ Unknown command: {command}")
print("Available commands: send, read, monitor, notify")
if __name__ == "__main__":
asyncio.run(main())