- 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
353 lines
9.2 KiB
Markdown
353 lines
9.2 KiB
Markdown
# 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 автоматично збирає знання в файлову систему:
|
||
|
||
1. **system_metrics.json** (500 KB, live)
|
||
- Real-time system metrics
|
||
- Performance data
|
||
- Resource usage statistics
|
||
|
||
2. **infrastructure_docs.md** (120 KB, vectorized)
|
||
- Infrastructure documentation
|
||
- System architecture
|
||
- Service configurations
|
||
|
||
3. **agent_activities.log** (2.1 MB, live)
|
||
- Agent activity logs
|
||
- Task execution history
|
||
- Agent interactions
|
||
|
||
4. **node_status_history.json** (850 KB, live)
|
||
- Historical node statuses
|
||
- Node health metrics
|
||
- Status change events
|
||
|
||
5. **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:**
|
||
|
||
```sql
|
||
-- 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. Збереження події ноди:
|
||
|
||
```http
|
||
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. Збереження події агента:
|
||
|
||
```http
|
||
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. Збереження системної події:
|
||
|
||
```http
|
||
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:
|
||
|
||
```typescript
|
||
// При отриманні події через 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. Отримати історію змін ноди:
|
||
|
||
```http
|
||
GET /api/memory/agent-events?agent_id=monitor&kind=node_event&body_json->>node_id=node-1-hetzner-gex44
|
||
```
|
||
|
||
### 2. Отримати історію змін агента:
|
||
|
||
```http
|
||
GET /api/memory/agent-events?agent_id=monitor&kind=agent_event&body_json->>agent_id=agent-solarius
|
||
```
|
||
|
||
### 3. Пошук через RAG:
|
||
|
||
```http
|
||
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. Графовий запит:
|
||
|
||
```http
|
||
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"
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 🚀 Наступні кроки
|
||
|
||
1. ✅ Створити API endpoints для збереження подій
|
||
2. ✅ Інтегрувати з WebSocket events
|
||
3. ✅ Налаштувати автоматичне збереження в Qdrant, Milvus, Neo4j
|
||
4. ✅ Додати RAG Router для інтелектуального пошуку
|
||
5. ✅ Створити dashboard для перегляду пам'яті Monitor Agent
|
||
|
||
---
|
||
|
||
**Status:** ⏳ Потрібна інтеграція
|
||
**Priority:** High
|
||
**Node:** НОДА1 (node-1-hetzner-gex44)
|
||
|