TASK_PHASE_MVP_DAGI_INTEGRATION_FIX_20251201 A) Agents Layer: - A1: Added gov_level to API and UI (list + profile) - A2: Added dais_identity_id to API and UI - A3: Added home_microdao_id/name/slug for ownership display B) MicroDAO Layer: - B1/B2: Already implemented (agents, rooms, citizens, district badge) C) Nodes Layer: - C1: Node Dashboard already implemented - C2: Created nodes table migration with owner_microdao_id - C3: INSERT NODE1/NODE2 with dao_daarion ownership D) Backend Fixes: - D1: Extended /api/agents/* with DAIS/governance fields - D2/D3: Already implemented Files changed: - services/city-service/repo_city.py - services/city-service/models_city.py - services/city-service/routes_city.py - services/city-service/migrations.py - apps/web/src/lib/types/agents.ts - apps/web/src/lib/agent-dashboard.ts - apps/web/src/app/agents/page.tsx - apps/web/src/components/agent-dashboard/AgentSummaryCard.tsx Reports: - docs/debug/mvp_dagi_integration_fix_report_20251201.md - docs/tasks/TASK_PHASE_MVP_DAGI_INTEGRATION_FIX_20251201.md
334 lines
10 KiB
Markdown
334 lines
10 KiB
Markdown
# Nodes Interface Architecture — UPDATE v1
|
||
|
||
DAARION.city Unified Node Model
|
||
Version: 1.1
|
||
|
||
---
|
||
|
||
# 1. Визначення НОДИ
|
||
|
||
**Нода = фізичний об'єкт + локальний обчислювальний модуль + DAIS-агент + запис у таблиці `nodes`.**
|
||
|
||
Нода не існує "віртуально".
|
||
Вона з'являється тільки після фактичного приєднання фізичного пристрою.
|
||
|
||
---
|
||
|
||
# 2. Компоненти НОДИ
|
||
|
||
## 2.1. Фізичний об'єкт ("ресурс")
|
||
|
||
- енергетична установка,
|
||
- обчислювальний сервер,
|
||
- IoT-станція,
|
||
- мікрокомп'ютер або смартфон,
|
||
- будь-яка реальна точка у світі.
|
||
|
||
## 2.2. Локальний мозок
|
||
|
||
Обов'язково існує хоча б один пристрій, здатний:
|
||
|
||
- запускати агента,
|
||
- передавати телеметрію,
|
||
- встановлювати з'єднання з DAARION,
|
||
- керувати локальним обладнанням.
|
||
|
||
Це може бути:
|
||
|
||
- ноутбук,
|
||
- міні-ПК,
|
||
- сервер,
|
||
- смартфон,
|
||
- Raspberry Pi.
|
||
|
||
## 2.3. DAIS-агент
|
||
|
||
Кожна нода має свого:
|
||
|
||
- `dais_id`
|
||
- `wallet`
|
||
- `public_key`
|
||
- `role: node_agent`
|
||
|
||
Це і є "особистість" ноди, можливість підписувати операції.
|
||
|
||
## 2.4. Запис у таблиці `nodes`
|
||
|
||
У БД фіксується:
|
||
|
||
- `node_id`
|
||
- `owner_microdao_id`
|
||
- `node_agent_id`
|
||
- `kind`
|
||
- `capabilities`
|
||
- `status`
|
||
- `registered_at`
|
||
|
||
## 2.5. Node Profile — Core Invariants (PATCH v1)
|
||
|
||
Кожна нода в DAARION Ontology має чотири обов'язкові шари:
|
||
|
||
1. **Metrics Layer** — live-метрики CPU/GPU/RAM/Disk + heartbeat. Навіть якщо телеметрія частково відсутня, нода переходить у `metrics_status = degraded`, а не існує “порожньою”.
|
||
2. **Ownership Layer** — власник (MicroDAO/District) з полями `owner_microdao_id`, `owner_microdao_slug` (опційно `district_id`). Немає безхазяйних нод.
|
||
3. **Models Layer** — локальний Swapper + набір моделей (LLM, STT, vision, TTS, RAG). Dev-ноди так само мають DAGI-стек, просто з іншим складом моделей.
|
||
4. **Orchestration Layer** — локальний DAGI Router + агенти з `home_node_id`, які працюють на цій ноді.
|
||
|
||
Також кожна нода має мінімальний набір **Node Core Agents**:
|
||
|
||
- **Node Guardian Agent** — відповідає за health, безпеку, інциденти.
|
||
- **Node Steward Agent** — відповідає за приналежність до microDAO, профіль, онбординг.
|
||
- (опційно) **Node Models/Swapper Agent** — відповідає за опис і політику використання локального стека моделей.
|
||
|
||
> Принцип “немає сторінки без агентів” означає, що будь-який інтерфейс Ноди (профіль, метрики, моделі, доступи) завжди “закріплений” за хоча б одним агентом, і цей агент показується в UI.
|
||
|
||
---
|
||
|
||
# 3. Типи НОД
|
||
|
||
## 3.1. Energy Node
|
||
|
||
Фізична енергетична установка з датчиками.
|
||
|
||
`kind = "energy"`
|
||
|
||
## 3.2. Compute Node
|
||
|
||
Фізичний сервер/станція для AI.
|
||
|
||
`kind = "compute"`
|
||
|
||
## 3.3. Hybrid Node
|
||
|
||
Енергія + compute.
|
||
|
||
`kind = "hybrid"`
|
||
|
||
## 3.4. IoT Gateway Node
|
||
|
||
Для сенсорних мереж.
|
||
|
||
`kind = "iot_gateway"`
|
||
|
||
## 3.5. Edge Node
|
||
|
||
Смартфон, ноутбук, міні-ПК.
|
||
|
||
`kind = "edge"`
|
||
|
||
## 3.6. Datacenter Node
|
||
|
||
Потужний серверний вузол.
|
||
|
||
`kind = "datacenter"`
|
||
|
||
## 3.7. GPU Cluster Node
|
||
|
||
Спеціалізований GPU кластер.
|
||
|
||
`kind = "gpu_cluster"`
|
||
|
||
---
|
||
|
||
# 4. Capability-профілі ("можливості")
|
||
|
||
При реєстрації ноди описуються її можливості:
|
||
|
||
### Приклади:
|
||
|
||
```json
|
||
{
|
||
"energy": {
|
||
"max_kWt": 8.2,
|
||
"sensors": ["temp", "co2"],
|
||
"telemetry": "1m"
|
||
},
|
||
"compute": {
|
||
"gpu_vram": "16GB",
|
||
"cpu_cores": 12,
|
||
"ram": "64GB",
|
||
"storage": "2TB"
|
||
}
|
||
}
|
||
```
|
||
|
||
Цей профіль створюється самим пристроєм або оператором вручну.
|
||
|
||
---
|
||
|
||
# 5. Правило реєстрації
|
||
|
||
> Нода реєструється тільки тоді, коли фізичний пристрій реально з'єднується з DAARION і викликає `/nodes/register`.
|
||
|
||
**Жодних автосозданих нод.**
|
||
**Жодних "placeholder-node".**
|
||
|
||
## 5.1 Процес реєстрації
|
||
|
||
```mermaid
|
||
sequenceDiagram
|
||
participant Device as Physical Device
|
||
participant Brain as Local Brain
|
||
participant API as DAARION API
|
||
participant DB as Database
|
||
|
||
Device->>Brain: Boot & Initialize
|
||
Brain->>API: POST /nodes/register
|
||
API->>API: Validate DAIS identity
|
||
API->>DB: INSERT INTO nodes
|
||
DB-->>API: node_id
|
||
API-->>Brain: { node_id, status: "registered" }
|
||
Brain->>Device: Configure & Start Services
|
||
```
|
||
|
||
## 5.2 Required Fields
|
||
|
||
| Field | Type | Required | Description |
|
||
|-------|------|----------|-------------|
|
||
| owner_microdao_id | UUID | ✅ | MicroDAO власник |
|
||
| node_agent_id | TEXT | ✅ | DAIS ID агента ноди |
|
||
| kind | ENUM | ✅ | Тип ноди |
|
||
| capabilities | JSONB | ✅ | Можливості |
|
||
| hostname | TEXT | ❌ | Ім'я хоста |
|
||
| ip_address | TEXT | ❌ | IP адреса |
|
||
|
||
---
|
||
|
||
# 6. Onboarding / Offboarding
|
||
|
||
## 6.1 Onboarding
|
||
|
||
1. Фізичний пристрій підключається до мережі
|
||
2. Локальний мозок запускає DAIS-агента
|
||
3. Агент отримує DAIS identity (якщо ще немає)
|
||
4. Виклик `/nodes/register` з capability-профілем
|
||
5. Нода з'являється в системі
|
||
6. District Lead Agent підтверджує (якщо потрібно)
|
||
|
||
## 6.2 Offboarding
|
||
|
||
- власник може відключити ноду через `/nodes/{id}/deactivate`
|
||
- District Lead може заблокувати ноду при порушенні
|
||
- City Governance може ревокувати ноду при критичних інцидентах
|
||
|
||
---
|
||
|
||
# 7. Security
|
||
|
||
- всі операції підписані DAIS-ключами ноди
|
||
- ревокація ноди = блокування її DAIS-агента
|
||
- телеметрія може бути E2E-шифрована
|
||
- кожна нода має свій wallet для мікротранзакцій
|
||
|
||
## 7.1 Key Rotation
|
||
|
||
Ноди повинні періодично оновлювати ключі:
|
||
|
||
- автоматична ротація кожні 90 днів
|
||
- примусова ротація при підозрі компрометації
|
||
- старі ключі зберігаються в `dais_keys` з `revoked = true`
|
||
|
||
---
|
||
|
||
# 8. Інтеграція з District-протоколами
|
||
|
||
## 8.1 MicroDAO
|
||
|
||
Кожна нода належить певному MicroDAO:
|
||
|
||
- `owner_microdao_id` → FK до `microdaos`
|
||
- права управління нодою = права Orchestrator MicroDAO
|
||
|
||
## 8.2 District
|
||
|
||
District Lead (Helion, GREENFOOD ERP, інші) має право:
|
||
|
||
- реєстрації ноди всередині District
|
||
- перевірки capability-профілю
|
||
- блокування ноди в разі порушення протоколу
|
||
- налаштування SLA вимог
|
||
|
||
## 8.3 City
|
||
|
||
City Governance може:
|
||
|
||
- переглядати всі ноди міста з роллю `city_governance`
|
||
- блокувати ноди при критичних інцидентах
|
||
- встановлювати city-wide policies
|
||
|
||
---
|
||
|
||
# 9. Node Status Lifecycle
|
||
|
||
```
|
||
registered → online → busy → offline → deactivated
|
||
↓
|
||
suspended (при порушенні)
|
||
↓
|
||
revoked (hard block)
|
||
```
|
||
|
||
| Status | Description |
|
||
|--------|-------------|
|
||
| `registered` | Нода зареєстрована, очікує активації |
|
||
| `online` | Нода активна, готова до роботи |
|
||
| `busy` | Нода виконує задачу |
|
||
| `offline` | Нода тимчасово недоступна |
|
||
| `suspended` | Нода призупинена адміністративно |
|
||
| `deactivated` | Нода деактивована власником |
|
||
| `revoked` | Нода заблокована назавжди |
|
||
|
||
---
|
||
|
||
# 10. Telemetry Protocol
|
||
|
||
## 10.1 Heartbeat
|
||
|
||
Кожна нода надсилає heartbeat кожні 60 секунд:
|
||
|
||
```json
|
||
{
|
||
"node_id": "...",
|
||
"timestamp": "2025-11-30T12:00:00Z",
|
||
"status": "online",
|
||
"metrics": {
|
||
"cpu_load": 0.45,
|
||
"memory_used": 0.67,
|
||
"disk_free": 0.82
|
||
}
|
||
}
|
||
```
|
||
|
||
## 10.2 NATS Subjects
|
||
|
||
- `nodes.heartbeat.{node_id}` — heartbeat
|
||
- `nodes.metrics.{node_id}` — детальна телеметрія
|
||
- `nodes.events.{node_id}` — події ноди
|
||
- `nodes.alerts.{node_id}` — алерти
|
||
|
||
---
|
||
|
||
# 11. Сумісність
|
||
|
||
Ця модель однакова для:
|
||
|
||
- **Energy Union** — energy/compute/hybrid ноди
|
||
- **GREENFOOD** — warehouse/logistics/iot ноди
|
||
- **CLAN** — edge/compute ноди
|
||
- **SOUL** — personal/edge ноди
|
||
- **DAARION root DAO** — datacenter/gpu_cluster ноди
|
||
|
||
---
|
||
|
||
# 12. Cross-References
|
||
|
||
- **DAARION_Ontology_Core_v1.md** — базова онтологія
|
||
- **DAIS_Layer_Architecture_v1.md** — система ідентичності
|
||
- **Agent_Governance_Protocol_v1.md** — права агентів
|
||
- **ENERGYUNION_District_Protocol_v1.md** — протокол Energy Union
|
||
- **GREENFOOD_District_Protocol_v1.md** — протокол GREENFOOD
|
||
|
||
---
|
||
|
||
**Document Status:** ✅ Ready for Implementation
|
||
|