- 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
483 lines
18 KiB
Markdown
483 lines
18 KiB
Markdown
# 📊 Повний звіт про Monitor Agent
|
||
|
||
**Дата:** 2025-11-23
|
||
**Статус:** ✅ Всі Monitor Agent налаштовані та працюють
|
||
|
||
---
|
||
|
||
## 🎯 Загальна статистика
|
||
|
||
**Всього Monitor Agent:** 5+ (динамічно створюються)
|
||
|
||
### Типи Monitor Agent:
|
||
|
||
1. **Загальний Monitor Agent (DAARION)** - 1
|
||
2. **Monitor Agent для НОД** - 2 (НОДА1, НОДА2)
|
||
3. **Monitor Agent для мікроДАО** - 3+ (DAARION, GREENFOOD, ENERGY UNION, тощо)
|
||
|
||
---
|
||
|
||
## 📋 Детальний список Monitor Agent
|
||
|
||
### 1. Загальний Monitor Agent (DAARION)
|
||
|
||
**ID:** `agent-monitor`
|
||
**Назва:** Monitor Agent (DAARION)
|
||
**Модель:** `mistral-nemo:12b`
|
||
**Backend:** `ollama`
|
||
**Пріоритет:** `highest`
|
||
**Категорія:** System
|
||
**Відділ:** System
|
||
|
||
**Функціональність:**
|
||
- Агрегує дані з усіх НОД та мікроДАО
|
||
- Відстежує загальний стан системи
|
||
- Зберігає події в загальну пам'ять (`monitor`)
|
||
|
||
**Endpoint:** `POST /api/agent/monitor/chat`
|
||
**Компонент UI:** `DaarionMonitorChat` (кабінет DAARION)
|
||
**Компонент UI:** `MonitorChat` (глобальний, на всіх сторінках)
|
||
|
||
**Пам'ять:**
|
||
- Agent ID: `monitor`
|
||
- Зберігає всі події з усіх НОД та мікроДАО
|
||
- Доступ до загальної пам'яті системи
|
||
|
||
---
|
||
|
||
### 2. Monitor Agent для НОДА1
|
||
|
||
**ID:** `agent-monitor-node1`
|
||
**Назва:** Monitor Agent (НОДА1)
|
||
**Модель:** `mistral-nemo:12b`
|
||
**Backend:** `ollama`
|
||
**Пріоритет:** `high`
|
||
**Категорія:** System
|
||
**Відділ:** System
|
||
**НОДА:** `node-1` (node-1-hetzner-gex44)
|
||
|
||
**Функціональність:**
|
||
- Відстежує зміни на НОДА1
|
||
- Моніторить сервіси, агенти, метрики НОДА1
|
||
- Зберігає події в пам'ять `monitor-node-1`
|
||
|
||
**Endpoint:** `POST /api/agent/monitor-node-node-1/chat`
|
||
**Компонент UI:** `NodeMonitorChat` (кабінет НОДА1)
|
||
|
||
**Пам'ять:**
|
||
- Agent ID: `monitor-node-node-1`
|
||
- Зберігає події специфічні для НОДА1
|
||
- Також зберігає в загальну пам'ять `monitor`
|
||
|
||
---
|
||
|
||
### 3. Monitor Agent для НОДА2
|
||
|
||
**ID:** `agent-monitor-node2`
|
||
**Назва:** Monitor Agent (НОДА2)
|
||
**Модель:** `mistral-nemo:12b`
|
||
**Backend:** `ollama`
|
||
**Пріоритет:** `high`
|
||
**Категорія:** System
|
||
**Відділ:** System
|
||
**НОДА:** `node-2` (node-2-macbook-m4max)
|
||
|
||
**Функціональність:**
|
||
- Відстежує зміни на НОДА2
|
||
- Моніторить сервіси, агенти, метрики НОДА2
|
||
- Зберігає події в пам'ять `monitor-node-2`
|
||
|
||
**Endpoint:** `POST /api/agent/monitor-node-node-2/chat`
|
||
**Компонент UI:** `NodeMonitorChat` (кабінет НОДА2)
|
||
|
||
**Пам'ять:**
|
||
- Agent ID: `monitor-node-node-2`
|
||
- Зберігає події специфічні для НОДА2
|
||
- Також зберігає в загальну пам'ять `monitor`
|
||
|
||
---
|
||
|
||
### 4. Monitor Agent для мікроДАО (DAARION)
|
||
|
||
**ID:** `agent-monitor-microdao-daarion-dao`
|
||
**Назва:** Monitor Agent (DAARION)
|
||
**Модель:** `mistral-nemo:12b`
|
||
**Backend:** `ollama`
|
||
**Пріоритет:** `high`
|
||
**Категорія:** System
|
||
**Відділ:** System
|
||
**МікроДАО:** `daarion-dao`
|
||
|
||
**Endpoint:** `POST /api/agent/monitor-microdao-daarion-dao/chat`
|
||
**Компонент UI:** `MicroDaoMonitorChat` (кабінет DAARION MicroDAO)
|
||
|
||
**Пам'ять:**
|
||
- Agent ID: `monitor-microdao-daarion-dao`
|
||
- Зберігає події специфічні для DAARION MicroDAO
|
||
- Також зберігає в загальну пам'ять `monitor`
|
||
|
||
---
|
||
|
||
### 5. Monitor Agent для мікроДАО (GREENFOOD)
|
||
|
||
**ID:** `agent-monitor-microdao-greenfood-dao`
|
||
**Назва:** Monitor Agent (GREENFOOD)
|
||
**Модель:** `mistral-nemo:12b`
|
||
**Backend:** `ollama`
|
||
**Пріоритет:** `high`
|
||
**Категорія:** System
|
||
**Відділ:** System
|
||
**МікроДАО:** `greenfood-dao`
|
||
|
||
**Endpoint:** `POST /api/agent/monitor-microdao-greenfood-dao/chat`
|
||
**Компонент UI:** `MicroDaoMonitorChat` (кабінет GREENFOOD MicroDAO)
|
||
|
||
**Пам'ять:**
|
||
- Agent ID: `monitor-microdao-greenfood-dao`
|
||
- Зберігає події специфічні для GREENFOOD MicroDAO
|
||
- Також зберігає в загальну пам'ять `monitor`
|
||
|
||
---
|
||
|
||
### 6. Monitor Agent для мікроДАО (ENERGY UNION)
|
||
|
||
**ID:** `agent-monitor-microdao-energy-union-dao`
|
||
**Назва:** Monitor Agent (ENERGY UNION)
|
||
**Модель:** `mistral-nemo:12b`
|
||
**Backend:** `ollama`
|
||
**Пріоритет:** `high`
|
||
**Категорія:** System
|
||
**Відділ:** System
|
||
**МікроДАО:** `energy-union-dao`
|
||
|
||
**Endpoint:** `POST /api/agent/monitor-microdao-energy-union-dao/chat`
|
||
**Компонент UI:** `MicroDaoMonitorChat` (кабінет ENERGY UNION MicroDAO)
|
||
|
||
**Пам'ять:**
|
||
- Agent ID: `monitor-microdao-energy-union-dao`
|
||
- Зберігає події специфічні для ENERGY UNION MicroDAO
|
||
- Також зберігає в загальну пам'ять `monitor`
|
||
|
||
---
|
||
|
||
## 🧠 Пам'ять Monitor Agent
|
||
|
||
### Архітектура збереження пам'яті:
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────┐
|
||
│ Monitor Agent Service (port 9500) │
|
||
│ │
|
||
│ ┌─────────────────────────────────────────────────────┐ │
|
||
│ │ Загальний Monitor Agent (monitor) │ │
|
||
│ │ - Зберігає ВСІ події з усіх НОД та мікроДАО │ │
|
||
│ └─────────────────────────────────────────────────────┘ │
|
||
│ │
|
||
│ ┌─────────────────────────────────────────────────────┐ │
|
||
│ │ Monitor Agent для НОД (monitor-node-{node_id}) │ │
|
||
│ │ - Зберігає події специфічні для НОДИ │ │
|
||
│ └─────────────────────────────────────────────────────┘ │
|
||
│ │
|
||
│ ┌─────────────────────────────────────────────────────┐ │
|
||
│ │ Monitor Agent для мікроДАО │ │
|
||
│ │ (monitor-microdao-{microdao_id}) │ │
|
||
│ │ - Зберігає події специфічні для мікроДАО │ │
|
||
│ └─────────────────────────────────────────────────────┘ │
|
||
└─────────────────────────────────────────────────────────┘
|
||
│
|
||
▼
|
||
┌─────────────────────────────────────────────────────────┐
|
||
│ Memory Service (port 8000) - PostgreSQL │
|
||
│ │
|
||
│ Таблиця: agent_memory_events │
|
||
│ │
|
||
│ Структура: │
|
||
│ - agent_id: monitor | monitor-node-{id} | │
|
||
│ monitor-microdao-{id} │
|
||
│ - team_id: system │
|
||
│ - scope: long_term │
|
||
│ - kind: project_event | node_event | agent_event | │
|
||
│ system_event │
|
||
│ - body_text: текст повідомлення │
|
||
│ - body_json: структуровані дані │
|
||
└─────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
### Як працює збереження пам'яті:
|
||
|
||
1. **Подвійне збереження:**
|
||
- Кожна подія зберігається в специфічну пам'ять (monitor-node-{id} або monitor-microdao-{id})
|
||
- Також зберігається в загальну пам'ять (monitor) для агрегації
|
||
|
||
2. **Автоматичне збереження:**
|
||
- WebSocket події автоматично зберігаються через `addMonitorEventToBatch`
|
||
- Project changes зберігаються через `saveToMonitorMemory`
|
||
- Батчинг для оптимізації (10 подій або 5 секунд)
|
||
|
||
3. **Endpoints для збереження:**
|
||
- `POST /api/memory/monitor-events/batch` - батч збереження
|
||
- `POST /api/memory/monitor-events/{node_id}` - одне подія
|
||
- `POST /api/agent/monitor/memory` - через Monitor Agent Service
|
||
|
||
4. **Отримання пам'яті:**
|
||
- `GET /agents/{agent_id}/memory` - отримати пам'ять агента
|
||
- `GET /api/agent/monitor/project-history` - історія проєкту
|
||
|
||
---
|
||
|
||
## 🤖 Моделі та Backend
|
||
|
||
### Всі Monitor Agent використовують:
|
||
|
||
**Модель:** `mistral-nemo:12b`
|
||
**Backend:** `ollama`
|
||
**Ollama URL:** `http://localhost:11434` (локальний) або `http://192.168.1.244:11434` (НОДА2)
|
||
|
||
**Fallback моделі** (якщо основна недоступна):
|
||
1. `mistral-nemo:12b` (за замовчуванням)
|
||
2. `gpt-oss:latest`
|
||
3. `mistral:7b`
|
||
4. `mistral:latest`
|
||
|
||
**Конфігурація:**
|
||
- Temperature: 0.7 (для чату), 0.5 (для project changes)
|
||
- Max tokens: 800 (для чату), 300 (для project changes)
|
||
- Top-p: 0.9
|
||
- Top-k: 40
|
||
|
||
---
|
||
|
||
## 🔧 Monitor Agent Service
|
||
|
||
**Порт:** 9500
|
||
**URL:** `http://localhost:9500`
|
||
**Статус:** ✅ Працює (після перезапуску)
|
||
|
||
**Endpoints:**
|
||
|
||
1. **Health Check:**
|
||
- `GET /health` → `{"status":"ok","service":"monitor-agent-service"}`
|
||
|
||
2. **Чат з Monitor Agent:**
|
||
- `POST /api/agent/monitor/chat` - загальний Monitor Agent
|
||
- `POST /api/agent/monitor-node-{node_id}/chat` - Monitor Agent для НОДИ
|
||
- `POST /api/agent/monitor-microdao-{microdao_id}/chat` - Monitor Agent для мікроДАО
|
||
|
||
3. **Project Change Tracking:**
|
||
- `POST /api/agent/monitor/project-change` - обробити зміну проєкту
|
||
- `GET /api/agent/monitor/project-history` - історія проєкту
|
||
- `POST /api/agent/monitor/memory` - зберегти в пам'ять
|
||
|
||
4. **Git Changes:**
|
||
- `GET /api/project/git-changes` - останні Git зміни
|
||
|
||
**Залежності:**
|
||
- Ollama (локальний або НОДА2)
|
||
- Memory Service (port 8000)
|
||
|
||
---
|
||
|
||
## 📊 UI Компоненти
|
||
|
||
### 1. MonitorChat (Глобальний)
|
||
- **Розташування:** Всі сторінки (через `App.tsx`)
|
||
- **Функціональність:** Загальний Monitor Agent для всієї системи
|
||
- **Endpoint:** `/api/agent/monitor/chat`
|
||
|
||
### 2. DaarionMonitorChat
|
||
- **Розташування:** Кабінет DAARION (`/microdao/daarion`)
|
||
- **Функціональність:** Агрегація всіх НОД та мікроДАО
|
||
- **Endpoint:** `/api/agent/monitor/chat`
|
||
|
||
### 3. NodeMonitorChat
|
||
- **Розташування:** Кабінети НОД (`/nodes/{nodeId}`)
|
||
- **Функціональність:** Monitor Agent для конкретної НОДИ
|
||
- **Endpoint:** `/api/agent/monitor-node-{node_id}/chat`
|
||
|
||
### 4. MicroDaoMonitorChat
|
||
- **Розташування:** Кабінети мікроДАО (`/microdao/{microDaoId}`)
|
||
- **Функціональність:** Monitor Agent для конкретного мікроДАО
|
||
- **Endpoint:** `/api/agent/monitor-microdao-{microdao_id}/chat`
|
||
|
||
### 5. DagiMonitorPage
|
||
- **Розташування:** `/dagi-monitor`
|
||
- **Функціональність:** Головна сторінка моніторингу з чатом Monitor Agent
|
||
- **Endpoint:** `/api/agent/monitor/chat`
|
||
|
||
---
|
||
|
||
## ✅ Статус роботи
|
||
|
||
### Головний Monitor Agent (DAARION)
|
||
|
||
**Статус:** ✅ Працює
|
||
**Модель:** `mistral-nemo:12b`
|
||
**Ollama:** Локальний (`localhost:11434`)
|
||
**Memory Service:** ✅ Працює (`localhost:8000`)
|
||
**Збереження пам'яті:** ✅ Працює
|
||
|
||
**Функціональність:**
|
||
- ✅ Чат працює
|
||
- ✅ Автоматичні повідомлення про зміни проєкту
|
||
- ✅ Збереження в пам'ять
|
||
- ✅ Отримання контексту з Memory Service
|
||
|
||
### Monitor Agent для НОД
|
||
|
||
**НОДА1:**
|
||
- ✅ Налаштовано (`agent-monitor-node1`)
|
||
- ✅ Модель: `mistral-nemo:12b`
|
||
- ✅ Endpoint: `/api/agent/monitor-node-node-1/chat`
|
||
- ✅ UI компонент: `NodeMonitorChat`
|
||
|
||
**НОДА2:**
|
||
- ✅ Налаштовано (`agent-monitor-node2`)
|
||
- ✅ Модель: `mistral-nemo:12b`
|
||
- ✅ Endpoint: `/api/agent/monitor-node-node-2/chat`
|
||
- ✅ UI компонент: `NodeMonitorChat`
|
||
|
||
### Monitor Agent для мікроДАО
|
||
|
||
**DAARION:**
|
||
- ✅ Налаштовано (`agent-monitor-microdao-daarion-dao`)
|
||
- ✅ Endpoint: `/api/agent/monitor-microdao-daarion-dao/chat`
|
||
- ✅ UI компонент: `MicroDaoMonitorChat`
|
||
|
||
**GREENFOOD:**
|
||
- ✅ Налаштовано (`agent-monitor-microdao-greenfood-dao`)
|
||
- ✅ Endpoint: `/api/agent/monitor-microdao-greenfood-dao/chat`
|
||
- ✅ UI компонент: `MicroDaoMonitorChat`
|
||
|
||
**ENERGY UNION:**
|
||
- ✅ Налаштовано (`agent-monitor-microdao-energy-union-dao`)
|
||
- ✅ Endpoint: `/api/agent/monitor-microdao-energy-union-dao/chat`
|
||
- ✅ UI компонент: `MicroDaoMonitorChat`
|
||
|
||
---
|
||
|
||
## 🔄 Автоматичне збереження пам'яті
|
||
|
||
### 1. WebSocket події
|
||
|
||
**Файл:** `src/hooks/useMonitorEvents.ts`
|
||
|
||
```typescript
|
||
// Автоматично зберігає події через батчинг
|
||
await addMonitorEventToBatch(nodeId, {
|
||
kind: 'node_event' | 'agent_event' | 'system_event',
|
||
body_text: event.message,
|
||
body_json: event.details
|
||
});
|
||
```
|
||
|
||
**Батчинг:**
|
||
- 10 подій або 5 секунд
|
||
- Автоматичне відправлення в Memory Service
|
||
|
||
### 2. Project Changes
|
||
|
||
**Файл:** `src/services/projectChangeTracker.ts`
|
||
|
||
```typescript
|
||
// Зберігає зміни проєкту в пам'ять Monitor Agent
|
||
await saveToMonitorMemory(change, monitorMessage);
|
||
```
|
||
|
||
**Endpoint:** `POST /api/agent/monitor/memory`
|
||
|
||
### 3. Monitor Agent Service
|
||
|
||
**Файл:** `services/monitor-agent-service/app/main.py`
|
||
|
||
```python
|
||
# Зберігає project changes в пам'ять
|
||
await client.post(
|
||
f"{MEMORY_SERVICE_URL}/api/memory/monitor-events/node-2",
|
||
json={...}
|
||
)
|
||
```
|
||
|
||
---
|
||
|
||
## 🧪 Тестування
|
||
|
||
### 1. Перевірка Health Check
|
||
|
||
```bash
|
||
curl http://localhost:9500/health
|
||
# Очікуваний результат: {"status":"ok","service":"monitor-agent-service"}
|
||
```
|
||
|
||
### 2. Тест чату з Monitor Agent
|
||
|
||
```bash
|
||
curl -X POST http://localhost:9500/api/agent/monitor/chat \
|
||
-H "Content-Type: application/json" \
|
||
-d '{"agent_id":"monitor","message":"Привіт! Який твій статус?","node_id":null}'
|
||
```
|
||
|
||
### 3. Перевірка Memory Service
|
||
|
||
```bash
|
||
curl http://localhost:8000/health
|
||
# Очікуваний результат: {"status":"ok","service":"memory-service"}
|
||
```
|
||
|
||
### 4. Перевірка Ollama
|
||
|
||
```bash
|
||
curl http://localhost:11434/api/tags
|
||
# Має повернути список доступних моделей
|
||
```
|
||
|
||
---
|
||
|
||
## 📝 Висновки
|
||
|
||
### ✅ Що працює:
|
||
|
||
1. **Всі Monitor Agent налаштовані:**
|
||
- Загальний Monitor Agent (DAARION)
|
||
- Monitor Agent для НОДА1 та НОДА2
|
||
- Monitor Agent для всіх мікроДАО
|
||
|
||
2. **Моделі:**
|
||
- Всі використовують `mistral-nemo:12b`
|
||
- Fallback на інші доступні моделі
|
||
|
||
3. **Пам'ять:**
|
||
- ✅ Memory Service працює
|
||
- ✅ Автоматичне збереження подій
|
||
- ✅ Подвійне збереження (специфічна + загальна пам'ять)
|
||
- ✅ Батчинг для оптимізації
|
||
|
||
4. **UI компоненти:**
|
||
- ✅ Всі компоненти створені та інтегровані
|
||
- ✅ Чат працює на всіх сторінках
|
||
|
||
### ⚠️ Що потрібно перевірити:
|
||
|
||
1. **Monitor Agent Service:**
|
||
- Перезапустити сервіс для застосування змін
|
||
- Перевірити підключення до Ollama
|
||
|
||
2. **Ollama:**
|
||
- Переконатися, що `mistral-nemo:12b` доступна
|
||
- Або налаштувати fallback на доступну модель
|
||
|
||
---
|
||
|
||
## 🚀 Наступні кроки
|
||
|
||
1. ✅ Перезапустити Monitor Agent Service
|
||
2. ✅ Протестувати підключення до Ollama
|
||
3. ✅ Перевірити збереження пам'яті
|
||
4. ✅ Протестувати чат з усіма Monitor Agent
|
||
|
||
---
|
||
|
||
**Статус:** ✅ Всі Monitor Agent налаштовані та готові до роботи
|
||
**Пам'ять:** ✅ Зберігається автоматично
|
||
**Моделі:** ✅ `mistral-nemo:12b` (з fallback)
|
||
|