feat: TASK 031-033 - Node Guardian/Steward + Agent & MicroDAO Chat Widgets
TASK 031: Node Agents Discovery - Documented existing Monitor agents (NODE1, NODE2) - Created NODE_AGENTS_INVENTORY.md TASK 032: Node Guardian/Steward Formalize - Added migration 030_node_guardian_steward.sql - Added is_node_guardian, is_node_steward to agents - Added guardian_agent_id, steward_agent_id to node_cache - Updated repo_city.py for guardian/steward in node queries - Added NodeAgentsPanel component for Node Dashboard TASK 033: Agent & MicroDAO Chat Widgets - Added CityRoomSummary model - Added primary_city_room to AgentDashboard API - Added primary_city_room to MicrodaoDetail API - Added get_microdao_primary_room() function - Updated Agent Console with Matrix chat section - Updated MicroDAO page with public chat section - Reused existing CityChatWidget component
This commit is contained in:
142
docs/internal/agents/NODE_AGENTS_INVENTORY.md
Normal file
142
docs/internal/agents/NODE_AGENTS_INVENTORY.md
Normal file
@@ -0,0 +1,142 @@
|
||||
# Node Agents Inventory
|
||||
|
||||
**Дата:** 28 листопада 2025
|
||||
**Статус:** ✅ Інвентаризація завершена
|
||||
**Результат TASK 031_NODE_AGENTS_DISCOVERY**
|
||||
|
||||
---
|
||||
|
||||
## 1. Node Monitoring Agents
|
||||
|
||||
### 1.1. Monitor Agent (NODE1)
|
||||
|
||||
| Поле | Значення |
|
||||
|------|----------|
|
||||
| **ID** | `agent-monitor-node1` |
|
||||
| **Display Name** | Monitor Agent (НОДА1) |
|
||||
| **Slug** | `monitor-node1` |
|
||||
| **Role** | System Monitoring & Event Logging (Node-1) |
|
||||
| **Model** | mistral-nemo:12b |
|
||||
| **Backend** | ollama |
|
||||
| **Node** | node-1-hetzner-gex44 |
|
||||
| **Kind** | infra_monitor |
|
||||
| **Department** | System |
|
||||
| **Файл опису** | `src/api/node1Agents.ts` (рядки 76-92) |
|
||||
| **Статус** | ✅ Існує в коді |
|
||||
|
||||
**Функції:**
|
||||
- Моніторинг CPU, RAM, GPU, Disk
|
||||
- Відстеження стану сервісів (Router, Swapper, Ollama, Matrix, Postgres, NATS)
|
||||
- Генерація звітів про інциденти
|
||||
- Виявлення аномалій
|
||||
|
||||
### 1.2. Monitor Agent (NODE2)
|
||||
|
||||
| Поле | Значення |
|
||||
|------|----------|
|
||||
| **ID** | `agent-monitor-node2` / `monitor-node2` |
|
||||
| **Display Name** | Monitor Agent (НОДА2) |
|
||||
| **Slug** | `monitor-node2` |
|
||||
| **Role** | System Monitoring & Event Logging (Node-2) |
|
||||
| **Model** | mistral-nemo:12b |
|
||||
| **Backend** | ollama |
|
||||
| **Node** | node-2-macbook-m4max |
|
||||
| **Kind** | infra_monitor |
|
||||
| **Department** | System |
|
||||
| **Файли опису** | `src/api/node2Agents.ts` (рядки 37-52), `config/agents_city_mapping.yaml`, `router-config.yml` |
|
||||
| **Статус** | ✅ Існує в БД та коді |
|
||||
|
||||
**Функції:**
|
||||
- Аналогічні до NODE1 Monitor
|
||||
- Додатково: архітектор-інспектор DAGI
|
||||
|
||||
---
|
||||
|
||||
## 2. Node Steward / NodeOps Agents
|
||||
|
||||
### 2.1. Node Steward (NODE1)
|
||||
|
||||
| Поле | Значення |
|
||||
|------|----------|
|
||||
| **ID** | `node-steward-node1` (пропонується) |
|
||||
| **Display Name** | Node Steward (НОДА1) |
|
||||
| **Slug** | `node-steward-node1` |
|
||||
| **Role** | Curator of Node Stack |
|
||||
| **Model** | mistral-nemo:12b (рекомендовано) |
|
||||
| **Node** | node-1-hetzner-gex44 |
|
||||
| **Kind** | infra_ops |
|
||||
| **Статус** | ❌ НЕ ІСНУЄ — потрібно створити |
|
||||
|
||||
**Заплановані функції:**
|
||||
- Інвентаризація стеку ноди
|
||||
- Порівняння з DAOS стандартами
|
||||
- Планування оновлень та встановлень
|
||||
- Документування конфігурації
|
||||
|
||||
### 2.2. Node Steward (NODE2)
|
||||
|
||||
| Поле | Значення |
|
||||
|------|----------|
|
||||
| **ID** | `node-steward-node2` (пропонується) |
|
||||
| **Display Name** | Node Steward (НОДА2) |
|
||||
| **Slug** | `node-steward-node2` |
|
||||
| **Role** | Curator of Node Stack |
|
||||
| **Model** | mistral-nemo:12b (рекомендовано) |
|
||||
| **Node** | node-2-macbook-m4max |
|
||||
| **Kind** | infra_ops |
|
||||
| **Статус** | ❌ НЕ ІСНУЄ — потрібно створити |
|
||||
|
||||
---
|
||||
|
||||
## 3. Кандидати на офіційні ролі
|
||||
|
||||
### Node Guardian (is_node_guardian = true)
|
||||
|
||||
| Нода | Агент | ID |
|
||||
|------|-------|-----|
|
||||
| NODE1 | Monitor Agent (НОДА1) | `monitor-node1` |
|
||||
| NODE2 | Monitor Agent (НОДА2) | `monitor-node2` |
|
||||
|
||||
### Node Steward (is_node_steward = true)
|
||||
|
||||
| Нода | Агент | ID |
|
||||
|------|-------|-----|
|
||||
| NODE1 | Node Steward (НОДА1) | `node-steward-node1` (створити) |
|
||||
| NODE2 | Node Steward (НОДА2) | `node-steward-node2` (створити) |
|
||||
|
||||
---
|
||||
|
||||
## 4. Джерела даних
|
||||
|
||||
### Файли з описом агентів:
|
||||
|
||||
1. `src/api/node1Agents.ts` — агенти NODE1
|
||||
2. `src/api/node2Agents.ts` — агенти NODE2
|
||||
3. `config/agents_city_mapping.yaml` — маппінг агентів на кімнати
|
||||
4. `router-config.yml` — конфігурація DAGI Router
|
||||
5. `docs/NODE2_AGENTS_FULL_INVENTORY.md` — повна інвентаризація NODE2
|
||||
6. `docs/users/agents/SYSTEM_AGENTS_DAIS.md` — DAIS паспорти
|
||||
|
||||
### Сервіси моніторингу:
|
||||
|
||||
1. `services/monitor-agent-service/` — сервіс Monitor Agent
|
||||
2. `src/components/monitor/NodeMonitorChat.tsx` — UI компонент чату з Monitor
|
||||
|
||||
---
|
||||
|
||||
## 5. Рекомендації для TASK 032
|
||||
|
||||
1. **Створити міграцію** з полями:
|
||||
- `agents.is_node_guardian` (boolean)
|
||||
- `agents.is_node_steward` (boolean)
|
||||
- `node_cache.guardian_agent_id` (text)
|
||||
- `node_cache.steward_agent_id` (text)
|
||||
|
||||
2. **Створити агентів Node Steward** для NODE1 та NODE2
|
||||
|
||||
3. **Оновити існуючих Monitor Agent** — встановити `is_node_guardian = true`
|
||||
|
||||
4. **Прив'язати агентів до нод** через `guardian_agent_id` / `steward_agent_id`
|
||||
|
||||
5. **Додати в Node Dashboard UI** панель з агентами ноди
|
||||
|
||||
97
docs/tasks/033_AGENT_AND_MICRODAO_CHAT_WIDGETS.md
Normal file
97
docs/tasks/033_AGENT_AND_MICRODAO_CHAT_WIDGETS.md
Normal file
@@ -0,0 +1,97 @@
|
||||
# TASK 033: Agent & MicroDAO Chat Widgets
|
||||
|
||||
**Дата:** 28 листопада 2025
|
||||
**Статус:** ✅ Завершено
|
||||
|
||||
## Мета
|
||||
|
||||
1. У кожному Agent Dashboard (`/agents/[id]`) має бути **діалогове вікно (Matrix-чат) з цим агентом**.
|
||||
2. У кожному MicroDAO (`/microdao/[slug]`) має бути **публічний чат кімнати цього MicroDAO**, де оркестратор спілкується з користувачами.
|
||||
|
||||
## Виконані зміни
|
||||
|
||||
### 1. Backend: Agent Dashboard → primary_city_room
|
||||
|
||||
**Файл:** `services/city-service/routes_city.py`
|
||||
|
||||
- Оновлено endpoint `GET /city/agents/{id}/dashboard`
|
||||
- Додано поле `primary_city_room` до відповіді
|
||||
- Пріоритет визначення кімнати:
|
||||
1. Перша кімната агента з `city_rooms`
|
||||
2. Primary room MicroDAO агента (якщо є `primary_microdao_id`)
|
||||
3. `null` якщо немає
|
||||
|
||||
### 2. Backend: MicroDAO Detail → primary_city_room
|
||||
|
||||
**Файл:** `services/city-service/models_city.py`
|
||||
|
||||
- Додано модель `CityRoomSummary`:
|
||||
```python
|
||||
class CityRoomSummary(BaseModel):
|
||||
id: str
|
||||
slug: str
|
||||
name: str
|
||||
matrix_room_id: Optional[str] = None
|
||||
```
|
||||
- Оновлено `MicrodaoDetail` — додано поле `primary_city_room`
|
||||
|
||||
**Файл:** `services/city-service/repo_city.py`
|
||||
|
||||
- Додано функцію `get_microdao_primary_room(microdao_id)`:
|
||||
- Шукає primary room MicroDAO
|
||||
- Пріоритет: `room_type='primary'` → `room_type='public'` → будь-яка активна
|
||||
|
||||
**Файл:** `services/city-service/routes_city.py`
|
||||
|
||||
- Оновлено endpoint `GET /city/microdao/{slug}`
|
||||
- Додано виклик `get_microdao_primary_room()` та заповнення `primary_city_room`
|
||||
|
||||
### 3. Frontend: Типи
|
||||
|
||||
**Файл:** `apps/web/src/lib/agent-dashboard.ts`
|
||||
|
||||
- Додано тип `CityRoomSummary`
|
||||
- Оновлено `AgentDashboard` — додано поле `primary_city_room`
|
||||
|
||||
**Файл:** `apps/web/src/lib/types/microdao.ts`
|
||||
|
||||
- Додано тип `CityRoomSummary`
|
||||
- Оновлено `MicrodaoDetail` — додано поле `primary_city_room`
|
||||
|
||||
### 4. Frontend: Agent Console (`/agents/[agentId]`)
|
||||
|
||||
**Файл:** `apps/web/src/app/agents/[agentId]/page.tsx`
|
||||
|
||||
- Оновлено Chat Tab:
|
||||
- Прямий чат з агентом через DAGI Router (існуючий)
|
||||
- Нова секція "Публічна кімната агента" з `CityChatWidget`
|
||||
- Якщо `primary_city_room` є — показує Matrix-чат
|
||||
- Якщо немає — показує повідомлення про необхідність налаштування
|
||||
|
||||
### 5. Frontend: MicroDAO Page (`/microdao/[slug]`)
|
||||
|
||||
**Файл:** `apps/web/src/app/microdao/[slug]/page.tsx`
|
||||
|
||||
- Додано секцію "Публічний чат MicroDAO"
|
||||
- Використовує `CityChatWidget` з `primary_city_room.slug`
|
||||
- Показує інформацію про оркестратора
|
||||
- Якщо кімната не налаштована — показує placeholder
|
||||
|
||||
## Перевикористання
|
||||
|
||||
Обидві сторінки використовують існуючий компонент `CityChatWidget` з `/components/city/CityChatWidget.tsx`, який вже працює на сторінці громадянина (`/citizens/[slug]`).
|
||||
|
||||
## Acceptance Criteria
|
||||
|
||||
- [x] `/agents/[id]` — секція "Публічна кімната агента" з Matrix-чатом
|
||||
- [x] `/microdao/[slug]` — секція "Публічний чат MicroDAO" з Matrix-чатом
|
||||
- [x] Перевикористано `CityChatWidget`
|
||||
- [x] Білд проходить успішно
|
||||
- [x] Типи оновлено на фронтенді та бекенді
|
||||
|
||||
## Пов'язані завдання
|
||||
|
||||
- **TASK 031:** Node Agents Discovery
|
||||
- **TASK 032:** Node Guardian/Steward Formalize
|
||||
- **Citizen Interact Layer v1:** Базовий функціонал чату для громадян
|
||||
|
||||
Reference in New Issue
Block a user