docs: add missing migrations and documentation (NODE2, DAIS, infra)
This commit is contained in:
315
docs/internal/dais/AGENT_PROFILE_STANDARD_v1.md
Normal file
315
docs/internal/dais/AGENT_PROFILE_STANDARD_v1.md
Normal file
@@ -0,0 +1,315 @@
|
||||
# DAIS: Agent Profile Standard v1.0
|
||||
|
||||
**Date:** 2025-11-28
|
||||
**Status:** Active
|
||||
**Version:** 1.0.0
|
||||
|
||||
---
|
||||
|
||||
## Overview
|
||||
|
||||
DAIS (Decentralized AI Agent Standard) визначає структуру профілю AI-агента в екосистемі DAARION. Кожен агент має 4 основні модулі:
|
||||
|
||||
1. **CORE (META)** — "Хто я?" — ідентичність, роль, місія
|
||||
2. **VIS (Visual Kernel)** — "Як я виглядаю?" — аватар, стиль, візуальний образ
|
||||
3. **COG (Cognitive Engine)** — "Як я думаю?" — модель, пам'ять, контекст
|
||||
4. **ACT (Action Interface)** — "Що я можу робити?" — інструменти, інтерфейси
|
||||
|
||||
---
|
||||
|
||||
## Agent Identity
|
||||
|
||||
```json
|
||||
{
|
||||
"agent_id": "string",
|
||||
"display_name": "string",
|
||||
"kind": "string",
|
||||
"status": "online|offline|degraded|training|maintenance",
|
||||
"node_id": "string",
|
||||
"roles": ["string"],
|
||||
"tags": ["string"]
|
||||
}
|
||||
```
|
||||
|
||||
### Agent Kinds
|
||||
|
||||
| Kind | Description |
|
||||
|------|-------------|
|
||||
| `orchestrator` | Координує інших агентів |
|
||||
| `coordinator` | Управляє workflow |
|
||||
| `specialist` | Експерт у вузькій області |
|
||||
| `developer` | Розробка коду |
|
||||
| `architect` | Системна архітектура |
|
||||
| `marketing` | Маркетинг і комунікації |
|
||||
| `finance` | Фінанси і аналітика |
|
||||
| `security` | Безпека і аудит |
|
||||
| `forensics` | Форензика і розслідування |
|
||||
| `vision` | Обробка зображень/відео |
|
||||
| `research` | Дослідження і аналіз |
|
||||
| `memory` | Управління пам'яттю |
|
||||
| `web3` | Blockchain і криптовалюти |
|
||||
| `strategic` | Стратегічне планування |
|
||||
| `mediator` | Вирішення конфліктів |
|
||||
| `innovation` | Інновації та R&D |
|
||||
| `civic` | Громадські справи |
|
||||
| `oracle` | Зовнішні дані |
|
||||
| `builder` | Створення контенту |
|
||||
| `social` | Соціальна взаємодія |
|
||||
|
||||
---
|
||||
|
||||
## DAIS Modules
|
||||
|
||||
### 1. CORE (META) — Identity
|
||||
|
||||
```json
|
||||
{
|
||||
"core": {
|
||||
"title": "string",
|
||||
"bio": "string",
|
||||
"mission": "string",
|
||||
"version": "string",
|
||||
"created_at": "ISO8601",
|
||||
"updated_at": "ISO8601"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 2. VIS (Visual Kernel) — Appearance
|
||||
|
||||
```json
|
||||
{
|
||||
"vis": {
|
||||
"avatar_url": "string",
|
||||
"avatar_style": "anime|realistic|abstract|cyberpunk",
|
||||
"color_primary": "#hex",
|
||||
"color_secondary": "#hex",
|
||||
"lora_refs": ["string"],
|
||||
"checkpoint_refs": ["string"],
|
||||
"second_me_id": "string"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 3. COG (Cognitive Engine) — Brain
|
||||
|
||||
```json
|
||||
{
|
||||
"cog": {
|
||||
"base_model": "string",
|
||||
"provider": "ollama|openai|anthropic|custom",
|
||||
"node_id": "string",
|
||||
"context_window": 8192,
|
||||
"temperature": 0.7,
|
||||
"system_prompt": "string",
|
||||
"memory": {
|
||||
"type": "RAG|long-term|episodic",
|
||||
"store": "qdrant|chroma|postgres",
|
||||
"collections": ["string"],
|
||||
"max_tokens": 160000
|
||||
},
|
||||
"tools_enabled": ["string"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 4. ACT (Action Interface) — Capabilities
|
||||
|
||||
```json
|
||||
{
|
||||
"act": {
|
||||
"matrix": {
|
||||
"user_id": "@agent:daarion.space",
|
||||
"rooms": ["!room:daarion.space"]
|
||||
},
|
||||
"tools": ["tool_id"],
|
||||
"apis": ["api_endpoint"],
|
||||
"web3": {
|
||||
"wallet_address": "0x...",
|
||||
"chains": ["ethereum", "polygon"]
|
||||
},
|
||||
"social": {
|
||||
"twitter": "@handle",
|
||||
"telegram": "@handle"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## City Presence
|
||||
|
||||
Агент може бути присутнім у City Rooms:
|
||||
|
||||
```json
|
||||
{
|
||||
"city_presence": {
|
||||
"primary_room_slug": "string",
|
||||
"district": "string",
|
||||
"rooms": [
|
||||
{
|
||||
"room_id": "string",
|
||||
"slug": "string",
|
||||
"name": "string",
|
||||
"role": "resident|moderator|owner"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Metrics
|
||||
|
||||
Runtime метрики агента:
|
||||
|
||||
```json
|
||||
{
|
||||
"metrics": {
|
||||
"tasks_1h": 42,
|
||||
"tasks_24h": 320,
|
||||
"errors_1h": 0,
|
||||
"errors_24h": 1,
|
||||
"avg_latency_ms_1h": 180,
|
||||
"success_rate_24h": 0.99,
|
||||
"tokens_24h": 2400000,
|
||||
"last_task_at": "ISO8601"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Full Agent Profile Example
|
||||
|
||||
```json
|
||||
{
|
||||
"agent_id": "iris",
|
||||
"display_name": "Iris",
|
||||
"kind": "vision",
|
||||
"status": "online",
|
||||
"node_id": "node-2-macbook-m4max",
|
||||
"roles": ["vision", "highlights", "safety"],
|
||||
"tags": ["video", "frames", "clips"],
|
||||
|
||||
"dais": {
|
||||
"core": {
|
||||
"title": "Multimodal Vision Analyst",
|
||||
"bio": "Iris analyzes video frames, extracts highlights and detects key scenes.",
|
||||
"mission": "Make video content accessible and searchable",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
"vis": {
|
||||
"avatar_url": "/assets/agents/iris.png",
|
||||
"avatar_style": "anime-cyberpunk",
|
||||
"color_primary": "#22D3EE",
|
||||
"color_secondary": "#0891B2",
|
||||
"lora_refs": ["hf://daarion/iris-lora"],
|
||||
"second_me_id": "secondme_iris_v1"
|
||||
},
|
||||
"cog": {
|
||||
"base_model": "llava:13b",
|
||||
"provider": "ollama",
|
||||
"node_id": "node-2-macbook-m4max",
|
||||
"context_window": 8192,
|
||||
"temperature": 0.7,
|
||||
"memory": {
|
||||
"type": "RAG",
|
||||
"store": "qdrant",
|
||||
"collections": ["iris_sessions", "video_highlights"],
|
||||
"max_tokens": 160000
|
||||
},
|
||||
"tools_enabled": ["video_cut", "thumbnail_gen", "safety_scan"]
|
||||
},
|
||||
"act": {
|
||||
"matrix": {
|
||||
"user_id": "@iris:daarion.space",
|
||||
"rooms": ["!vision_lab:daarion.space", "!central_square:daarion.space"]
|
||||
},
|
||||
"tools": ["video_cut", "thumbnail_gen", "safety_scan"],
|
||||
"web3": null
|
||||
}
|
||||
},
|
||||
|
||||
"city_presence": {
|
||||
"primary_room_slug": "vision-lab",
|
||||
"district": "creators",
|
||||
"rooms": [
|
||||
{"room_id": "city_vision_lab", "slug": "vision-lab", "name": "Vision Lab", "role": "resident"},
|
||||
{"room_id": "city_central_square", "slug": "central-square", "name": "Central Square", "role": "resident"}
|
||||
]
|
||||
},
|
||||
|
||||
"metrics": {
|
||||
"tasks_1h": 42,
|
||||
"tasks_24h": 320,
|
||||
"errors_24h": 1,
|
||||
"avg_latency_ms_1h": 180,
|
||||
"success_rate_24h": 0.99,
|
||||
"tokens_24h": 2400000,
|
||||
"last_task_at": "2025-11-27T09:01:23Z"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Agent Dashboard API
|
||||
|
||||
### Endpoints
|
||||
|
||||
```http
|
||||
GET /api/v1/agents/{agent_id}/dashboard
|
||||
GET /api/v1/agents/{agent_id}/profile
|
||||
PUT /api/v1/agents/{agent_id}/profile (admin only)
|
||||
```
|
||||
|
||||
### Dashboard Response
|
||||
|
||||
```json
|
||||
{
|
||||
"profile": { /* Agent Profile */ },
|
||||
"node": {
|
||||
"node_id": "string",
|
||||
"status": "online",
|
||||
"gpu": { "name": "string", "vram_gb": 20 }
|
||||
},
|
||||
"runtime": {
|
||||
"router_endpoint": "http://node:9102",
|
||||
"health": "healthy",
|
||||
"last_success_at": "ISO8601",
|
||||
"last_error_at": null
|
||||
},
|
||||
"metrics": { /* Metrics */ },
|
||||
"recent_activity": [
|
||||
{
|
||||
"timestamp": "ISO8601",
|
||||
"type": "task_completed|chat_reply|error",
|
||||
"room_slug": "string",
|
||||
"summary": "string"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Database Schema
|
||||
|
||||
### agents table (extended)
|
||||
|
||||
```sql
|
||||
ALTER TABLE agents ADD COLUMN IF NOT EXISTS dais_core JSONB DEFAULT '{}';
|
||||
ALTER TABLE agents ADD COLUMN IF NOT EXISTS dais_vis JSONB DEFAULT '{}';
|
||||
ALTER TABLE agents ADD COLUMN IF NOT EXISTS dais_cog JSONB DEFAULT '{}';
|
||||
ALTER TABLE agents ADD COLUMN IF NOT EXISTS dais_act JSONB DEFAULT '{}';
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Changelog
|
||||
|
||||
- **v1.0.0** (2025-11-28): Initial DAIS standard based on 4-module architecture
|
||||
|
||||
236
docs/internal/infra/Node_Dashboard_API_v1.md
Normal file
236
docs/internal/infra/Node_Dashboard_API_v1.md
Normal file
@@ -0,0 +1,236 @@
|
||||
# Node Dashboard API v1.0
|
||||
|
||||
**Date:** 2025-11-28
|
||||
**Status:** Active
|
||||
**Service:** node-registry
|
||||
**Base URL:** `/api/v1/nodes`
|
||||
|
||||
---
|
||||
|
||||
## Overview
|
||||
|
||||
Node Dashboard API — агрегуючий API для отримання повної інформації про ноду, включаючи:
|
||||
- Базовий профіль (roles, modules, GPU)
|
||||
- Інфраструктурні метрики (CPU, RAM, Disk, GPU)
|
||||
- Статус AI-сервісів (Swapper, Router, STT, Vision, OCR)
|
||||
- Агенти на ноді
|
||||
- Matrix інтеграція
|
||||
- Моніторинг
|
||||
|
||||
---
|
||||
|
||||
## Endpoints
|
||||
|
||||
### 1. Get Node Dashboard (Admin)
|
||||
|
||||
```http
|
||||
GET /api/v1/nodes/{node_id}/dashboard
|
||||
Authorization: Bearer <admin_token>
|
||||
```
|
||||
|
||||
Повертає повну інформацію про ноду для адміністратора.
|
||||
|
||||
### 2. Get Self Dashboard (Node Owner)
|
||||
|
||||
```http
|
||||
GET /api/v1/nodes/self/dashboard
|
||||
Authorization: Bearer <node_token>
|
||||
```
|
||||
|
||||
Повертає інформацію про поточну ноду (node_id з JWT claims).
|
||||
|
||||
---
|
||||
|
||||
## Response Schema
|
||||
|
||||
```json
|
||||
{
|
||||
"node": {
|
||||
"node_id": "string",
|
||||
"name": "string",
|
||||
"roles": ["string"],
|
||||
"status": "online|offline|degraded|maintenance",
|
||||
"public_hostname": "string",
|
||||
"environment": "production|development",
|
||||
"gpu": {
|
||||
"vendor": "string",
|
||||
"model": "string",
|
||||
"vram_gb": "number",
|
||||
"unified_memory_gb": "number (optional, for Apple Silicon)"
|
||||
},
|
||||
"modules": [
|
||||
{
|
||||
"id": "string",
|
||||
"status": "up|down|degraded|unknown",
|
||||
"port": "number (optional)",
|
||||
"error": "string (optional)"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
"infra": {
|
||||
"cpu_usage_pct": "number",
|
||||
"ram": {
|
||||
"total_gb": "number",
|
||||
"used_gb": "number"
|
||||
},
|
||||
"disk": {
|
||||
"total_gb": "number",
|
||||
"used_gb": "number"
|
||||
},
|
||||
"gpus": [
|
||||
{
|
||||
"name": "string",
|
||||
"vram_gb": "number",
|
||||
"used_gb": "number",
|
||||
"sm_util_pct": "number"
|
||||
}
|
||||
],
|
||||
"network": {
|
||||
"rx_mbps": "number",
|
||||
"tx_mbps": "number"
|
||||
}
|
||||
},
|
||||
|
||||
"ai": {
|
||||
"swapper": {
|
||||
"status": "up|down|degraded",
|
||||
"endpoint": "string",
|
||||
"latency_ms": "number",
|
||||
"storage": {
|
||||
"total_gb": "number",
|
||||
"used_gb": "number",
|
||||
"free_gb": "number"
|
||||
},
|
||||
"models": [
|
||||
{
|
||||
"name": "string",
|
||||
"size_gb": "number",
|
||||
"device": "gpu|disk",
|
||||
"state": "loaded|unloaded",
|
||||
"last_used": "ISO8601"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
"router": {
|
||||
"status": "up|down|degraded",
|
||||
"endpoint": "string",
|
||||
"version": "string",
|
||||
"backends": [
|
||||
{
|
||||
"name": "string",
|
||||
"status": "up|down|degraded",
|
||||
"latency_ms": "number",
|
||||
"error": "string (optional)"
|
||||
}
|
||||
],
|
||||
"metrics": {
|
||||
"requests_1m": "number",
|
||||
"requests_1h": "number",
|
||||
"error_rate_1h": "number",
|
||||
"avg_latency_ms_1h": "number"
|
||||
}
|
||||
},
|
||||
|
||||
"services": {
|
||||
"<service_name>": {
|
||||
"status": "up|down|degraded",
|
||||
"endpoint": "string",
|
||||
"latency_ms": "number",
|
||||
"error": "string (optional)",
|
||||
"models": ["string (optional)"]
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
"agents": {
|
||||
"total": "number",
|
||||
"running": "number",
|
||||
"by_kind": {
|
||||
"<kind>": "number"
|
||||
},
|
||||
"top": [
|
||||
{
|
||||
"agent_id": "string",
|
||||
"display_name": "string",
|
||||
"kind": "string",
|
||||
"status": "online|offline|busy",
|
||||
"node_id": "string",
|
||||
"tasks_24h": "number",
|
||||
"errors_24h": "number"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
"matrix": {
|
||||
"enabled": "boolean",
|
||||
"homeserver": "string",
|
||||
"presence_bridge": {
|
||||
"status": "up|down",
|
||||
"latency_ms": "number"
|
||||
}
|
||||
},
|
||||
|
||||
"monitoring": {
|
||||
"prometheus": {
|
||||
"url": "string",
|
||||
"status": "up|down|unknown"
|
||||
},
|
||||
"grafana": {
|
||||
"url": "string",
|
||||
"status": "up|down|unknown"
|
||||
},
|
||||
"logging": {
|
||||
"loki": {
|
||||
"status": "up|down|unknown"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Module Probes
|
||||
|
||||
Dashboard API опитує модулі за допомогою HTTP probes:
|
||||
|
||||
| Module | Probe URL | Timeout |
|
||||
|--------|-----------|---------|
|
||||
| `core.health` | `GET /health` | 500ms |
|
||||
| `ai.swapper` | `GET :8890/health` + `GET :8890/models` | 1000ms |
|
||||
| `ai.router` | `GET :9102/health` + `GET :9102/backends/status` | 1000ms |
|
||||
| `ai.stt` | `GET :8895/health` | 500ms |
|
||||
| `ai.tts` | `GET :5002/health` | 500ms |
|
||||
| `ai.vision` | `GET :11434/api/tags` | 500ms |
|
||||
| `ai.ocr` | `GET :8896/health` | 500ms |
|
||||
| `ai.memory` | `GET :8001/health` | 500ms |
|
||||
| `ai.crewai` | `GET :9010/health` | 500ms |
|
||||
| `matrix.synapse` | `GET :8018/_matrix/client/versions` | 500ms |
|
||||
| `matrix.presence` | `GET :8085/health` | 500ms |
|
||||
| `monitoring.prometheus` | `GET :9090/-/ready` | 500ms |
|
||||
|
||||
---
|
||||
|
||||
## Error Handling
|
||||
|
||||
- Якщо модуль недоступний → `"status": "down", "error": "timeout/connection refused"`
|
||||
- Якщо модуль повертає помилку → `"status": "degraded", "error": "<message>"`
|
||||
- Dashboard API **ніколи не падає** — завжди повертає JSON з актуальними статусами
|
||||
|
||||
---
|
||||
|
||||
## Implementation Notes
|
||||
|
||||
1. **Паралельні запити**: Всі probes виконуються паралельно (asyncio.gather)
|
||||
2. **Кешування**: Результати кешуються на 10 секунд
|
||||
3. **Fallback**: Якщо probe не відповідає, використовується останній відомий статус
|
||||
4. **Metrics**: Для infra метрик використовується psutil або node_exporter
|
||||
|
||||
---
|
||||
|
||||
## Changelog
|
||||
|
||||
- **v1.0.0** (2025-11-28): Initial version
|
||||
|
||||
68
docs/internal/infra/WIREGUARD_NODE2_SETUP.md
Normal file
68
docs/internal/infra/WIREGUARD_NODE2_SETUP.md
Normal file
@@ -0,0 +1,68 @@
|
||||
# WireGuard Setup for NODE2 (macOS)
|
||||
|
||||
## Конфігурація готова!
|
||||
|
||||
Файл конфігурації: `~/.wireguard/wg0.conf`
|
||||
|
||||
## Кроки для підключення:
|
||||
|
||||
### Варіант 1: WireGuard GUI (рекомендовано)
|
||||
|
||||
1. Встановіть WireGuard з App Store або [офіційного сайту](https://www.wireguard.com/install/)
|
||||
|
||||
2. Відкрийте WireGuard.app
|
||||
|
||||
3. Натисніть **"Import tunnel(s) from file..."**
|
||||
|
||||
4. Оберіть файл: `~/.wireguard/wg0.conf`
|
||||
|
||||
5. Натисніть **"Activate"**
|
||||
|
||||
### Варіант 2: Командний рядок
|
||||
|
||||
```bash
|
||||
# Потрібен sudo пароль
|
||||
sudo wg-quick up ~/.wireguard/wg0.conf
|
||||
|
||||
# Перевірка
|
||||
wg show
|
||||
|
||||
# Тест зв'язку
|
||||
ping 10.42.0.1
|
||||
```
|
||||
|
||||
## Конфігурація NODE2
|
||||
|
||||
```ini
|
||||
[Interface]
|
||||
Address = 10.42.0.2/32
|
||||
PrivateKey = <hidden>
|
||||
|
||||
[Peer]
|
||||
PublicKey = p3mGZ7kFzEeDv2poAoTXfDFuklF3JLDVbminumZGUxk=
|
||||
AllowedIPs = 10.42.0.0/24
|
||||
Endpoint = 144.76.224.179:51820
|
||||
PersistentKeepalive = 25
|
||||
```
|
||||
|
||||
## IP-адреси
|
||||
|
||||
| Node | VPN IP | Public IP |
|
||||
|------|--------|-----------|
|
||||
| NODE1 (Hetzner) | 10.42.0.1 | 144.76.224.179 |
|
||||
| NODE2 (MacBook) | 10.42.0.2 | dynamic |
|
||||
|
||||
## Тести після підключення
|
||||
|
||||
```bash
|
||||
# З NODE2
|
||||
ping 10.42.0.1
|
||||
curl http://10.42.0.1:9205/api/v1/nodes
|
||||
curl http://10.42.0.1:9102/health
|
||||
|
||||
# З NODE1
|
||||
ping 10.42.0.2
|
||||
curl http://10.42.0.2:8890/health
|
||||
curl http://10.42.0.2:8895/health
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user