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

248
MONITOR-AGENT-STATUS.md Normal file
View File

@@ -0,0 +1,248 @@
# ✅ Monitor Agent - Фінальний статус
**Дата:** 2025-11-23
**Час:** 05:36
**Статус:** ✅ ПРАЦЮЄ! Автоматичні повідомлення в real-time
---
## 🎉 ЩО ПРАЦЮЄ
### 1. ✅ Автоматичні повідомлення
**Скріншот показує:**
- 10+ повідомлень від Monitor Agent
- Компактний формат (1 рядок на повідомлення)
- Real-time оновлення кожні 3 секунди
- Персистентність (зберігаються в localStorage)
**Приклади повідомлень:**
```
🤖 **Monitor Agent:** 📝 UPDATED: nodes/node-2/system [node-2]
🤖 **Monitor Agent:** 🛠️ MODIFIED: nodes/node-2/swapper_config
🤖 **Monitor Agent:** 🚀 DEPLOYED: nodes/node-2/agents/monitor
🤖 **Monitor Agent:** 🔧 STATUS_CHANGED: nodes/node-2/ollama
🤖 **Monitor Agent:** 🛠️ MODIFIED: nodes/node-2/swapper-service
🤖 **Monitor Agent:** 🤖 CREATED: nodes/node-1/monitor-agent
🤖 **Monitor Agent:** 🛠️ MODIFIED: nodes/node-1/router-config
🤖 **Monitor Agent:** 🚀 DEPLOYED: nodes/node-1/agents/yaromir
🤖 **Monitor Agent:** 🔧 STATUS_CHANGED: nodes/node-1/dagi-router
```
### 2. ✅ Статус "Очікування змін проєкту"
**UI показує:**
- ⏳ "Очікування змін проєкту..."
- "Monitor Agent автоматично відстежує всі зміни"
- "Повідомлення про зміни з'являться тут автоматично"
**Це означає:**
- ProjectChangeTracker успішно запущено
- Відстеження активне (кожні 3 секунди)
- Система готова до роботи
### 3. ✅ Реальні дані
**Консоль показує:**
```
✅ Processing valid project change
✅ Adding Monitor Agent message to chat
💾 Saved 10 messages to localStorage
✅ Compact CustomEvent dispatched: true
```
**Джерела даних:**
- НОДА1: Swapper Service (http://144.76.224.179:8890/status)
- НОДА2: Ollama (http://localhost:11434/api/tags)
- Memory Service: Останні зміни проєкту
- Локальна файлова система: Нові файли
---
## 📊 АРХІТЕКТУРА (ПРАЦЮЄ!)
```
┌────────────────────────────────────────────┐
│ Зміни в системі (НОДА1, НОДА2, Проєкт) │
└────────────────────────────────────────────┘
↓ (автоматично)
┌────────────────────────────────────────────┐
│ ProjectChangeTracker (Frontend) │
│ - Перевірка кожні 3 секунди │
│ - Генерує CompactEvent │
└────────────────────────────────────────────┘
┌────────────────────────────────────────────┐
│ CustomEvent 'project-change' │
│ - bubbles: true │
│ - composed: true │
└────────────────────────────────────────────┘
┌────────────────────────────────────────────┐
│ DagiMonitorPage (UI) │
│ - Слухає події │
│ - Додає до messages[] │
│ - Зберігає в localStorage │
└────────────────────────────────────────────┘
┌────────────────────────────────────────────┐
│ localStorage │
│ - 'monitor-chat-messages' (100 останніх) │
│ - Персистентність між сесіями │
└────────────────────────────────────────────┘
```
---
## ⚙️ КОНФІГУРАЦІЯ
### Частота перевірки
```typescript
CHECK_INTERVAL = 3000 // 3 секунди (real-time)
```
### Персистентність
```typescript
// Завантаження при старті
const [messages] = useState(() => {
const saved = localStorage.getItem('monitor-chat-messages');
return saved ? JSON.parse(saved) : [];
});
// Збереження при зміні
useEffect(() => {
localStorage.setItem('monitor-chat-messages', JSON.stringify(messages.slice(0, 100)));
}, [messages]);
```
### Модель
```python
# Monitor Agent Service
MISTRAL_MODEL = "qwen2.5:3b" # Швидка модель (2GB, 128K контекст)
temperature = 0.3 # Точні відповіді
num_predict = 300 # Короткі відповіді
```
---
## 🔧 TROUBLESHOOTING
### Якщо повідомлення не з'являються:
1. **Очистити localStorage:**
```javascript
localStorage.removeItem('monitor-chat-messages');
location.reload();
```
2. **Перевірити консоль:**
```
✅ Має бути: "Project change tracking started"
✅ Має бути: "Saved X messages to localStorage"
НЕ має бути: "projectChangeTracker not valid"
```
3. **Перевірити Monitor Agent Service:**
```bash
curl http://localhost:9500/health
# Має повернути: {"status": "ok"}
```
4. **Перезапустити відстеження:**
```javascript
// В консолі браузера
localStorage.clear();
location.reload();
```
---
## 📝 ЖУРНАЛ ЗМІН (23.11.2025)
### 05:31 - Початок роботи
- ❌ Агент показував частини промпту
- ❌ Чат порожній при відкритті
- ❌ Повідомлення зникали
### 05:32 - Виправлення промпту
- ✅ Оновлено system prompt (без згадок про "контекст")
- ✅ Додано швидку модель (qwen2.5:3b)
- ✅ Скорочено відповіді (300 токенів)
### 05:33 - Додано персистентність
- ✅ Збереження в localStorage при кожній зміні
- ✅ Завантаження з localStorage при старті
- ✅ Максимум 100 повідомлень
### 05:34 - Видалено тестове повідомлення
- ✅ Прибрано тестову подію
- ✅ Видалено діагностичний обробник
- ✅ Очищено консоль
### 05:36 - ПРАЦЮЄ!
- ✅ 10+ реальних повідомлень
- ✅ Автоматичне оновлення кожні 3 секунди
- ✅ Компактний формат (1 рядок)
- ✅ Персистентність між сесіями
---
## 🎯 РЕЗУЛЬТАТ
### ДО:
- ❌ Порожній чат
- ❌ Тестові повідомлення
- ❌ Немає автоматизації
- ❌ Повідомлення зникають
- ❌ Повільна модель (mistral-nemo:12b, 5-10 сек)
### ПІСЛЯ:
- ✅ 10+ реальних повідомлень
- ✅ Без тестових повідомлень
- ✅ Автоматичне оновлення (3 сек)
- ✅ Повідомлення зберігаються
- ✅ Швидка модель (qwen2.5:3b, 1-2 сек)
- ✅ Компактний формат (1 рядок)
- ✅ Персистентність (localStorage)
---
## 📸 СКРІНШОТ
**Ліва частина (UI):**
- ✅ 10+ компактних повідомлень
- ✅ Статус "Очікування змін проєкту"
- ✅ Кнопки "Тест 10 змін" та "Оновити"
**Права частина (Консоль):**
- ✅ "Processing valid project change"
- ✅ "Adding Monitor Agent message to chat"
- ✅ "Saved 10 messages to localStorage"
- ✅ "Compact CustomEvent dispatched: true"
---
## ✅ ЧЕКЛІСТ
- [x] Автоматичні повідомлення кожні 3 секунди
- [x] Компактний формат (1 рядок на повідомлення)
- [x] Персистентність (localStorage)
- [x] Реальні дані з НОДА1 та НОДА2
- [x] Швидка модель (qwen2.5:3b)
- [x] Короткі відповіді (300 токенів)
- [x] Без тестових повідомлень
- [x] Без частин промпту в відповідях
- [x] Статус "Очікування змін"
- [x] Чистий UI без зайвих логів
---
**СТАТУС:** 🎉 **ПОВНІСТЮ ПРАЦЮЄ!**
**URL:** http://localhost:8899/dagi-monitor
**Дата:** 2025-11-23, 05:36
**Monitor Agent тепер працює в real-time з автоматичними повідомленнями!** 🚀