Files
microdao-daarion/docs/internal/architecture/DAARION_DAGI_ALIGNMENT.md

217 lines
8.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# DAARION MVP ↔ DAGI Runtime Alignment
> **Version:** 1.0
> **Date:** 2025-11-28
> **Status:** Active
## Огляд
Цей документ визначає "джерело істини" (Source of Truth) для всіх сутностей DAARION MVP та їх зв'язок з реальною DAGI-мережею.
**Ключовий принцип:** DAARION MVP — це UI-шар над реальною DAGI/DAOS-мережею. Всі дані беруться з відповідних Registry, а не з моків чи статичних конфігів.
---
## 1. Node Registry
### Джерело даних
- **Database:** `node_registry.nodes` (окрема БД node_registry)
- **Cache:** `daarion.node_cache` (кеш в основній БД для швидких JOIN)
### Схема node_cache
```sql
CREATE TABLE node_cache (
id SERIAL PRIMARY KEY,
node_id TEXT NOT NULL UNIQUE, -- 'node-1-hetzner-gex44'
node_name TEXT NOT NULL, -- 'Hetzner GEX44 Production'
hostname TEXT, -- '144.76.224.179'
roles TEXT[], -- '{core,gateway,matrix,agents,gpu}'
environment TEXT, -- 'production' | 'development'
status TEXT DEFAULT 'offline', -- 'online' | 'offline'
gpu TEXT, -- GPU info
last_sync TIMESTAMPTZ,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
```
### Поточні ноди
| node_id | name | hostname | environment | roles |
|---------|------|----------|-------------|-------|
| `node-1-hetzner-gex44` | Hetzner GEX44 Production | 144.76.224.179 | production | core, gateway, matrix, agents, gpu |
| `node-2-macbook-m4max` | MacBook Pro M4 Max | 192.168.1.33 | development | development, gpu, ai_runtime |
### Source of Truth для
- `/nodes` — Node Directory
- `home_node_id` кожного агента
- Розташування сервісів: Swapper, Router, Ollama, STT, OCR
### API Endpoints
- `GET /public/nodes` — список всіх нод
- `GET /public/nodes/{node_id}` — профіль конкретної ноди
- `GET /api/v1/nodes/{node_id}/dashboard` — детальний дашборд ноди
---
## 2. Agent Registry
### Джерело даних
- **Database:** `daarion.agents`
- **Config:** DAGI Router `router-config.yml` (для runtime routing)
### Схема agents (ключові поля)
```sql
CREATE TABLE agents (
id TEXT PRIMARY KEY, -- 'exor', 'faye', 'sofia'
display_name TEXT NOT NULL,
kind TEXT DEFAULT 'assistant', -- orchestrator, security, marketing, etc.
status TEXT DEFAULT 'offline',
-- Home Node (ОБОВ'ЯЗКОВО!)
node_id TEXT NOT NULL, -- 'node-1-hetzner-gex44'
-- DAIS (публічний профіль)
is_public BOOLEAN DEFAULT false,
public_slug TEXT UNIQUE, -- URL slug для /citizens/
public_title TEXT,
public_tagline TEXT,
public_skills TEXT[],
public_district TEXT,
public_primary_room_slug TEXT,
-- System Prompts
system_prompt_core TEXT,
system_prompt_safety TEXT,
system_prompt_governance TEXT,
system_prompt_tools TEXT,
-- Metadata
avatar_url TEXT,
capabilities TEXT[],
model TEXT,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
```
### Правила
1. **Кожен агент ОБОВ'ЯЗКОВО має `node_id`** — немає агентів без "прописки"
2. `id` агента відповідає `agent_id` в DAGI Router config
3. `is_public=true` — агент видимий у `/citizens`
4. `public_slug` — унікальний URL для публічного профілю
### Source of Truth для
- `/agents` — Agent Console (всі агенти)
- `/citizens` — Public Citizens (WHERE is_public=true)
- `/agents/{id}` — Agent Cabinet (DAIS + System Prompts)
### API Endpoints
- `GET /public/agents` — список всіх агентів з home_node
- `GET /city/agents/{id}/dashboard` — детальний дашборд агента
- `GET /public/citizens` — публічні громадяни
- `GET /public/citizens/{slug}` — профіль громадянина
---
## 3. MicroDAO Registry
### Джерело даних
- **Database:** `daarion.microdaos`, `daarion.microdao_agents`
### Схема
```sql
CREATE TABLE microdaos (
id UUID PRIMARY KEY,
slug TEXT UNIQUE NOT NULL, -- 'greenfood-dao'
name TEXT NOT NULL, -- 'GreenFood DAO'
description TEXT,
district TEXT,
base_node_id TEXT, -- нода де живе core DAO
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE TABLE microdao_agents (
id UUID PRIMARY KEY,
microdao_id UUID REFERENCES microdaos(id),
agent_id TEXT REFERENCES agents(id),
role TEXT DEFAULT 'member', -- 'orchestrator' | 'member'
is_core BOOLEAN DEFAULT false,
created_at TIMESTAMPTZ DEFAULT NOW()
);
```
### Правила
1. Кожен MicroDAO має `orchestrator_agent_id` — головний агент
2. `base_node_id` — нода де живе core стек MicroDAO
3. Зв'язок з Matrix/City rooms через `microdao_channels`
4. **Кожен активний агент ОБОВ'ЯЗКОВО належить хоча б до одного MicroDAO** (через `microdao_agents`)
### Source of Truth для
- `/microdao` — список MicroDAO
- `/microdao/{slug}` — деталі MicroDAO з агентами
### API Endpoints
- `GET /city/microdao` — список всіх MicroDAO
- `GET /city/microdao/{slug}` — деталі MicroDAO
---
## 4. MVP UI Mapping
| UI Route | Source of Truth | Notes |
|----------|-----------------|-------|
| `/nodes` | Node Registry (`node_cache`) | Всі ноди мережі |
| `/nodes/{nodeId}` | Node Registry + health probes | Детальний кабінет ноди |
| `/agents` | Agent Registry (`agents`) | Всі агенти з home_node |
| `/agents/{id}` | Agent Registry | DAIS + System Prompts |
| `/citizens` | Agent Registry (`WHERE is_public=true`) | Публічні громадяни |
| `/citizens/{slug}` | Agent Registry | Публічний профіль |
| `/microdao` | MicroDAO Registry | Всі MicroDAO |
| `/microdao/{slug}` | MicroDAO Registry | Деталі з агентами |
| `/city` | City Rooms + Agent Presence | 2D мапа міста |
---
## 5. DAGI Runtime Services
### Per-Node Services
| Service | NODE1 URL | NODE2 URL | Purpose |
|---------|-----------|-----------|---------|
| DAGI Router | http://10.99.0.1:9102 | http://10.99.0.2:9102 | Agent orchestration |
| Swapper | http://10.99.0.1:8890 | http://10.99.0.2:8890 | Model switching |
| Ollama | http://10.99.0.1:11434 | http://10.99.0.2:11434 | LLM inference |
| STT | http://10.99.0.1:8895 | - | Speech-to-text |
| OCR | http://10.99.0.1:8896 | - | Image OCR |
### Health Checks
- Router: `GET /health`
- Swapper: `GET /models`
- Ollama: `GET /api/tags`
---
## 6. Важливі примітки
### ⚠️ Agents ≠ Agents on NODE1
> Агенти в MVP беруться з Agent Registry і мають поле `home_node_id`, яке вказує реальну ноду.
> Агент з NODE2 буде показаний в `/agents` з бейджем "НОДА2".
### ⚠️ Кожен агент має "прописку"
> Не може існувати агента без `node_id`. Якщо такий з'являється — це баг, який треба виправити.
### ⚠️ Public Citizens = Subset of Agents
> `/citizens` показує тільки агентів з `is_public=true`. Це не окрема сутність, а фільтр.
---
## 7. Пов'язані документи
- [NODE_PROFILE_STANDARD_v1.md](../../NODE_PROFILE_STANDARD_v1.md) — стандарт профілю ноди
- [AGENT_PROFILE_STANDARD_v1.md](../dais/AGENT_PROFILE_STANDARD_v1.md) — DAIS стандарт
- [Node_Dashboard_API_v1.md](../infra/Node_Dashboard_API_v1.md) — API дашборду ноди
- `services/router/router-config.yml` — конфіг DAGI Router
- [SWAPPER-DEFAULT-MODEL-NODE1-SETUP.md](../../cursor/SWAPPER-DEFAULT-MODEL-NODE1-SETUP.md) — налаштування Swapper