- 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
9.2 KiB
Monitor Agent - Memory Integration Guide
📊 Статус Monitor Agent
Деплой:
- ✅ Задеплоєно: Так
- Node: НОДА1 (node-1-hetzner-gex44)
- Agent ID:
agent-monitor - Model:
local_qwen3_8b - Backend:
local(Ollama) - Status:
active - Type: System Agent (Worker)
Конфігурація:
- Priority: High
- Category: Core
- Department: Core
- Workspace: Не призначено (глобальний агент)
🧠 Пам'ять Monitor Agent
Поточна пам'ять (Knowledge Base):
Monitor Agent автоматично збирає знання в файлову систему:
-
system_metrics.json (500 KB, live)
- Real-time system metrics
- Performance data
- Resource usage statistics
-
infrastructure_docs.md (120 KB, vectorized)
- Infrastructure documentation
- System architecture
- Service configurations
-
agent_activities.log (2.1 MB, live)
- Agent activity logs
- Task execution history
- Agent interactions
-
node_status_history.json (850 KB, live)
- Historical node statuses
- Node health metrics
- Status change events
-
system_events.json (1.2 MB, live)
- System events log
- Infrastructure changes
- Service updates
Автоматичний збір знань:
Monitor Agent автоматично збирає знання з:
- System Events (EVENT_LOG)
- Agent Activities
- Node Status
- Infrastructure Changes
🔗 Підключення пам'яті до Memory Service
1. Memory Service (PostgreSQL)
Endpoint: http://localhost:5432 (PostgreSQL)
Service: memory-service
Таблиці для Monitor Agent:
-- Agent Memory Events
CREATE TABLE IF NOT EXISTS agent_memory_events (
id UUID PRIMARY KEY,
agent_id VARCHAR(255) NOT NULL, -- 'monitor'
team_id VARCHAR(255) NOT NULL, -- 'system' або 'global'
channel_id VARCHAR(255), -- NULL для системних подій
user_id VARCHAR(255), -- NULL для системних подій
scope VARCHAR(50) DEFAULT 'long_term', -- long_term для Monitor Agent
kind VARCHAR(50) NOT NULL, -- 'node_event', 'agent_event', 'system_event'
body_text TEXT,
body_json JSONB,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Dialog Summaries (для збереження важливих подій)
CREATE TABLE IF NOT EXISTS dialog_summaries (
id SERIAL PRIMARY KEY,
team_id VARCHAR(255) NOT NULL, -- 'system'
channel_id VARCHAR(255), -- NULL
agent_id VARCHAR(255), -- 'monitor'
user_id VARCHAR(255), -- NULL
period_start TIMESTAMP NOT NULL,
period_end TIMESTAMP NOT NULL,
summary_text TEXT,
summary_json JSONB,
message_count INTEGER DEFAULT 0,
participant_count INTEGER DEFAULT 0,
topics TEXT[],
meta JSONB DEFAULT '{}',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
2. Vector Memory (Qdrant)
Endpoint: http://localhost:6333
Use Case: Fast RAG for system events and agent activities
Collections для Monitor Agent:
monitor_system_events- системні подіїmonitor_node_changes- зміни в нодахmonitor_agent_changes- зміни в агентахmonitor_infrastructure- зміни інфраструктури
3. Long-Range Memory (Milvus)
Endpoint: http://localhost:19530
Use Case: Heavy vector indexing for large memory
Collections для Monitor Agent:
monitor_historical_metrics- історичні метрикиmonitor_agent_activities- активності агентівmonitor_node_history- історія нод
4. Graph Memory (Neo4j)
Endpoint: http://localhost:7474
Bolt: bolt://localhost:7687
Use Case: Relations between agents, nodes, events, and changes
Graph Structure:
(Node)-[:MONITORED_BY]->(MonitorAgent)
(Node)-[:HAS_EVENT]->(SystemEvent)
(Agent)-[:CREATED_ON]->(Node)
(Agent)-[:HAS_ACTIVITY]->(Activity)
(SystemEvent)-[:AFFECTS]->(Node)
(SystemEvent)-[:AFFECTS]->(Agent)
5. RAG Router
Endpoint: http://localhost:9401
Use Case: Intelligent routing between Qdrant, Milvus, and Neo4j
Routing Rules для Monitor Agent:
- Graph queries → Neo4j
- Fast lookups (limit <= 50) → Qdrant
- Heavy searches (limit > 50) → Milvus
- Historical data → Milvus
- Relations → Neo4j
🔧 Інтеграція Monitor Agent з Memory Service
API Endpoints для збереження подій:
1. Збереження події ноди:
POST /api/memory/agent-events
Content-Type: application/json
{
"agent_id": "monitor",
"team_id": "system",
"scope": "long_term",
"kind": "node_event",
"body_text": "Node node-1-hetzner-gex44 status changed to online",
"body_json": {
"node_id": "node-1-hetzner-gex44",
"node_name": "НОДА1",
"event_type": "status_changed",
"old_status": "offline",
"new_status": "online",
"timestamp": "2025-01-27T10:30:00Z",
"metrics": {
"cpu_usage": 45,
"memory_usage": 62,
"disk_usage": 38
}
}
}
2. Збереження події агента:
POST /api/memory/agent-events
Content-Type: application/json
{
"agent_id": "monitor",
"team_id": "system",
"scope": "long_term",
"kind": "agent_event",
"body_text": "Agent agent-solarius created on node-2",
"body_json": {
"agent_id": "agent-solarius",
"agent_name": "Solarius",
"event_type": "created",
"node_id": "node-2",
"model": "deepseek-r1:70b",
"backend": "ollama",
"timestamp": "2025-01-27T10:30:00Z"
}
}
3. Збереження системної події:
POST /api/memory/agent-events
Content-Type: application/json
{
"agent_id": "monitor",
"team_id": "system",
"scope": "long_term",
"kind": "system_event",
"body_text": "Swapper Service updated on node-1",
"body_json": {
"service": "swapper",
"node_id": "node-1",
"event_type": "swapper_updated",
"active_model": "deepseek-r1:70b",
"timestamp": "2025-01-27T10:30:00Z"
}
}
📝 Автоматичне збереження подій
Інтеграція з WebSocket Events:
Monitor Agent автоматично зберігає всі події з /ws/events в Memory Service:
// При отриманні події через WebSocket
ws.onmessage = async (event) => {
const data = JSON.parse(event.data);
// Збереження в Memory Service
await fetch('/api/memory/agent-events', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
agent_id: 'monitor',
team_id: 'system',
scope: 'long_term',
kind: `${data.type}_event`, // node_event, agent_event, system_event
body_text: data.message,
body_json: {
...data.details,
timestamp: data.timestamp,
event_type: data.action
}
})
});
// Збереження в Vector DB (Qdrant)
await fetch('/api/rag/vectorize', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
collection: `monitor_${data.type}_events`,
text: data.message,
metadata: {
agent_id: 'monitor',
event_type: data.action,
timestamp: data.timestamp,
...data.details
}
})
});
// Збереження в Graph DB (Neo4j)
await fetch('/api/graph/create-event', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
event_type: data.action,
node_id: data.details?.node_id,
agent_id: data.details?.agent_id,
timestamp: data.timestamp,
metadata: data.details
})
});
};
🔍 Запити до пам'яті Monitor Agent
1. Отримати історію змін ноди:
GET /api/memory/agent-events?agent_id=monitor&kind=node_event&body_json->>node_id=node-1-hetzner-gex44
2. Отримати історію змін агента:
GET /api/memory/agent-events?agent_id=monitor&kind=agent_event&body_json->>agent_id=agent-solarius
3. Пошук через RAG:
POST /api/rag/search
Content-Type: application/json
{
"query": "What changes were made to node-1 in the last 24 hours?",
"collections": ["monitor_node_changes"],
"limit": 10
}
4. Графовий запит:
POST /api/graph/query
Content-Type: application/json
{
"query": "MATCH (n:Node {id: 'node-1-hetzner-gex44'})-[:HAS_EVENT]->(e:SystemEvent) RETURN e ORDER BY e.timestamp DESC LIMIT 10"
}
🚀 Наступні кроки
- ✅ Створити API endpoints для збереження подій
- ✅ Інтегрувати з WebSocket events
- ✅ Налаштувати автоматичне збереження в Qdrant, Milvus, Neo4j
- ✅ Додати RAG Router для інтелектуального пошуку
- ✅ Створити dashboard для перегляду пам'яті Monitor Agent
Status: ⏳ Потрібна інтеграція Priority: High Node: НОДА1 (node-1-hetzner-gex44)