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,164 @@
# ✅ Monitor Agent - Реальні дані (Завершено)
**Дата:** 2025-11-23
**Статус:** ✅ Monitor Agent тепер використовує тільки реальні дані
---
## 🎯 Що зроблено
### 1. Додано отримання реальних метрик нод
**Функція:** `get_real_node_metrics()`
**Що робить:**
- Отримує список нод з API (`/api/nodes`)
- Для кожної ноди отримує метрики з `/api/nodes/{node_id}/metrics`
- Перевіряє, чи це реальні дані (не HTML, не mock)
- Повертає тільки реальні метрики (CPU, RAM, Disk, Network, Status)
- Якщо реальних даних немає - повертає порожній рядок
### 2. Додано отримання останніх змін проєкту
**Функція:** `get_recent_project_changes()`
**Що робить:**
- Отримує останні зміни з Memory Service
- Фільтрує по `kind: project_event`
- Форматує зміни з деталями (тип, дія, шлях, час)
- Повертає структуровані дані про зміни
### 3. Оновлено контекст для Monitor Agent
**Функція:** `get_monitor_memory_context()`
**Що додано:**
- 📊 Реальні метрики нод (якщо доступні)
- 📝 Останні зміни проєкту (якщо доступні)
- 📋 Загальні події системи
- 📍 Специфічні події (для ноди або мікроДАО)
### 4. Оновлено System Prompt
**Що додано:**
- Чіткі інструкції про використання тільки реальних даних
- Заборона вигадувати метрики або зміни
- Інструкції, що робити, якщо реальних даних немає
### 5. Додано попередження в prompt
**Що додано:**
- Автоматичне виявлення відсутності реальних даних
- Попередження в prompt, якщо реальних метрик немає
- Попередження в prompt, якщо останніх змін немає
---
## 📊 Результат
### До виправлення:
```
Користувач: "Які реальні метрики нод зараз?"
Monitor Agent: "Зараз у системі DAARION є такі метрики нод:
- Нода 1: CPU 25%, RAM 4GB/8GB, Disk 70%..."
(ВИГАДАНІ дані)
```
### Після виправлення:
```
Користувач: "Які реальні метрики нод зараз?"
Monitor Agent: "⚠️ УВАГА: В контексті немає реальних метрик нод.
Реальні метрики недоступні зараз."
(ЧЕСНА відповідь, не вигадує дані)
```
### Якщо реальні дані доступні:
```
Користувач: "Які реальні метрики нод зараз?"
Monitor Agent: "📊 Реальні метрики нод:
НОДА node-1-hetzner-gex44 (РЕАЛЬНІ дані з API):
- CPU: 25%
- RAM: 45%
- Disk: 70%
- Network: ↓1.2 MB/s ↑0.8 MB/s
- Статус: online
Перевірено нод: 1/2"
(РЕАЛЬНІ дані з API)
```
---
## 🔧 Environment Variables
```bash
# API для отримання реальних метрик та даних
FRONTEND_API_URL=http://localhost:8899
NODE_REGISTRY_URL=http://localhost:9205
MEMORY_SERVICE_URL=http://localhost:8000
OLLAMA_BASE_URL=http://localhost:11434
MISTRAL_MODEL=mistral-nemo:12b
```
---
## ✅ Перевірка
### 1. Перевірка отримання реальних метрик
```bash
curl -X POST http://localhost:9500/api/agent/monitor/chat \
-H "Content-Type: application/json" \
-d '{"agent_id":"monitor","message":"Які реальні метрики нод зараз? Покажи тільки реальні дані з API.","node_id":null}'
```
**Очікуваний результат:**
- Реальні метрики з API (якщо доступні)
- Або: "⚠️ УВАГА: В контексті немає реальних метрик нод. Реальні метрики недоступні зараз."
### 2. Перевірка, що агент не вигадує дані
```bash
curl -X POST http://localhost:9500/api/agent/monitor/chat \
-H "Content-Type: application/json" \
-d '{"agent_id":"monitor","message":"Які метрики ноди node-999?","node_id":null}'
```
**Очікуваний результат:**
- "Реальні метрики для ноди node-999 недоступні зараз"
- НЕ вигадані метрики
---
## 📝 Висновки
### ✅ Що працює:
1. **Monitor Agent отримує реальні метрики нод** (якщо API доступний)
2. **Monitor Agent отримує останні зміни проєкту** (з Memory Service)
3. **Monitor Agent НЕ вигадує дані** (чесно каже, якщо даних немає)
4. **System Prompt забороняє вигадувати дані**
5. **Автоматичні попередження в prompt** (якщо реальних даних немає)
### ⚠️ Важливо:
- Monitor Agent тепер використовує ТІЛЬКИ реальні дані
- Якщо реальних даних немає - агент чесно про це каже
- Агент НЕ вигадує метрики або зміни
- Агент вказує джерело даних (яка нода, який час)
---
**Статус:** ✅ Завершено
**Результат:** Monitor Agent тепер використовує тільки реальні дані та чесно каже, якщо даних немає