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,413 @@
# ✅ Monitor Agent - Автоматичні MD файли та Jupyter Notebook
**Дата:** 2025-11-23
**Статус:** ✅ Реалізовано автоматичне створення MD файлів та Jupyter Notebook
---
## 🎯 Що реалізовано
### 1. Автоматичні повідомлення в діалоговому вікні
**Вже працює:**
- Monitor Agent автоматично створює повідомлення при змінах проєкту
- Повідомлення з'являються в діалоговому вікні без запиту користувача
- Використовується `projectChangeTracker` та `CustomEvent('project-change')`
**Як працює:**
1. `projectChangeTracker` відстежує зміни проєкту
2. Генерує повідомлення через Monitor Agent API
3. Відправляє `CustomEvent('project-change')`
4. UI компоненти автоматично додають повідомлення в чат
### 2. Автоматичне створення MD файлів та Jupyter Notebook
**Реалізовано:**
- Автоматичне створення MD файлу для кожного Monitor Agent
- Автоматичне створення Jupyter Notebook для кожного Monitor Agent
- Автоматичне оновлення файлів при кожній зміні
**Файли створюються:**
- `docs/monitor_agents/monitor_changes.md` - для головного Monitor Agent
- `docs/monitor_agents/monitor_changes.ipynb` - для головного Monitor Agent
- `docs/monitor_agents/monitor-node-{node_id}_changes.md` - для Monitor Agent ноди
- `docs/monitor_agents/monitor-node-{node_id}_changes.ipynb` - для Monitor Agent ноди
- `docs/monitor_agents/monitor-microdao-{microdao_id}_changes.md` - для Monitor Agent мікроДАО
- `docs/monitor_agents/monitor-microdao-{microdao_id}_changes.ipynb` - для Monitor Agent мікроДАО
### 3. Посилання на файли в UI
**Додано посилання:**
- В `MonitorChat` (глобальний)
- В `NodeMonitorChat` (кабінети НОД)
- В `MicroDaoMonitorChat` (кабінети мікроДАО)
- В `DaarionMonitorChat` (кабінет DAARION)
- В `DagiMonitorPage` (головна сторінка моніторингу)
**Іконки:**
- 📄 FileText - для MD файлу
- 📓 BookOpen - для Jupyter Notebook
---
## 📁 Структура файлів
```
docs/monitor_agents/
├── monitor_changes.md # Головний Monitor Agent (DAARION)
├── monitor_changes.ipynb # Головний Monitor Agent (DAARION)
├── monitor-node-node-1_changes.md # Monitor Agent для НОДА1
├── monitor-node-node-1_changes.ipynb # Monitor Agent для НОДА1
├── monitor-node-node-2_changes.md # Monitor Agent для НОДА2
├── monitor-node-node-2_changes.ipynb # Monitor Agent для НОДА2
├── monitor-microdao-daarion-dao_changes.md
├── monitor-microdao-daarion-dao_changes.ipynb
├── monitor-microdao-greenfood-dao_changes.md
├── monitor-microdao-greenfood-dao_changes.ipynb
└── ...
```
---
## 🔧 Реалізація
### 1. Monitor Logger Service
**Файл:** `services/monitor-agent-service/app/monitor_logger.py`
**Функції:**
- `get_monitor_agent_file_paths(agent_id)` - отримати шляхи до файлів
- `append_to_markdown(agent_id, change, message)` - додати зміну до MD файлу
- `append_to_notebook(agent_id, change, message)` - додати зміну до Jupyter Notebook
- `log_monitor_change(agent_id, change, message)` - зберегти зміну в обидва файли
- `get_monitor_agent_file_urls(agent_id, base_url)` - отримати URL до файлів
**Що робить:**
- Автоматично створює MD файл при першій зміні
- Автоматично створює Jupyter Notebook при першій зміні
- Додає нові зміни на початок файлів (нові зверху)
- Зберігає максимум 200 записів в Notebook
### 2. Інтеграція в Monitor Agent Service
**Файл:** `services/monitor-agent-service/app/main.py`
**Endpoint:** `POST /api/agent/monitor/project-change`
**Що робить:**
- Отримує зміну проєкту
- Генерує повідомлення через Mistral
- Зберігає в пам'ять
- **Автоматично зберігає в MD файл та Jupyter Notebook**
**Endpoint:** `GET /api/agent/monitor/file-urls?agent_id={agent_id}`
**Що робить:**
- Повертає URL до MD файлу та Jupyter Notebook для Monitor Agent
### 3. Інтеграція в Frontend
**Файли:**
- `src/components/monitor/MonitorChat.tsx`
- `src/components/monitor/NodeMonitorChat.tsx`
- `src/components/monitor/MicroDaoMonitorChat.tsx`
- `src/components/monitor/DaarionMonitorChat.tsx`
- `src/pages/DagiMonitorPage.tsx`
**Що додано:**
- Посилання на MD файл (іконка FileText)
- Посилання на Jupyter Notebook (іконка BookOpen)
- Посилання в header чату
### 4. Автоматичне збереження з projectChangeTracker
**Файл:** `src/services/projectChangeTracker.ts`
**Що додано:**
- Виклик `/api/agent/monitor/project-change` при збереженні в пам'ять
- Це автоматично зберігає зміну в MD файл та Jupyter Notebook
---
## 📊 Формат MD файлу
```markdown
# 📊 Monitor Agent: monitor
**Автоматично створено:** 2025-11-23T12:00:00
---
## 📝 Історія змін
### 2025-11-23T12:30:00
**Тип:** file | **Дія:** modified
**Шлях:** `src/pages/DagiMonitorPage.tsx`
**Опис:** Оновлено відображення метрик нод
**Повідомлення від Monitor Agent:**
🤖 **Monitor Agent повідомляє:**
Оновлено сторінку моніторингу: додано відображення GPU метрик для всіх нод...
---
### 2025-11-23T12:25:00
**Тип:** config | **Дія:** created
**Шлях:** `services/swapper-service/config/swapper_config_node2.yaml`
**Опис:** Створено конфігурацію Swapper Service для НОДА2
**Повідомлення від Monitor Agent:**
🤖 **Monitor Agent повідомляє:**
Створено нову конфігурацію Swapper Service для НОДА2 з default_model: gpt-oss:latest...
---
```
---
## 📓 Формат Jupyter Notebook
```json
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 📊 Monitor Agent: monitor\n",
"\n",
"**Автоматично створено:** 2025-11-23T12:00:00\n",
"\n",
"---\n",
"\n",
"## 📝 Історія змін\n",
"\n",
"Цей notebook автоматично оновлюється при кожній зміні в проєкті."
]
},
{
"cell_type": "markdown",
"metadata": {
"timestamp": "2025-11-23T12:30:00",
"change_type": "file",
"change_action": "modified",
"path": "src/pages/DagiMonitorPage.tsx"
},
"source": [
"### 2025-11-23T12:30:00\n",
"\n",
"**Тип:** file | **Дія:** modified\n",
"\n",
"**Шлях:** `src/pages/DagiMonitorPage.tsx`\n",
"\n",
"**Опис:** Оновлено відображення метрик нод\n",
"\n",
"**Повідомлення від Monitor Agent:**\n",
"\n",
"🤖 **Monitor Agent повідомляє:**\n",
"\n",
"Оновлено сторінку моніторингу...\n",
"\n",
"---\n"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"name": "python",
"version": "3.11"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
```
---
## 🔄 Автоматичне оновлення
### Потік даних:
```
1. Зміна в проєкті
└─> projectChangeTracker.addChange(change)
└─> generateMonitorMessage(change)
├── saveToMonitorMemory() → POST /api/agent/monitor/memory
└── POST /api/agent/monitor/project-change
└─> Monitor Agent Service
├── Генерує повідомлення через Mistral
├── Зберігає в пам'ять
└── log_monitor_change(agent_id, change, message)
├── append_to_markdown() → MD файл
└── append_to_notebook() → Jupyter Notebook
2. Відображення в чаті
└─> emitChangeEvent() → CustomEvent('project-change')
└─> UI компоненти автоматично додають повідомлення
```
---
## 📋 Список Monitor Agent та їх файли
### 1. Головний Monitor Agent (DAARION)
**Agent ID:** `monitor`
**MD файл:** `docs/monitor_agents/monitor_changes.md`
**Jupyter Notebook:** `docs/monitor_agents/monitor_changes.ipynb`
**UI:** `MonitorChat`, `DaarionMonitorChat`, `DagiMonitorPage`
**Статус:** ✅ Обов'язково має файли
### 2. Monitor Agent для НОДА1
**Agent ID:** `monitor-node-node-1`
**MD файл:** `docs/monitor_agents/monitor-node-node-1_changes.md`
**Jupyter Notebook:** `docs/monitor_agents/monitor-node-node-1_changes.ipynb`
**UI:** `NodeMonitorChat` (кабінет НОДА1)
**Статус:** ✅ Має файли
### 3. Monitor Agent для НОДА2
**Agent ID:** `monitor-node-node-2`
**MD файл:** `docs/monitor_agents/monitor-node-node-2_changes.md`
**Jupyter Notebook:** `docs/monitor_agents/monitor-node-node-2_changes.ipynb`
**UI:** `NodeMonitorChat` (кабінет НОДА2)
**Статус:** ✅ Має файли
### 4. Monitor Agent для DAARION MicroDAO
**Agent ID:** `monitor-microdao-daarion-dao`
**MD файл:** `docs/monitor_agents/monitor-microdao-daarion-dao_changes.md`
**Jupyter Notebook:** `docs/monitor_agents/monitor-microdao-daarion-dao_changes.ipynb`
**UI:** `MicroDaoMonitorChat` (кабінет DAARION MicroDAO)
**Статус:** ✅ Має файли
### 5. Monitor Agent для GREENFOOD MicroDAO
**Agent ID:** `monitor-microdao-greenfood-dao`
**MD файл:** `docs/monitor_agents/monitor-microdao-greenfood-dao_changes.md`
**Jupyter Notebook:** `docs/monitor_agents/monitor-microdao-greenfood-dao_changes.ipynb`
**UI:** `MicroDaoMonitorChat` (кабінет GREENFOOD MicroDAO)
**Статус:** ✅ Має файли
### 6. Monitor Agent для ENERGY UNION MicroDAO
**Agent ID:** `monitor-microdao-energy-union-dao`
**MD файл:** `docs/monitor_agents/monitor-microdao-energy-union-dao_changes.md`
**Jupyter Notebook:** `docs/monitor_agents/monitor-microdao-energy-union-dao_changes.ipynb`
**UI:** `MicroDaoMonitorChat` (кабінет ENERGY UNION MicroDAO)
**Статус:** ✅ Має файли
---
## ✅ Перевірка
### 1. Перевірка автоматичних повідомлень
**Що перевірити:**
- Відкрити `http://localhost:8899/dagi-monitor`
- Зробити зміну в проєкті (наприклад, змінити файл)
- Перевірити, чи з'явилося повідомлення в чаті автоматично
**Очікуваний результат:**
- ✅ Повідомлення з'являється автоматично без запиту
- ✅ Повідомлення містить "🤖 **Monitor Agent повідомляє:**"
- ✅ Повідомлення описує зміну
### 2. Перевірка створення файлів
```bash
# Перевірити, чи створені файли
ls -la docs/monitor_agents/
# Перевірити вміст MD файлу
head -50 docs/monitor_agents/monitor_changes.md
# Перевірити вміст Jupyter Notebook
head -50 docs/monitor_agents/monitor_changes.ipynb
```
**Очікуваний результат:**
- ✅ Файли створені
- ✅ Містять заголовок з agent_id
- ✅ Містять історію змін
### 3. Перевірка посилань в UI
**Що перевірити:**
- Відкрити `http://localhost:8899/dagi-monitor`
- Перевірити, чи є іконки 📄 та 📓 в header чату
- Натиснути на іконки - мають відкритися файли
**Очікуваний результат:**
- ✅ Іконки видимі в header
- ✅ Посилання працюють
- ✅ Файли відкриваються
### 4. Перевірка API endpoint
```bash
curl http://localhost:9500/api/agent/monitor/file-urls?agent_id=monitor
```
**Очікуваний результат:**
```json
{
"agent_id": "monitor",
"md_url": "/docs/monitor_agents/monitor_changes.md",
"ipynb_url": "/docs/monitor_agents/monitor_changes.ipynb",
"md_path": "docs/monitor_agents/monitor_changes.md",
"ipynb_path": "docs/monitor_agents/monitor_changes.ipynb"
}
```
---
## 📝 Висновки
### ✅ Що працює:
1. **Автоматичні повідомлення:**
- ✅ Monitor Agent автоматично створює повідомлення при змінах
- ✅ Повідомлення з'являються в діалоговому вікні без запиту
- ✅ Використовується `projectChangeTracker` та `CustomEvent`
2. **Автоматичне створення файлів:**
- ✅ MD файли створюються автоматично
- ✅ Jupyter Notebook створюються автоматично
- ✅ Файли оновлюються при кожній зміні
3. **Посилання в UI:**
- ✅ Посилання на MD файл в усіх чатах
- ✅ Посилання на Jupyter Notebook в усіх чатах
- ✅ Іконки FileText та BookOpen
4. **Файли для кожного Monitor Agent:**
- ✅ Головний Monitor Agent має файли (обов'язково)
- ✅ Monitor Agent для НОД мають файли
- ✅ Monitor Agent для мікроДАО мають файли
---
**Статус:** ✅ Реалізовано
**Результат:** Monitor Agent автоматично створює повідомлення та зберігає їх в MD файли та Jupyter Notebook