- 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
265 lines
9.8 KiB
Markdown
265 lines
9.8 KiB
Markdown
# ✅ Об'єднання кабінетів агента та мікроДАО - Завершено
|
||
|
||
**Дата:** 2025-11-23
|
||
**Статус:** ✅ Готово до використання
|
||
|
||
---
|
||
|
||
## 🎉 Що реалізовано
|
||
|
||
### ✅ 1. Маппінг між агентами та мікроДАО
|
||
|
||
**Створено файл:** `src/utils/agentMicroDaoMapping.ts`
|
||
|
||
**Маппінг:**
|
||
- **GREENFOOD** агент → `greenfood-dao` мікроДАО
|
||
- **DAARWIZZ** агент → `daarion-dao` мікроДАО
|
||
- **Helion** агент → `energy-union-dao` мікроДАО
|
||
|
||
**Функції:**
|
||
- `getMicroDaoByAgentId(agentId)` - отримати мікроДАО за ID агента
|
||
- `getAgentByMicroDaoId(microDaoId)` - отримати агента за ID мікроДАО
|
||
- `isAgentOrchestrator(agentId)` - перевірити чи агент є оркестратором
|
||
- `hasOrchestrator(microDaoId)` - перевірити чи мікроДАО має оркестратора
|
||
|
||
---
|
||
|
||
### ✅ 2. Об'єднання кабінетів
|
||
|
||
**Логіка:**
|
||
- Якщо відкривається кабінет агента-оркестратора → автоматично перенаправляє на кабінет мікроДАО
|
||
- Кабінет мікроДАО автоматично знаходить та використовує агента-оркестратора
|
||
- **Один кабінет = один агент-оркестратор = одне мікроДАО**
|
||
|
||
**Приклади:**
|
||
- `/agent/greenfood` → `/microdao/greenfood-dao` (автоматичне перенаправлення)
|
||
- `/agent/daarwizz` → `/microdao/daarion-dao` (автоматичне перенаправлення)
|
||
- `/agent/helion` → `/microdao/energy-union-dao` (автоматичне перенаправлення)
|
||
|
||
---
|
||
|
||
### ✅ 3. Кнопки в кабінеті агента
|
||
|
||
**Додано в `AgentCabinetPage.tsx`:**
|
||
- ✅ **"Створити МікроДАО"** - тільки для агентів без мікроДАО
|
||
- ✅ **"Підключитись до МікроДАО"** - тільки для агентів без мікроДАО
|
||
- ✅ Кнопки не відображаються для агентів-оркестраторів (вони вже мають мікроДАО)
|
||
|
||
---
|
||
|
||
### ✅ 4. Чат з оркестратором на головній сторінці
|
||
|
||
**Відображення:**
|
||
- ✅ Чат з оркестратором мікроДАО відображається **одразу на головній сторінці** кабінету мікроДАО
|
||
- ✅ Розташований після статистичних карток
|
||
- ✅ Перед секцією "Швидкі дії"
|
||
- ✅ Використовує маппінг для автоматичного визначення оркестратора
|
||
|
||
---
|
||
|
||
## 📊 Структура об'єднання
|
||
|
||
### Приклад 1: GREENFOOD
|
||
|
||
```
|
||
Агент: greenfood (оркестратор)
|
||
↓
|
||
МікроДАО: greenfood-dao
|
||
↓
|
||
Кабінет: /microdao/greenfood-dao
|
||
├── Чат з оркестратором (greenfood)
|
||
├── Статистика
|
||
├── Агенти
|
||
└── Налаштування
|
||
```
|
||
|
||
**URL:**
|
||
- `/agent/greenfood` → автоматично перенаправляє на `/microdao/greenfood-dao`
|
||
- `/microdao/greenfood-dao` → показує кабінет з чатом з оркестратором (greenfood)
|
||
|
||
---
|
||
|
||
### Приклад 2: DAARION
|
||
|
||
```
|
||
Агент: daarwizz (оркестратор)
|
||
↓
|
||
МікроДАО: daarion-dao
|
||
↓
|
||
Кабінет: /microdao/daarion-dao
|
||
├── Чат з оркестратором (daarwizz)
|
||
├── Статистика
|
||
├── Агенти
|
||
└── Налаштування
|
||
```
|
||
|
||
**URL:**
|
||
- `/agent/daarwizz` → автоматично перенаправляє на `/microdao/daarion-dao`
|
||
- `/microdao/daarion-dao` → показує кабінет з чатом з оркестратором (daarwizz)
|
||
|
||
---
|
||
|
||
### Приклад 3: ENERGY UNION
|
||
|
||
```
|
||
Агент: helion (оркестратор)
|
||
↓
|
||
МікроДАО: energy-union-dao
|
||
↓
|
||
Кабінет: /microdao/energy-union-dao
|
||
├── Чат з оркестратором (helion)
|
||
├── Статистика
|
||
├── Агенти
|
||
└── Налаштування
|
||
```
|
||
|
||
**URL:**
|
||
- `/agent/helion` → автоматично перенаправляє на `/microdao/energy-union-dao`
|
||
- `/microdao/energy-union-dao` → показує кабінет з чатом з оркестратором (helion)
|
||
|
||
---
|
||
|
||
## 🔧 Технічні деталі
|
||
|
||
### 1. Автоматичне перенаправлення
|
||
|
||
**Файл:** `src/pages/AgentCabinetPage.tsx`
|
||
|
||
```typescript
|
||
// Перевіряємо чи агент є оркестратором мікроДАО
|
||
const microDaoMapping = agentId ? getMicroDaoByAgentId(agentId) : null;
|
||
|
||
// Якщо агент є оркестратором мікроДАО - перенаправляємо на кабінет мікроДАО
|
||
useEffect(() => {
|
||
if (microDaoMapping && agentId) {
|
||
navigate(`/microdao/${microDaoMapping.microDaoId}`, { replace: true });
|
||
}
|
||
}, [microDaoMapping, agentId, navigate]);
|
||
```
|
||
|
||
---
|
||
|
||
### 2. Визначення оркестратора в кабінеті мікроДАО
|
||
|
||
**Файл:** `src/pages/MicroDaoCabinetPage.tsx`
|
||
|
||
```typescript
|
||
// Отримуємо агента-оркестратора для цього мікроДАО
|
||
const orchestratorMapping = getAgentByMicroDaoId(microDaoId);
|
||
const orchestratorAgentId = orchestratorMapping?.agentId;
|
||
|
||
// Використовуємо в чаті
|
||
<MicroDaoOrchestratorChat
|
||
microDaoId={team.id}
|
||
orchestratorAgentId={orchestratorAgentId || ...}
|
||
/>
|
||
```
|
||
|
||
---
|
||
|
||
### 3. Кнопки в кабінеті агента
|
||
|
||
**Умови відображення:**
|
||
- Кнопки показуються тільки якщо агент **НЕ** є оркестратором мікроДАО
|
||
- Якщо агент вже має мікроДАО → автоматично перенаправляє на кабінет мікроДАО
|
||
|
||
```typescript
|
||
{!microDaoMapping && (
|
||
<>
|
||
<button onClick={() => navigate('/console?create=true')}>
|
||
Створити МікроДАО
|
||
</button>
|
||
<button onClick={() => navigate('/console')}>
|
||
Підключитись до МікроДАО
|
||
</button>
|
||
</>
|
||
)}
|
||
```
|
||
|
||
---
|
||
|
||
## 🚀 Як використати
|
||
|
||
### 1. Відкрити кабінет мікроДАО
|
||
|
||
**Прямі посилання:**
|
||
- `http://localhost:8899/microdao/greenfood-dao`
|
||
- `http://localhost:8899/microdao/daarion-dao`
|
||
- `http://localhost:8899/microdao/energy-union-dao`
|
||
|
||
**Через агента:**
|
||
- `http://localhost:8899/agent/greenfood` → автоматично перенаправить на `/microdao/greenfood-dao`
|
||
- `http://localhost:8899/agent/daarwizz` → автоматично перенаправить на `/microdao/daarion-dao`
|
||
- `http://localhost:8899/agent/helion` → автоматично перенаправить на `/microdao/energy-union-dao`
|
||
|
||
---
|
||
|
||
### 2. Чат з оркестратором
|
||
|
||
1. Відкрити кабінет мікроДАО
|
||
2. На головній сторінці (вкладка "Огляд") знайти секцію "Чат з оркестратором мікроДАО"
|
||
3. Почати спілкування
|
||
|
||
---
|
||
|
||
### 3. Створити/підключити мікроДАО
|
||
|
||
1. Відкрити кабінет агента (який не є оркестратором)
|
||
2. Натиснути кнопку:
|
||
- **"Створити МікроДАО"** - створити нове мікроДАО
|
||
- **"Підключитись до МікроДАО"** - підключитись до існуючого
|
||
|
||
---
|
||
|
||
## 📝 Маппінг агентів
|
||
|
||
### Поточний маппінг
|
||
|
||
| Агент | МікроДАО ID | МікроДАО Slug | МікроДАО Name |
|
||
|-------|-------------|---------------|---------------|
|
||
| `greenfood` | `greenfood-dao` | `greenfood` | GREENFOOD |
|
||
| `daarwizz` | `daarion-dao` | `daarion` | DAARION |
|
||
| `helion` | `energy-union-dao` | `energy-union` | ENERGY UNION |
|
||
|
||
### Додавання нового маппінгу
|
||
|
||
**Файл:** `src/utils/agentMicroDaoMapping.ts`
|
||
|
||
```typescript
|
||
export const AGENT_MICRODAO_MAPPING: AgentMicroDaoMapping[] = [
|
||
// ... існуючі маппінги
|
||
{
|
||
agentId: 'new-agent',
|
||
microDaoId: 'new-microdao-dao',
|
||
microDaoSlug: 'new-microdao',
|
||
microDaoName: 'NEW MICRODAO',
|
||
},
|
||
];
|
||
```
|
||
|
||
---
|
||
|
||
## ✅ Статус
|
||
|
||
**Готово:**
|
||
- ✅ Маппінг між агентами та мікроДАО
|
||
- ✅ Автоматичне перенаправлення з кабінету агента на кабінет мікроДАО
|
||
- ✅ Визначення оркестратора в кабінеті мікроДАО
|
||
- ✅ Чат з оркестратором на головній сторінці кабінету мікроДАО
|
||
- ✅ Кнопки створення/підключення до мікроДАО в кабінеті агента
|
||
- ✅ Об'єднання кабінетів (один кабінет = один агент-оркестратор = одне мікроДАО)
|
||
|
||
**Результат:**
|
||
- ✅ Кабінет агента-оркестратора = кабінет мікроДАО
|
||
- ✅ Чат з оркестратором доступний одразу на головній сторінці
|
||
- ✅ Користувачі можуть легко створювати/підключатись до мікроДАО
|
||
|
||
---
|
||
|
||
**Кабінети агентів та мікроДАО об'єднано!** 🎉
|
||
|
||
**Доступ:**
|
||
- Кабінети мікроДАО: `http://localhost:8899/microdao/{microDaoId}`
|
||
- Кабінети агентів: `http://localhost:8899/agent/{agentId}` (автоматично перенаправляє на мікроДАО якщо агент є оркестратором)
|
||
|