docs: add missing migrations and documentation (NODE2, DAIS, infra)

This commit is contained in:
Apple
2025-11-28 05:18:45 -08:00
parent e7aff95408
commit 41b23537c9
12 changed files with 2371 additions and 0 deletions

View File

@@ -0,0 +1,672 @@
# 🤖 ПОВНА ІНВЕНТАРИЗАЦІЯ АГЕНТІВ NODE2 - DAARION DAO
**Дата:** 27 листопада 2025
**Статус:** ✅ 50 агентів виявлено (108 агентів у плані розширення)
**Джерело:** `src/api/node2Agents.ts`, документація NODE2
---
## 📊 Загальна статистика
- **Реалізовано:** 50 агентів
- **Заплановано:** 108 агентів (архітектура NODE2)
- **З CrewAI:** 38 агентів
- **Без CrewAI:** 12 агентів (system/leadership)
---
## 🎯 СТРУКТУРА КОМАНДИ DAARION DAO
### 👔 Leadership Team (4 агенти)
#### 1. **Solarius** — CEO
- **ID:** `agent-solarius`
- **Role:** CEO of DAARION microDAO Node-2
- **Model:** deepseek-r1:70b (42 GB)
- **Priority:** Highest
- **Workspace:** core_founders_room
- **Department:** Leadership
- **Статус:** ✅ Active
#### 2. **Sofia** — CTO/Chief AI Engineer
- **ID:** `agent-sofia`
- **Role:** Chief AI Engineer & R&D Orchestrator
- **Model:** grok-4.1 (xAI API)
- **Priority:** Highest
- **Workspace:** r_and_d_lab
- **Department:** R&D
- **Статус:** ✅ Active
#### 3. **PrimeSynth** — Chief Documentation Officer
- **ID:** `agent-primesynth`
- **Role:** Document Architect & Structural Synthesizer
- **Model:** gpt-4.1 (OpenAI API)
- **Priority:** High
- **Workspace:** core_founders_room
- **Department:** Documentation
- **Статус:** ✅ Active
#### 4. **Nexor** — System Coordinator (COO)
- **ID:** `agent-nexor`
- **Role:** System Coordinator
- **Model:** deepseek-r1:70b (42 GB)
- **Priority:** High
- **Department:** System
- **Статус:** ✅ Active
---
### 🛠️ System & Strategic Team (6 агентів)
#### 5. **Monitor Agent (NODE2)**
- **ID:** `agent-monitor-node2`
- **Role:** System Monitoring & Event Logging
- **Model:** mistral-nemo:12b (7.1 GB)
- **Priority:** High
- **Department:** System
- **Статус:** ✅ Active
#### 6. **Strategic Sentinels**
- **ID:** `agent-strategic-sentinels`
- **Role:** Strategic Planning
- **Model:** mistral-22b (ollama)
- **Priority:** High
- **Department:** System
- **Статус:** ✅ Active
#### 7. **Vindex**
- **ID:** `agent-vindex`
- **Role:** Decision Maker
- **Model:** deepseek-r1:70b (42 GB)
- **Priority:** High
- **Department:** System
- **Статус:** ✅ Active
#### 8. **Helix**
- **ID:** `agent-helix`
- **Role:** System Architect
- **Model:** deepseek-r1:70b (42 GB)
- **Priority:** High
- **Department:** System
- **Статус:** ✅ Active
#### 9. **Aurora**
- **ID:** `agent-aurora`
- **Role:** Innovation Catalyst
- **Model:** gemma2:27b (15 GB)
- **Priority:** Medium
- **Department:** System
- **Статус:** ✅ Active
#### 10. **Arbitron**
- **ID:** `agent-arbitron`
- **Role:** Conflict Resolver
- **Model:** mistral-22b (ollama)
- **Priority:** Medium
- **Department:** System
- **Статус:** ✅ Active
---
### 💻 Engineering Crew (5 агентів + CrewAI)
#### 11. **ByteForge**
- **ID:** `agent-byteforge`
- **Role:** Code Generator
- **Model:** qwen2.5-coder:72b (ollama)
- **Priority:** High
- **Department:** Engineering
- **CrewAI:** ✅
#### 12. **Vector**
- **ID:** `agent-vector`
- **Role:** Vector Operations Specialist
- **Model:** starcoder2:34b (ollama)
- **Priority:** High
- **Department:** Engineering
- **CrewAI:** ✅
#### 13. **ChainWeaver**
- **ID:** `agent-chainweaver`
- **Role:** Blockchain Developer
- **Model:** qwen2.5-coder:72b (ollama)
- **Priority:** High
- **Department:** Engineering
- **CrewAI:** ✅
#### 14. **Cypher**
- **ID:** `agent-cypher`
- **Role:** Security Coder
- **Model:** starcoder2:34b (ollama)
- **Priority:** High
- **Department:** Engineering
- **CrewAI:** ✅
#### 15. **Canvas**
- **ID:** `agent-canvas`
- **Role:** UI/UX Developer
- **Model:** qwen2.5-coder:72b (ollama)
- **Priority:** Medium
- **Department:** Engineering
- **CrewAI:** ✅
---
### 📱 Marketing Crew (6 агентів + CrewAI)
#### 16. **Roxy** — CMO
- **ID:** `agent-roxy`
- **Role:** Social Media Manager
- **Model:** mistral:7b
- **Priority:** High
- **Department:** Marketing
- **CrewAI:** ✅
#### 17. **Mira**
- **ID:** `agent-mira`
- **Role:** Content Creator
- **Model:** qwen2.5:7b
- **Priority:** High
- **Department:** Marketing
- **CrewAI:** ✅
#### 18. **Tempo**
- **ID:** `agent-tempo`
- **Role:** Campaign Manager
- **Model:** gpt-oss:latest (13 GB)
- **Priority:** Medium
- **Department:** Marketing
- **CrewAI:** ✅
#### 19. **Harmony**
- **ID:** `agent-harmony`
- **Role:** Brand Manager
- **Model:** mistral:7b
- **Priority:** Medium
- **Department:** Marketing
- **CrewAI:** ✅
#### 20. **Faye**
- **ID:** `agent-faye`
- **Role:** Community Manager
- **Model:** qwen2.5:7b
- **Priority:** Medium
- **Department:** Marketing
- **CrewAI:** ✅
#### 21. **Storytelling**
- **ID:** `agent-storytelling`
- **Role:** Story Creator
- **Model:** qwen2.5:7b
- **Priority:** Medium
- **Department:** Marketing
- **CrewAI:** ✅
---
### 💰 Finance Crew (4 агенти + CrewAI) — CFO Team
#### 22. **Financial Analyst** — CFO
- **ID:** `agent-financial-analyst`
- **Role:** Financial Analysis & Reporting
- **Model:** mistral:7b
- **Priority:** High
- **Department:** Finance
- **CrewAI:** ✅
#### 23. **Accountant**
- **ID:** `agent-accountant`
- **Role:** Accounting & Bookkeeping
- **Model:** qwen2.5:7b
- **Priority:** Medium
- **Department:** Finance
- **CrewAI:** ✅
#### 24. **Budget Planner**
- **ID:** `agent-budget-planner`
- **Role:** Budget Planning & Forecasting
- **Model:** mistral:7b
- **Priority:** Medium
- **Department:** Finance
- **CrewAI:** ✅
#### 25. **Tax Advisor**
- **ID:** `agent-tax-advisor`
- **Role:** Tax Planning & Compliance
- **Model:** qwen2.5:7b
- **Priority:** Low
- **Department:** Finance
- **CrewAI:** ✅
---
### 🌐 Web3 / Crypto Team (5 агентів + CrewAI)
#### 26. **Smart Contract Dev**
- **ID:** `agent-smart-contract-dev`
- **Role:** Smart Contract Developer
- **Model:** qwen2.5-coder:72b (ollama)
- **Priority:** High
- **Department:** Web3
- **CrewAI:** ✅
#### 27. **DeFi Analyst**
- **ID:** `agent-defi-analyst`
- **Role:** DeFi Protocol Analyst
- **Model:** deepseek-r1:70b (42 GB)
- **Priority:** High
- **Department:** Web3
- **CrewAI:** ✅
#### 28. **Tokenomics Expert**
- **ID:** `agent-tokenomics-expert`
- **Role:** Tokenomics Design & Analysis
- **Model:** deepseek-r1:70b (42 GB)
- **Priority:** Medium
- **Department:** Web3
- **CrewAI:** ✅
#### 29. **NFT Specialist**
- **ID:** `agent-nft-specialist`
- **Role:** NFT Development & Strategy
- **Model:** qwen2.5-coder:72b (ollama)
- **Priority:** Medium
- **Department:** Web3
- **CrewAI:** ✅
#### 30. **DAO Governance**
- **ID:** `agent-dao-governance`
- **Role:** DAO Governance & Voting
- **Model:** deepseek-r1:70b (42 GB)
- **Priority:** High
- **Department:** Web3
- **CrewAI:** ✅
---
### 🔐 Security Overwatch Crew (5 агентів + CrewAI) — CISO Team
#### 31. **Shadelock** — CISO
- **ID:** `agent-shadelock`
- **Role:** Security Auditor
- **Model:** qwen2.5-coder:72b (ollama)
- **Priority:** High
- **Department:** Security
- **CrewAI:** ✅
#### 32. **Exor**
- **ID:** `agent-exor`
- **Role:** Threat Analyst
- **Model:** deepseek-r1:70b (42 GB)
- **Priority:** High
- **Department:** Security
- **CrewAI:** ✅
#### 33. **Penetration Tester**
- **ID:** `agent-penetration-tester`
- **Role:** Penetration Testing & Vulnerability Assessment
- **Model:** qwen2.5-coder:72b (ollama)
- **Priority:** High
- **Department:** Security
- **CrewAI:** ✅
#### 34. **Security Monitor**
- **ID:** `agent-security-monitor`
- **Role:** Security Monitoring & Incident Detection
- **Model:** deepseek-r1:70b (42 GB)
- **Priority:** High
- **Department:** Security
- **CrewAI:** ✅
#### 35. **Incident Responder**
- **ID:** `agent-incident-responder`
- **Role:** Incident Response & Recovery
- **Model:** deepseek-r1:70b (42 GB)
- **Priority:** High
- **Department:** Security
- **CrewAI:** ✅
---
### 🕵️ Crypto Forensics Crew (2 агенти + CrewAI)
#### 36. **Shadelock (Forensics)**
- **ID:** `agent-shadelock-forensics`
- **Role:** Blockchain Forensics
- **Model:** qwen2.5-coder:72b (ollama)
- **Priority:** High
- **Department:** Crypto Forensics
- **CrewAI:** ✅
#### 37. **Exor (Forensics)**
- **ID:** `agent-exor-forensics`
- **Role:** Crypto Investigator
- **Model:** deepseek-r1:70b (42 GB)
- **Priority:** High
- **Department:** Crypto Forensics
- **CrewAI:** ✅
---
### 👁️ Vision Crew (4 агенти + CrewAI) — **ПОТРЕБУЄ ВІДНОВЛЕННЯ МОДЕЛІ**
#### 38. **Iris**
- **ID:** `agent-iris`
- **Role:** Image Analyzer
- **Model:** qwen2-vl:32b ❌ **МОДЕЛЬ ВІДСУТНЯ**
- **Priority:** High
- **Department:** Vision
- **CrewAI:** ✅
- **Статус:** ⚠️ Потребує vision-модель
#### 39. **Lumen**
- **ID:** `agent-lumen`
- **Role:** Visual Content Creator
- **Model:** qwen2-vl:32b ❌ **МОДЕЛЬ ВІДСУТНЯ**
- **Priority:** High
- **Department:** Vision
- **CrewAI:** ✅
- **Статус:** ⚠️ Потребує vision-модель
#### 40. **Spectra**
- **ID:** `agent-spectra`
- **Role:** Multimodal Processor
- **Model:** qwen3-vl:latest ❌ **МОДЕЛЬ ВИДАЛЕНА**
- **Priority:** High
- **Department:** Vision
- **CrewAI:** ✅
- **Статус:** ❌ Модель була видалена з git
#### 41. **Video Analyzer**
- **ID:** `agent-video-analyzer`
- **Role:** Video Analysis & Processing
- **Model:** qwen2-vl:32b ❌ **МОДЕЛЬ ВІДСУТНЯ**
- **Priority:** Medium
- **Department:** Vision
- **CrewAI:** ✅
- **Статус:** ⚠️ Потребує vision-модель
---
### 🔬 R&D Lab Agents (6 агентів + Sofia)
#### 42. **ProtoMind**
- **ID:** `agent-protomind`
- **Role:** Experimental Architect
- **Model:** deepseek-r1:70b (42 GB)
- **Priority:** High
- **Workspace:** r_and_d_lab
- **Department:** R&D
#### 43. **LabForge**
- **ID:** `agent-labforge`
- **Role:** R&D Agent Builder
- **Model:** qwen2.5-coder:32b (19 GB)
- **Priority:** High
- **Workspace:** r_and_d_lab
- **Department:** R&D
#### 44. **TestPilot**
- **ID:** `agent-testpilot`
- **Role:** Experimental Tester
- **Model:** mistral-nemo:12b (7.1 GB)
- **Priority:** Medium
- **Workspace:** r_and_d_lab
- **Department:** R&D
#### 45. **ModelScout**
- **ID:** `agent-modelscout`
- **Role:** New Models Explorer
- **Model:** gemma2:27b (15 GB)
- **Priority:** Medium
- **Workspace:** r_and_d_lab
- **Department:** R&D
#### 46. **BreakPoint**
- **ID:** `agent-breakpoint`
- **Role:** Red-team Developer
- **Model:** deepseek-coder:33b (18 GB)
- **Priority:** High
- **Workspace:** r_and_d_lab
- **Department:** R&D
#### 47. **GrowCell**
- **ID:** `agent-growcell`
- **Role:** AI Evolution Agent
- **Model:** phi3:latest (2.2 GB)
- **Priority:** Medium
- **Workspace:** r_and_d_lab
- **Department:** R&D
---
### 🧠 Memory & Knowledge Team (3 агенти)
#### 48. **Somnia**
- **ID:** `agent-somnia`
- **Role:** Subconscious Memory
- **Model:** qwen2.5:7b
- **Priority:** High
- **Department:** Memory
- **Статус:** ✅ Active
#### 49. **Memory Manager**
- **ID:** `agent-memory-manager`
- **Role:** Memory Management & Indexing
- **Model:** gemma2:2b
- **Priority:** High
- **Department:** Memory
- **Статус:** ✅ Active
#### 50. **Knowledge Indexer**
- **ID:** `agent-knowledge-indexer`
- **Role:** Knowledge Base Indexing
- **Model:** phi3:latest (2.2 GB)
- **Priority:** Medium
- **Department:** Memory
- **Статус:** ✅ Active
---
## 📊 Підсумок по департаментам
| Департамент | Кількість | CrewAI | Статус |
|-------------|-----------|--------|--------|
| **Leadership** | 4 | ❌ | ✅ Активні |
| **System** | 6 | ❌ | ✅ Активні |
| **Engineering** | 5 | ✅ | ✅ Активні |
| **Marketing** | 6 | ✅ | ✅ Активні |
| **Finance** | 4 | ✅ | ✅ Активні |
| **Web3** | 5 | ✅ | ✅ Активні |
| **Security** | 5 | ✅ | ✅ Активні |
| **Crypto Forensics** | 2 | ✅ | ✅ Активні |
| **Vision** | 4 | ✅ | ⚠️ **Немає моделей** |
| **R&D** | 6 | Частково | ✅ Активні |
| **Memory** | 3 | ❌ | ✅ Активні |
| **ВСЬОГО** | **50** | **38** | **46 OK / 4 Blocked** |
---
## ⚠️ КРИТИЧНА ПРОБЛЕМА: Vision Crew
### 4 агенти ЗАБЛОКОВАНІ через відсутність vision-моделей:
1. **Iris** — Image Analyzer
2. **Lumen** — Visual Content Creator
3. **Spectra** — Multimodal Processor
4. **Video Analyzer** — Video Analysis
**Потрібні моделі:**
- `qwen2-vl:32b` (для Iris, Lumen, Video Analyzer)
- `qwen3-vl:latest` (для Spectra) — **БУЛА ВИДАЛЕНА з git**
**Рішення:**
```bash
# Варіант 1: LLaVA (швидко, 13 GB)
ollama pull llava:13b
# Варіант 2: Qwen2-VL (19 GB)
ollama pull qwen2-vl:32b
# Варіант 3: Відновити Qwen3-VL з HuggingFace (130 GB)
huggingface-cli download Qwen/Qwen3-VL-32B-Instruct
```
---
## 🎯 ПЛАН РОЗШИРЕННЯ ДО 108 АГЕНТІВ
### Що вже є: 50 агентів
### Що планується додати: +58 агентів
#### 1. **HR & Recruitment Team** (8 агентів)
- HR Manager
- Recruiter
- Onboarding Specialist
- Training Coordinator
- Performance Analyst
- Culture Ambassador
- Benefits Administrator
- Employee Relations
#### 2. **Legal & Compliance Team** (6 агентів)
- General Counsel
- Contract Specialist
- Regulatory Compliance
- IP Attorney
- Risk Manager
- Legal Research
#### 3. **Operations Team** (8 агентів)
- Operations Manager
- Process Optimizer
- Vendor Manager
- Procurement Specialist
- Quality Assurance
- Logistics Coordinator
- Facilities Manager
- Supply Chain Analyst
#### 4. **Product Team** (8 агентів)
- Product Manager
- Product Designer
- UX Researcher
- Feature Analyst
- Roadmap Planner
- User Advocate
- A/B Test Coordinator
- Launch Manager
#### 5. **Data Science Team** (6 агентів)
- Data Scientist
- ML Engineer
- Data Engineer
- Analytics Lead
- Visualization Specialist
- AI Researcher
#### 6. **Customer Success Team** (6 агентів)
- Customer Success Manager
- Support Specialist
- Onboarding Coach
- Feedback Analyst
- Retention Specialist
- Success Metrics Analyst
#### 7. **Sales & Business Development** (6 агентів)
- Sales Manager
- Account Executive
- BDR (Business Development Rep)
- Partnership Manager
- Sales Analyst
- Deal Closer
#### 8. **DevOps & Infrastructure** (6 агентів)
- DevOps Engineer
- Cloud Architect
- Database Administrator
- Network Engineer
- Backup & Recovery Specialist
- Monitoring & Alerting Engineer
#### 9. **Quality Assurance Team** (4 агенти)
- QA Lead
- Test Automation Engineer
- Manual Tester
- Performance Tester
---
## 🚀 НАСТУПНІ КРОКИ
### 1. ⚠️ Відновити Vision Crew (Priority: HIGH)
```bash
# Завантажити LLaVA для швидкого старту
ollama pull llava:13b
# Оновити конфіг агентів Vision Crew
# Змінити model: qwen2-vl:32b → llava:13b
```
### 2. ✅ Запустити STT/OCR для мультимодальності
```bash
cd ~/microdao-daarion/services/stt-service
docker-compose up -d
cd ~/microdao-daarion/services/ocr-service
docker-compose up -d
```
### 3. 🔗 Підключити Swapper до DAGI Router
```bash
# NODE1: Додати SWAPPER_URL до Router env
SWAPPER_URL=http://192.168.1.244:8890
# Перезапустити Router
docker restart dagi-router
```
### 4. 🏙️ Інтегрувати агентів у DAARION City
**Мапінг 50 агентів → кімнати міста:**
- Leadership Hall (4 агенти: Solarius, Sofia, PrimeSynth, Nexor)
- Engineering Lab (5 агентів: ByteForge, Vector, ChainWeaver, Cypher, Canvas)
- Marketing Hub (6 агентів: Roxy, Mira, Tempo, Harmony, Faye, Storytelling)
- Finance Office (4 агенти: Financial Analyst, Accountant, Budget Planner, Tax Advisor)
- Web3 District (5 агентів: Smart Contract Dev, DeFi Analyst, Tokenomics, NFT, DAO Governance)
- Security Bunker (5 агентів: Shadelock, Exor, Penetration Tester, Security Monitor, Incident Responder)
- Crypto Forensics Lab (2 агенти)
- Vision Studio (4 агенти) — **ПІСЛЯ ВІДНОВЛЕННЯ МОДЕЛЕЙ**
- R&D Lab (7 агентів: Sofia + 6 lab agents)
- Memory Vault (3 агенти: Somnia, Memory Manager, Knowledge Indexer)
### 5. 📈 Розширення до 108 агентів (Phase 2)
**Після успішної інтеграції перших 50:**
- Додати HR, Legal, Operations, Product, Data Science, Customer Success, Sales, DevOps, QA teams
- Створити нові кімнати/райони в місті
- Налаштувати CrewAI workflows для нових команд
---
## 📝 Документація
**Створено:**
- `docs/NODE2_AGENTS_FULL_INVENTORY.md` (цей файл)
- `docs/NODE2_DIAGNOSTIC_REPORT.md` (попередній звіт)
**Джерела:**
- `src/api/node2Agents.ts` (50 агентів)
- `NODE2-AGENTS-INVENTORY.md`
- `DAARION-CORE-NODE2-AGENTS.md`
- `site/node2/AGENTS_ARCHITECTURE/`
---
**Дата створення:** 27.11.2025
**Статус:** ✅ Інвентаризація завершена
**Наступний крок:** Відновлення Vision моделей + Інтеграція в City
---
*Документ створено під час повної діагностики агентів NODE2.*

View File

@@ -0,0 +1,283 @@
# 🔍 NODE2 Diagnostic Report — Post-Git-Cleanup
**Дата:** 27 листопада 2025
**Контекст:** Діагностика стану NODE2 після `git filter-repo` операції
---
## ✅ 1. Моделі — ВСІ ЗБЕРЕЖЕНІ (Ollama)
### 📦 8 моделей в Ollama (загалом ~118 GB):
| Модель | Розмір | Параметри | Тип | Статус |
|--------|--------|-----------|------|--------|
| **deepseek-r1:70b** | 42 GB | 70.6B | LLM (reasoning) | ✅ |
| **deepseek-coder:33b** | 18 GB | 33B | Code | ✅ |
| **qwen2.5-coder:32b** | 19 GB | 32.8B | Code | ✅ |
| **gemma2:27b** | 15 GB | 27.2B | LLM (reasoning) | ✅ |
| **mistral-nemo:12b** | 7.1 GB | 12.2B | LLM (reasoning) | ✅ |
| **gpt-oss:latest** | 13 GB | 20.9B | LLM (general) | ✅ |
| **starcoder2:3b** | 1.7 GB | 3B | Code | ✅ |
| **phi3:latest** | 2.2 GB | 3.8B | LLM (lightweight) | ✅ |
**Висновок:** Всі критичні LLM-моделі збережені! Swapper може працювати.
---
### ❌ Видалено з `models/` (не Ollama):
- **qwen3-vl-32b-instruct** (~130 GB) — vision-модель для мультимодальності
- 65.5 GB `.gguf` файл
- 14x5GB safetensors файлів
- **Призначення:** Vision AI (аналіз зображень, OCR, мультимодальність)
**Проблема:** Немає vision-моделей для мультимодальних запитів!
**Рішення:**
1. Завантажити `llava:13b` через Ollama (~13 GB)
2. АБО відновити Qwen3-VL з HuggingFace (якщо потрібен кастомний inference)
---
## ✅ 2. Swapper Service — ЗАПУЩЕНО
**Порт:** 8890
**Статус:** ✅ Healthy
**Конфігурація:** `swapper_config_node2.yaml`
**Мережа:** `dagi-network`
**Ollama URL:** `http://host.docker.internal:11434`
**Health Check:**
```json
{
"status": "healthy",
"service": "swapper-service",
"active_model": null,
"mode": "single-active"
}
```
**Активовані моделі:** 8 (всі доступні через Ollama)
---
## ✅ 3. DAGI Router — ПРАЦЮЄ
**Порт:** 9102
**Статус:** Up 4 days (healthy)
**Контейнер:** `dagi-router`
**Health Check:**
```bash
curl http://localhost:9102/health
# Status: OK
```
---
## ✅ 4. DAGI Stack — Частково ПРАЦЮЄ
### Запущені сервіси:
| Сервіс | Статус | Порт | Призначення |
|--------|--------|------|-------------|
| **dagi-router** | ✅ Up 4 days | 9102 | Маршрутизація агентів |
| **dagi-crewai** | ✅ Up 4 days | 8080 | 12 агентів в 4 workflows |
| **dagi-devtools** | ✅ Up 4 days | - | Dev утиліти |
| **dagi-rbac** | ✅ Up 4 days | 8083 | Права доступу |
| **dagi-gateway** | ✅ Up 4 days | 8081 | API Gateway |
| **dagi-postgres** | ✅ Up 4 days | 5432 | База даних |
| **dagi-web-search-service** | ⚠️ Unhealthy | 8897 | Web пошук |
---
### 🤖 12 CrewAI Агентів (4 Workflows):
#### 1. **Onboarding Workflow** (3 агенти)
- `welcomer` — вітання нових користувачів
- `role_assigner` — призначення ролей
- `guide` — навігація по системі
#### 2. **Code Review Workflow** (3 агенти)
- `reviewer` — перегляд коду
- `security_checker` — аналіз безпеки
- `performance_analyzer` — оптимізація
#### 3. **Proposal Review Workflow** (3 агенти)
- `legal_checker` — юридична перевірка
- `financial_analyzer` — фінансовий аналіз
- `impact_assessor` — оцінка впливу
#### 4. **Task Decomposition Workflow** (3 агенти)
- `planner` — планування задач
- `estimator` — оцінка складності
- `dependency_analyzer` — аналіз залежностей
**API:**
```bash
curl http://localhost:9010/workflow/list
# 4 workflows доступні
```
---
## ⚠️ 5. Мультимодальні сервіси — ЧАСТКОВО
### ✅ Працюють:
| Сервіс | Порт | Статус | Призначення |
|--------|------|--------|-------------|
| **Web Search** | 8897 | ✅ Healthy | DuckDuckGo + Google |
| **Vector DB (Qdrant)** | 6333 | ✅ Running | Векторний пошук |
| **Agent Cabinet** | 8898 | ✅ Healthy | Управління агентами |
| **MeiliSearch** | 7700 | ✅ Running | Текстовий пошук |
### ❌ НЕ працюють:
| Сервіс | Порт | Статус | Причина |
|--------|------|--------|---------|
| **STT Service** | 8895 | ❌ Not running | Не запущено |
| **OCR Service** | 8896 | ❌ Not running | Не запущено |
**Документація:** `COMPLETE-MULTIMODAL-ECOSYSTEM.md`
---
## 📊 6. Інфраструктура NODE2
### Ресурси:
- **CPU:** Apple M4 Max (40-core GPU)
- **RAM:** 64 GB
- **VRAM:** 48 GB (GPU)
- **Диск:** ~500 GB вільно (після cleanup)
### Docker мережа:
- `dagi-network` — всі DAGI сервіси
- Bridge для комунікації між контейнерами
### Ollama:
- **Версія:** Latest
- **URL:** http://localhost:11434
- **Models dir:** `/Users/apple/.ollama/models`
---
## 🎯 7. НАСТУПНІ КРОКИ
### A) **Відновити Vision-модель** (для мультимодальності)
**Варіант 1: LLaVA через Ollama** (ШВИДКО, ~13 GB)
```bash
ollama pull llava:13b
```
**Варіант 2: Qwen3-VL з HuggingFace** (ПОВІЛЬНО, ~130 GB)
```bash
# З HuggingFace Hub
huggingface-cli download Qwen/Qwen3-VL-32B-Instruct
```
**Рекомендація:** Почати з LLaVA (менше, швидше), потім за потреби Qwen3-VL.
---
### B) **Запустити STT/OCR сервіси**
```bash
# STT Service (Whisper)
cd ~/microdao-daarion/services/stt-service
docker-compose up -d
# OCR Service (Tesseract + EasyOCR)
cd ~/microdao-daarion/services/ocr-service
docker-compose up -d
```
**Документація:** `COMPLETE-MULTIMODAL-ECOSYSTEM.md` (рядки 139-180)
---
### C) **Підключити Swapper до DAGI Router**
1. Перевірити Router конфігурацію (`/opt/daarion/app/services/router/config.yaml`)
2. Додати `SWAPPER_URL` env var до Router:
```yaml
SWAPPER_URL: http://192.168.1.244:8890 # NODE2 IP
```
3. Перезапустити Router на NODE1:
```bash
ssh root@144.76.224.179
docker restart dagi-router
```
---
### D) **Інтегрувати CrewAI агентів у DAARION City**
**12 агентів → 12 кімнат** (або згрупувати по workflows):
- **Onboarding Hall** — 3 агенти
- **Code Review Lab** — 3 агенти
- **Governance Hall** — 3 агенти
- **Planning Room** — 3 агенти
**API Integration:**
```python
# city-service → dagi-crewai
POST http://localhost:9010/workflow/execute
{
"workflow": "onboarding",
"agent": "welcomer",
"input": {...}
}
```
---
### E) **Web3 Login + Token-gate** (Phase 4)
**Після всіх агентів**:
1. Metamask + SIWE v2
2. `has_DAARION_token` перевірка
3. Обмеження доступу до кімнат
4. Citizenship Pass
---
## 📝 8. Документація
**Основні файли:**
- `COMPLETE-MULTIMODAL-ECOSYSTEM.md` — повна мультимодальна архітектура
- `DEPLOY_STRATEGY_MULTIMODAL_MVP.md` — стратегія інтеграції
- `services/swapper-service/config/swapper_config_node2.yaml` — конфіг Swapper
- `ROUTER-MULTIMODAL-SUPPORT.md` — підтримка мультимодальності в Router
**Створено під час діагностики:**
- `docs/NODE2_DIAGNOSTIC_REPORT.md` (цей файл)
---
## ✅ 9. ПІДСУМОК
### Готово:
-**8 LLM-моделей збережені** в Ollama (включно з DeepSeek 70B)
-**Swapper Service запущено** на NODE2 (порт 8890)
-**DAGI Router працює** (порт 9102)
-**12 CrewAI агентів готові** до інтеграції
-**Web Search + Vector DB працюють**
### Потрібно:
- ⚠️ **Відновити vision-модель** (LLaVA або Qwen3-VL)
- ⚠️ **Запустити STT/OCR** (для voice/photo)
- ⚠️ **Підключити Swapper до Router** (NODE2 → NODE1)
- ⚠️ **Інтегрувати агентів у City** (12 агентів → кімнати)
---
**Діагностику виконано:** 27.11.2025
**Статус NODE2:** ✅ Готовий до інтеграції з DAARION MVP
**Блокерів:** Немає (все працює, потрібна лише конфігурація)
---
*Документ створено автоматично під час діагностики NODE2 після git cleanup операції.*

View File

@@ -0,0 +1,343 @@
# Node Profile Standard v1.0
**Date:** 2025-11-28
**Status:** Active
**Version:** 1.0.0
---
## Overview
Цей документ визначає стандартний профіль ноди в мережі DAARION/DAGI. Кожна нода описується набором модулів, які можуть бути присутні або відсутні залежно від ролі та конфігурації.
---
## Node Identity
Кожна нода має унікальну ідентичність:
```json
{
"node_id": "node-1-hetzner-gex44",
"name": "Hetzner GEX44 Production",
"roles": ["core", "gateway", "matrix", "agents", "gpu"],
"type": "production",
"ip_address": "144.76.224.179",
"local_ip": null,
"hostname": "gateway.daarion.city",
"status": "online",
"version": "1.0.0"
}
```
---
## Standard Modules
### 1. Core Modules (Required)
| Module ID | Description | Required |
|-----------|-------------|----------|
| `core.node` | Node identity, roles, version, uptime | ✅ Yes |
| `core.health` | Basic health check endpoint | ✅ Yes |
### 2. Infrastructure Modules
| Module ID | Description | Port | Required |
|-----------|-------------|------|----------|
| `infra.metrics` | CPU, RAM, Disk, GPU metrics | - | Recommended |
| `infra.postgres` | PostgreSQL database | 5432 | Optional |
| `infra.redis` | Redis cache | 6379 | Optional |
| `infra.nats` | NATS message broker | 4222 | Optional |
| `infra.qdrant` | Qdrant vector DB | 6333 | Optional |
| `infra.neo4j` | Neo4j graph DB | 7474/7687 | Optional |
### 3. AI/ML Modules
| Module ID | Description | Port | Required |
|-----------|-------------|------|----------|
| `ai.ollama` | Ollama LLM runtime | 11434 | Optional |
| `ai.swapper` | Model swapper service | 8890 | Optional |
| `ai.router` | DAGI Router | 9102 | Optional |
| `ai.stt` | Speech-to-Text | 8895 | Optional |
| `ai.tts` | Text-to-Speech | 5002 | Optional |
| `ai.vision` | Vision/Image processing | - | Optional |
| `ai.ocr` | OCR service | 8896 | Optional |
| `ai.image_gen` | Image generation | 9600 | Optional |
| `ai.rag` | RAG service | - | Optional |
| `ai.memory` | Memory service | 8001 | Optional |
| `ai.crewai` | CrewAI orchestration | 9010 | Optional |
### 4. DAARION Stack Modules
| Module ID | Description | Port | Required |
|-----------|-------------|------|----------|
| `daarion.web` | Frontend (Next.js) | 3000 | Optional |
| `daarion.city` | City Service | 7001 | Optional |
| `daarion.agents` | Agents Service | 7002 | Optional |
| `daarion.auth` | Auth Service | 7020 | Optional |
| `daarion.secondme` | Second Me Service | 7003 | Optional |
| `daarion.microdao` | MicroDAO Service | 7015 | Optional |
### 5. Matrix Modules
| Module ID | Description | Port | Required |
|-----------|-------------|------|----------|
| `matrix.synapse` | Matrix Synapse homeserver | 8008/8018 | Optional |
| `matrix.element` | Element Web client | 8088 | Optional |
| `matrix.gateway` | Matrix Gateway | 7025 | Optional |
| `matrix.presence` | Presence Aggregator | 8085 | Optional |
### 6. DAGI Infrastructure Modules
| Module ID | Description | Port | Required |
|-----------|-------------|------|----------|
| `dagi.gateway` | DAGI Gateway | 9300 | Optional |
| `dagi.rbac` | RBAC Service | 9200 | Optional |
| `dagi.devtools` | DevTools | 8008 | Optional |
| `dagi.registry` | Node Registry | 9205 | Optional |
| `dagi.parser` | Parser Service | 9400 | Optional |
### 7. Monitoring Modules
| Module ID | Description | Port | Required |
|-----------|-------------|------|----------|
| `monitoring.prometheus` | Prometheus | 9090 | Optional |
| `monitoring.grafana` | Grafana | 3001 | Optional |
| `monitoring.loki` | Loki logs | - | Optional |
### 8. External Integrations
| Module ID | Description | Port | Required |
|-----------|-------------|------|----------|
| `integration.telegram` | Telegram Bot API | 8081 | Optional |
| `integration.web_search` | Web Search Service | 8897 | Optional |
---
## Module Status Values
| Status | Description |
|--------|-------------|
| `up` | Module is running and healthy |
| `down` | Module is not running |
| `degraded` | Module is running but with issues |
| `unknown` | Status cannot be determined |
| `not_installed` | Module is not installed on this node |
---
## Node Profiles
### Production Node (NODE1)
```json
{
"node_id": "node-1-hetzner-gex44",
"name": "Hetzner GEX44 Production",
"roles": ["core", "gateway", "matrix", "agents", "gpu"],
"type": "production",
"gpu": {
"name": "NVIDIA RTX 4000 SFF Ada",
"vram_gb": 20
},
"modules": [
{"id": "core.node", "status": "up"},
{"id": "core.health", "status": "up"},
{"id": "infra.metrics", "status": "up"},
{"id": "infra.postgres", "status": "up", "port": 5432},
{"id": "infra.redis", "status": "up", "port": 6379},
{"id": "infra.nats", "status": "up", "port": 4222},
{"id": "infra.qdrant", "status": "up", "port": 6333},
{"id": "infra.neo4j", "status": "up", "port": 7474},
{"id": "ai.ollama", "status": "up", "port": 11434, "models": ["mistral:7b"]},
{"id": "ai.swapper", "status": "degraded", "port": 8890},
{"id": "ai.router", "status": "up", "port": 9102},
{"id": "ai.stt", "status": "degraded", "port": 8895},
{"id": "ai.tts", "status": "up", "port": 5002},
{"id": "ai.ocr", "status": "degraded", "port": 8896},
{"id": "ai.image_gen", "status": "degraded", "port": 9600},
{"id": "ai.memory", "status": "up", "port": 8001},
{"id": "ai.crewai", "status": "up", "port": 9010},
{"id": "daarion.web", "status": "up", "port": 3000},
{"id": "daarion.city", "status": "up", "port": 7001},
{"id": "daarion.agents", "status": "up", "port": 7002},
{"id": "daarion.auth", "status": "up", "port": 7020},
{"id": "daarion.secondme", "status": "up", "port": 7003},
{"id": "daarion.microdao", "status": "up", "port": 7015},
{"id": "matrix.synapse", "status": "up", "port": 8018},
{"id": "matrix.element", "status": "up", "port": 8088},
{"id": "matrix.gateway", "status": "up", "port": 7025},
{"id": "matrix.presence", "status": "up", "port": 8085},
{"id": "dagi.gateway", "status": "up", "port": 9300},
{"id": "dagi.rbac", "status": "up", "port": 9200},
{"id": "dagi.devtools", "status": "up", "port": 8008},
{"id": "dagi.registry", "status": "up", "port": 9205},
{"id": "dagi.parser", "status": "up", "port": 9400},
{"id": "monitoring.prometheus", "status": "up", "port": 9090},
{"id": "integration.telegram", "status": "up", "port": 8081}
]
}
```
### Development Node (NODE2)
```json
{
"node_id": "node-2-macbook-m4max",
"name": "MacBook Pro M4 Max",
"roles": ["development", "gpu", "ai_runtime"],
"type": "development",
"gpu": {
"name": "Apple M4 Max",
"unified_memory_gb": 128
},
"modules": [
{"id": "core.node", "status": "up"},
{"id": "core.health", "status": "up"},
{"id": "infra.postgres", "status": "up", "port": 5432},
{"id": "infra.qdrant", "status": "up", "port": 6333},
{"id": "ai.ollama", "status": "up", "port": 11434, "models": [
"deepseek-r1:70b", "deepseek-coder:33b", "qwen2.5-coder:32b",
"gemma2:27b", "mistral-nemo:12b", "llava:13b", "phi3:latest",
"starcoder2:3b", "gpt-oss:latest"
]},
{"id": "ai.swapper", "status": "up", "port": 8890},
{"id": "ai.router", "status": "up", "port": 9102},
{"id": "ai.stt", "status": "up", "port": 8895},
{"id": "ai.ocr", "status": "up", "port": 8896},
{"id": "dagi.gateway", "status": "up", "port": 9300},
{"id": "dagi.rbac", "status": "up", "port": 9200},
{"id": "dagi.devtools", "status": "up", "port": 8008},
{"id": "dagi.crewai", "status": "up", "port": 9010},
{"id": "integration.web_search", "status": "up", "port": 8897}
]
}
```
---
## Service Inventory
### NODE1 Services (35 containers)
| Service | Image | Port | Status | Stack |
|---------|-------|------|--------|-------|
| dagi-router | dagi-router:latest | 9102 | up | DAGI |
| daarion-agents-service | daarion-agents-service:latest | 7002 | up | DAARION |
| daarion-web | daarion-web:latest | 3000 | up | DAARION |
| matrix-presence-aggregator | matrix-presence-aggregator:latest | 8085 | up | DAARION |
| daarion-city-service | microdao-daarion-city-service:latest | 7001 | up | DAARION |
| dagi-node-registry | microdao-daarion-node-registry:latest | 9205 | up | DAGI |
| daarion-matrix-gateway | daarion-matrix-gateway:latest | 7025 | up | DAARION |
| daarion-auth | daarion-auth | 7020 | up | DAARION |
| daarion-synapse | matrixdotorg/synapse:latest | 8018 | up | Matrix |
| daarion-element | vectorim/element-web:latest | 8088 | up | Matrix |
| daarion-secondme-service | daarion-secondme-service:latest | 7003 | up | DAARION |
| daarion-microdao-service | daarion-microdao-service:latest | 7015 | up | DAARION |
| daarion-redis | redis:7-alpine | 6379 | up | Infra |
| dagi-gateway | microdao-daarion-gateway | 9300 | up | DAGI |
| dagi-rbac | microdao-daarion-rbac | 9200 | up | DAGI |
| dagi-devtools | microdao-daarion-devtools | 8008 | up | DAGI |
| dagi-crewai | microdao-daarion-crewai | 9010 | up | DAGI |
| dagi-stt-service | stt-service-stt-service | 8895 | degraded | DAGI |
| telegram-gateway | telegram-infrastructure-telegram-gateway | 8000 | up | Integration |
| dagi-tts | daarion-tts:latest | 5002 | up | DAGI |
| dagi-swapper-service | microdao-daarion-swapper-service | 8890 | degraded | DAGI |
| dagi-vector-db-service | vector-db-service-vector-db-service | - | restarting | DAGI |
| dagi-ocr-service | ocr-service-ocr-service | 8896 | degraded | DAGI |
| dagi-web-search-service | web-search-service-web-search-service | 8897 | degraded | DAGI |
| dagi-postgres | pgvector/pgvector:pg15 | 5432 | up | Infra |
| dagi-memory-service | microdao-daarion-memory-service | 8001 | up | DAGI |
| dagi-neo4j-exporter | microdao-daarion-neo4j-exporter | 9108 | up | Monitoring |
| dagi-neo4j | neo4j:5.15-community | 7474/7687 | up | Infra |
| dagi-nats | nats:2-alpine | 4222 | up | Infra |
| dagi-image-gen | microdao-daarion-image-gen-service | 9600 | degraded | DAGI |
| dagi-rag-service | microdao-daarion-rag-service | - | restarting | DAGI |
| dagi-qdrant | qdrant/qdrant:v1.7.4 | 6333 | up | Infra |
| dagi-prometheus | prom/prometheus:latest | 9090 | up | Monitoring |
| dagi-parser-service | microdao-daarion-parser-service | 9400 | up | DAGI |
| telegram-bot-api | aiogram/telegram-bot-api:latest | 8081 | up | Integration |
**Systemd Services:**
- `ollama.service` — Ollama LLM runtime (port 11434)
- `k3s.service` — Lightweight Kubernetes
- `nvidia-persistenced.service` — NVIDIA GPU daemon
**GPU:** NVIDIA RTX 4000 SFF Ada Generation (20GB VRAM)
### NODE2 Services (13 containers)
| Service | Image | Port | Status | Stack |
|---------|-------|------|--------|-------|
| ocr-service | ocr-service:latest | 8896 | up | DAGI |
| dagi-stt-service | stt-service-stt-service | 8895 | up | DAGI |
| swapper-service | swapper-service:latest | 8890 | up | DAGI |
| dagi-web-search-service | web-search-service-web-search-service | 8897 | degraded | DAGI |
| dagi-postgres | postgres:15-alpine | 5432 | up | Infra |
| dagi-gateway | microdao-daarion-gateway | 9300 | up | DAGI |
| dagi-router | microdao-daarion-router | 9102 | up | DAGI |
| dagi-crewai | microdao-daarion-crewai | 9010 | up | DAGI |
| dagi-devtools | microdao-daarion-devtools | 8008 | up | DAGI |
| dagi-rbac | microdao-daarion-rbac | 9200 | up | DAGI |
| jupyter-lab | jupyter/datascience-notebook:latest | 8888 | up | Dev |
| qdrant-vector-db | qdrant/qdrant:latest | 6333 | up | Infra |
| meilisearch-search | getmeili/meilisearch:v1.11 | 7700 | up | Infra |
**Ollama Models (9):**
- deepseek-r1:70b (42 GB)
- deepseek-coder:33b (18 GB)
- qwen2.5-coder:32b (19 GB)
- gemma2:27b (15 GB)
- mistral-nemo:12b (7 GB)
- llava:13b (8 GB)
- phi3:latest (2 GB)
- starcoder2:3b (2 GB)
- gpt-oss:latest (13 GB)
**GPU:** Apple M4 Max (128GB Unified Memory)
---
## API Contract
### Node Dashboard Endpoint
`GET /node/dashboard`
Returns aggregated dashboard data for the current node.
```json
{
"node": {
"id": "node-1-hetzner-gex44",
"name": "Hetzner GEX44 Production",
"status": "online",
"uptime_seconds": 604800,
"version": "1.0.0"
},
"resources": {
"cpu_usage_pct": 37.5,
"ram": {"total_gb": 64, "used_gb": 43},
"gpu": {"name": "NVIDIA RTX 4000 SFF Ada", "vram_gb": 20, "used_gb": 18},
"disk": {"total_gb": 4000, "used_gb": 2200}
},
"modules": [
{"id": "ai.router", "status": "up", "port": 9102, "latency_ms": 23},
{"id": "ai.swapper", "status": "up", "port": 8890, "active_model": "mistral:7b"},
...
],
"agents": {
"total": 54,
"online": 53,
"by_kind": {"vision": 4, "developer": 5, ...}
}
}
```
---
## Changelog
- **v1.0.0** (2025-11-28): Initial standard based on NODE1/NODE2 audit

View 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

View 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

View 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
```

View File

@@ -0,0 +1,111 @@
-- Migration 014: Agent-City Integration
-- Date: 2025-11-27
-- Description: Adds tables and columns for agent-city integration
-- ============================================================================
-- 1. Create districts table
-- ============================================================================
CREATE TABLE IF NOT EXISTS city_districts (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
description TEXT,
color TEXT DEFAULT '#6366F1',
icon TEXT DEFAULT 'building',
room_slug TEXT,
created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP
);
-- ============================================================================
-- 2. Add new columns to agents table (if not exists)
-- ============================================================================
ALTER TABLE agents ADD COLUMN IF NOT EXISTS node_id TEXT;
ALTER TABLE agents ADD COLUMN IF NOT EXISTS district TEXT;
ALTER TABLE agents ADD COLUMN IF NOT EXISTS primary_room_slug TEXT;
ALTER TABLE agents ADD COLUMN IF NOT EXISTS model TEXT;
ALTER TABLE agents ADD COLUMN IF NOT EXISTS priority TEXT DEFAULT 'medium';
ALTER TABLE agents ADD COLUMN IF NOT EXISTS role TEXT;
ALTER TABLE agents ADD COLUMN IF NOT EXISTS is_active BOOLEAN DEFAULT true;
ALTER TABLE agents ADD COLUMN IF NOT EXISTS color_hint TEXT;
-- Rename 'id' to 'agent_id' style (keep both for compatibility)
-- Note: The table uses 'id' as primary key, we'll use it as agent_id in code
-- ============================================================================
-- 3. Create agent_room_bindings table
-- ============================================================================
CREATE TABLE IF NOT EXISTS agent_room_bindings (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
agent_id TEXT NOT NULL,
room_id TEXT NOT NULL,
role TEXT NOT NULL DEFAULT 'resident',
is_primary BOOLEAN NOT NULL DEFAULT true,
created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
UNIQUE(agent_id, room_id)
);
CREATE INDEX IF NOT EXISTS idx_agent_room_bindings_agent
ON agent_room_bindings(agent_id);
CREATE INDEX IF NOT EXISTS idx_agent_room_bindings_room
ON agent_room_bindings(room_id);
-- ============================================================================
-- 4. Insert default districts
-- ============================================================================
INSERT INTO city_districts (id, name, description, color, icon, room_slug) VALUES
('leadership', 'Leadership Hall', 'Центр управління DAARION DAO — CEO, CTO, COO', '#F59E0B', 'crown', 'leadership-hall'),
('system', 'System Control Center', 'Системні агенти та моніторинг інфраструктури', '#6366F1', 'cpu', 'system-control'),
('engineering', 'Engineering Lab', 'Розробка, код, архітектура', '#10B981', 'code', 'engineering-lab'),
('marketing', 'Marketing Hub', 'SMM, контент, комʼюніті', '#EC4899', 'megaphone', 'marketing-hub'),
('finance', 'Finance Office', 'Фінанси, бухгалтерія, бюджетування', '#14B8A6', 'banknotes', 'finance-office'),
('web3', 'Web3 District', 'Blockchain, DeFi, DAO governance', '#8B5CF6', 'cube', 'web3-district'),
('security', 'Security Bunker', 'Безпека, аудит, криптофорензика', '#EF4444', 'shield', 'security-bunker'),
('vision', 'Vision Studio', 'Мультимодальність, аналіз зображень', '#22D3EE', 'eye', 'vision-studio'),
('rnd', 'R&D Laboratory', 'Дослідження, експерименти, нові моделі', '#A855F7', 'beaker', 'rnd-lab'),
('memory', 'Memory Vault', 'Памʼять, знання, індексація', '#06B6D4', 'database', 'memory-vault')
ON CONFLICT (id) DO UPDATE SET
name = EXCLUDED.name,
description = EXCLUDED.description,
color = EXCLUDED.color,
icon = EXCLUDED.icon,
room_slug = EXCLUDED.room_slug,
updated_at = CURRENT_TIMESTAMP;
-- ============================================================================
-- 5. Create city rooms for each district (if not exists)
-- ============================================================================
INSERT INTO city_rooms (id, slug, name, description, is_default, room_type, color) VALUES
('room_leadership_hall', 'leadership-hall', 'Leadership Hall', 'Центр управління DAARION DAO — CEO, CTO, COO', false, 'district', '#F59E0B'),
('room_system_control', 'system-control', 'System Control', 'Системні агенти та моніторинг інфраструктури', false, 'district', '#6366F1'),
('room_engineering_lab', 'engineering-lab', 'Engineering Lab', 'Розробка, код, архітектура', false, 'district', '#10B981'),
('room_marketing_hub', 'marketing-hub', 'Marketing Hub', 'SMM, контент, комʼюніті', false, 'district', '#EC4899'),
('room_finance_office', 'finance-office', 'Finance Office', 'Фінанси, бухгалтерія, бюджетування', false, 'district', '#14B8A6'),
('room_web3_district', 'web3-district', 'Web3 District', 'Blockchain, DeFi, DAO governance', false, 'district', '#8B5CF6'),
('room_security_bunker', 'security-bunker', 'Security Bunker', 'Безпека, аудит, криптофорензика', false, 'district', '#EF4444'),
('room_vision_studio', 'vision-studio', 'Vision Studio', 'Мультимодальність, аналіз зображень', false, 'district', '#22D3EE'),
('room_rnd_lab', 'rnd-lab', 'R&D Laboratory', 'Дослідження, експерименти, нові моделі', false, 'district', '#A855F7'),
('room_memory_vault', 'memory-vault', 'Memory Vault', 'Памʼять, знання, індексація', false, 'district', '#06B6D4')
ON CONFLICT (slug) DO UPDATE SET
name = EXCLUDED.name,
description = EXCLUDED.description,
room_type = EXCLUDED.room_type,
color = EXCLUDED.color;
-- ============================================================================
-- 6. Add map coordinates for new district rooms
-- ============================================================================
UPDATE city_rooms SET map_x = 2, map_y = 0, map_w = 2, map_h = 1 WHERE slug = 'leadership-hall';
UPDATE city_rooms SET map_x = 0, map_y = 1, map_w = 1, map_h = 1 WHERE slug = 'system-control';
UPDATE city_rooms SET map_x = 1, map_y = 1, map_w = 1, map_h = 1 WHERE slug = 'engineering-lab';
UPDATE city_rooms SET map_x = 2, map_y = 1, map_w = 1, map_h = 1 WHERE slug = 'marketing-hub';
UPDATE city_rooms SET map_x = 3, map_y = 1, map_w = 1, map_h = 1 WHERE slug = 'finance-office';
UPDATE city_rooms SET map_x = 0, map_y = 2, map_w = 1, map_h = 1 WHERE slug = 'web3-district';
UPDATE city_rooms SET map_x = 1, map_y = 2, map_w = 1, map_h = 1 WHERE slug = 'security-bunker';
UPDATE city_rooms SET map_x = 2, map_y = 2, map_w = 1, map_h = 1 WHERE slug = 'vision-studio';
UPDATE city_rooms SET map_x = 3, map_y = 2, map_w = 1, map_h = 1 WHERE slug = 'rnd-lab';
UPDATE city_rooms SET map_x = 0, map_y = 3, map_w = 2, map_h = 1 WHERE slug = 'memory-vault';
-- Done!
SELECT 'Migration 014 completed: Agent-City Integration' as result;

View File

@@ -0,0 +1,75 @@
-- Migration 015: Add modules to Node Registry
-- Date: 2025-11-28
-- Description: Adds modules JSONB column for node profile standard v1
-- ============================================================================
-- 1. Add modules column to nodes table
-- ============================================================================
ALTER TABLE nodes ADD COLUMN IF NOT EXISTS modules JSONB DEFAULT '[]';
ALTER TABLE nodes ADD COLUMN IF NOT EXISTS gpu JSONB DEFAULT NULL;
ALTER TABLE nodes ADD COLUMN IF NOT EXISTS roles TEXT[] DEFAULT '{}';
ALTER TABLE nodes ADD COLUMN IF NOT EXISTS version TEXT DEFAULT '1.0.0';
-- ============================================================================
-- 2. Update NODE1 with full profile
-- ============================================================================
UPDATE nodes SET
roles = ARRAY['core', 'gateway', 'matrix', 'agents', 'gpu'],
gpu = '{"name": "NVIDIA RTX 4000 SFF Ada Generation", "vram_gb": 20}'::jsonb,
modules = '[
{"id": "core.node", "status": "up"},
{"id": "core.health", "status": "up"},
{"id": "infra.postgres", "status": "up", "port": 5432},
{"id": "infra.redis", "status": "up", "port": 6379},
{"id": "infra.nats", "status": "up", "port": 4222},
{"id": "infra.qdrant", "status": "up", "port": 6333},
{"id": "infra.neo4j", "status": "up", "port": 7474},
{"id": "ai.ollama", "status": "up", "port": 11434},
{"id": "ai.swapper", "status": "degraded", "port": 8890},
{"id": "ai.router", "status": "up", "port": 9102},
{"id": "ai.stt", "status": "degraded", "port": 8895},
{"id": "ai.tts", "status": "up", "port": 5002},
{"id": "ai.ocr", "status": "degraded", "port": 8896},
{"id": "ai.memory", "status": "up", "port": 8001},
{"id": "ai.crewai", "status": "up", "port": 9010},
{"id": "daarion.web", "status": "up", "port": 3000},
{"id": "daarion.city", "status": "up", "port": 7001},
{"id": "daarion.agents", "status": "up", "port": 7002},
{"id": "daarion.auth", "status": "up", "port": 7020},
{"id": "matrix.synapse", "status": "up", "port": 8018},
{"id": "matrix.element", "status": "up", "port": 8088},
{"id": "matrix.gateway", "status": "up", "port": 7025},
{"id": "matrix.presence", "status": "up", "port": 8085},
{"id": "dagi.gateway", "status": "up", "port": 9300},
{"id": "dagi.rbac", "status": "up", "port": 9200},
{"id": "dagi.registry", "status": "up", "port": 9205},
{"id": "monitoring.prometheus", "status": "up", "port": 9090}
]'::jsonb
WHERE node_id = 'node-1-hetzner-gex44';
-- ============================================================================
-- 3. Update NODE2 with full profile
-- ============================================================================
UPDATE nodes SET
roles = ARRAY['development', 'gpu', 'ai_runtime'],
gpu = '{"name": "Apple M4 Max", "unified_memory_gb": 128}'::jsonb,
modules = '[
{"id": "core.node", "status": "up"},
{"id": "core.health", "status": "up"},
{"id": "infra.postgres", "status": "up", "port": 5432},
{"id": "infra.qdrant", "status": "up", "port": 6333},
{"id": "ai.ollama", "status": "up", "port": 11434, "models": ["deepseek-r1:70b", "deepseek-coder:33b", "qwen2.5-coder:32b", "gemma2:27b", "mistral-nemo:12b", "llava:13b"]},
{"id": "ai.swapper", "status": "up", "port": 8890},
{"id": "ai.router", "status": "up", "port": 9102},
{"id": "ai.stt", "status": "up", "port": 8895},
{"id": "ai.ocr", "status": "up", "port": 8896},
{"id": "dagi.gateway", "status": "up", "port": 9300},
{"id": "dagi.rbac", "status": "up", "port": 9200},
{"id": "dagi.crewai", "status": "up", "port": 9010},
{"id": "integration.web_search", "status": "up", "port": 8897}
]'::jsonb
WHERE node_id = 'node-2-macbook-m4max';
-- Done!
SELECT 'Migration 015 completed: Node Registry modules added' as result;

View File

@@ -0,0 +1,74 @@
-- Migration 016: Agent System Prompts
-- Таблиця для зберігання системних промтів агентів з версіонуванням
-- Частина DAIS (Decentralized AI Agent Standard)
-- ============================================================================
-- agent_prompts — системні промти агентів
-- ============================================================================
CREATE TABLE IF NOT EXISTS agent_prompts (
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
agent_id text NOT NULL,
kind text NOT NULL CHECK (kind IN ('core', 'safety', 'governance', 'tools')),
content text NOT NULL,
version integer NOT NULL DEFAULT 1,
created_at timestamptz NOT NULL DEFAULT now(),
created_by text,
note text, -- коментар/причина зміни
is_active boolean NOT NULL DEFAULT true
);
-- Індекси для швидкого пошуку
CREATE INDEX IF NOT EXISTS idx_agent_prompts_agent_kind
ON agent_prompts(agent_id, kind, is_active);
CREATE INDEX IF NOT EXISTS idx_agent_prompts_agent_created_at
ON agent_prompts(agent_id, created_at DESC);
CREATE INDEX IF NOT EXISTS idx_agent_prompts_active
ON agent_prompts(is_active) WHERE is_active = true;
-- ============================================================================
-- Початкові дані: базові промти для існуючих агентів
-- ============================================================================
-- Вставляємо дефолтні core промти для кількох ключових агентів
INSERT INTO agent_prompts (agent_id, kind, content, version, created_by, note)
SELECT
id,
'core',
CASE
WHEN kind = 'orchestrator' THEN
'You are ' || display_name || ', a senior orchestrator agent in DAARION City. Your role is to coordinate complex multi-agent workflows, delegate tasks efficiently, and ensure smooth collaboration between agents. Maintain professional yet approachable communication.'
WHEN kind = 'coordinator' THEN
'You are ' || display_name || ', a coordinator agent in DAARION City. Your role is to manage workflows, track progress, and ensure timely delivery of tasks. Be organized, proactive, and helpful.'
WHEN kind = 'developer' THEN
'You are ' || display_name || ', a developer agent in DAARION City. Your expertise is in writing clean, efficient code. Explain technical concepts clearly and provide practical solutions.'
WHEN kind = 'vision' THEN
'You are ' || display_name || ', a vision specialist agent in DAARION City. You analyze images, videos, and visual content. Provide detailed, accurate observations and insights.'
WHEN kind = 'research' THEN
'You are ' || display_name || ', a research agent in DAARION City. You gather, analyze, and synthesize information from various sources. Be thorough, objective, and cite your sources.'
WHEN kind = 'finance' THEN
'You are ' || display_name || ', a finance specialist agent in DAARION City. You handle financial analysis, budgeting, and crypto/DeFi operations. Be precise with numbers and transparent about risks.'
WHEN kind = 'security' THEN
'You are ' || display_name || ', a security agent in DAARION City. You monitor for threats, audit systems, and ensure safety protocols. Be vigilant, thorough, and prioritize security.'
WHEN kind = 'marketing' THEN
'You are ' || display_name || ', a marketing agent in DAARION City. You create engaging content, manage campaigns, and build community. Be creative, data-driven, and audience-focused.'
ELSE
'You are ' || display_name || ', an AI agent in DAARION City. You are part of a decentralized autonomous organization. Be helpful, accurate, and collaborative with other agents and humans.'
END,
1,
'SYSTEM',
'Initial system prompt from migration 016'
FROM agents
WHERE is_active = true OR is_active IS NULL
ON CONFLICT DO NOTHING;
-- Коментар
COMMENT ON TABLE agent_prompts IS 'Системні промти агентів з версіонуванням. Частина DAIS v1.';
COMMENT ON COLUMN agent_prompts.kind IS 'Тип промту: core (основна особистість), safety (обмеження), governance (правила DAO), tools (використання інструментів)';
COMMENT ON COLUMN agent_prompts.version IS 'Версія промту, інкрементується при кожній зміні';
COMMENT ON COLUMN agent_prompts.is_active IS 'Тільки один промт кожного типу може бути активним для агента';
SELECT 'Migration 016 completed: agent_prompts table created' AS result;

View File

@@ -0,0 +1,15 @@
-- Migration 017: Add VPN IP to nodes
-- Підтримка WireGuard VPN для міжнодової комунікації
-- Додаємо поле vpn_ip
ALTER TABLE nodes ADD COLUMN IF NOT EXISTS vpn_ip inet;
-- Оновлюємо існуючі ноди
UPDATE nodes SET vpn_ip = '10.42.0.1' WHERE node_id = 'node-1-hetzner-gex44';
UPDATE nodes SET vpn_ip = '10.42.0.2' WHERE node_id = 'node-2-macbook-m4max';
-- Коментар
COMMENT ON COLUMN nodes.vpn_ip IS 'WireGuard VPN IP address for inter-node communication';
SELECT 'Migration 017 completed: VPN IP added to nodes' AS result;

View File

@@ -0,0 +1,92 @@
-- Migration 018: Agent Public Profile
-- Публічний профіль агента для каталогу громадян DAARION City
-- ============================================================================
-- Додаємо поля публічного профілю до таблиці agents
-- ============================================================================
ALTER TABLE agents
ADD COLUMN IF NOT EXISTS is_public boolean NOT NULL DEFAULT false,
ADD COLUMN IF NOT EXISTS public_slug text,
ADD COLUMN IF NOT EXISTS public_title text,
ADD COLUMN IF NOT EXISTS public_tagline text,
ADD COLUMN IF NOT EXISTS public_skills text[],
ADD COLUMN IF NOT EXISTS public_district text,
ADD COLUMN IF NOT EXISTS public_primary_room_slug text;
-- Унікальний індекс для slug (тільки для non-null значень)
CREATE UNIQUE INDEX IF NOT EXISTS idx_agents_public_slug_unique
ON agents(public_slug)
WHERE public_slug IS NOT NULL;
-- Індекс для швидкого пошуку публічних агентів
CREATE INDEX IF NOT EXISTS idx_agents_is_public
ON agents(is_public)
WHERE is_public = true;
-- ============================================================================
-- Початкові дані: зробимо кількох ключових агентів публічними
-- ============================================================================
-- DAARION Core Team (публічні громадяни)
UPDATE agents SET
is_public = true,
public_slug = 'iris',
public_title = 'Multimodal Vision Curator',
public_tagline = 'Я дивлюся на світ і знаходжу суть у кожному кадрі.',
public_skills = ARRAY['vision', 'video-analysis', 'image-processing', 'highlights'],
public_district = 'Creators',
public_primary_room_slug = 'vision_lab'
WHERE id = 'iris';
UPDATE agents SET
is_public = true,
public_slug = 'sofia',
public_title = 'Chief Orchestrator',
public_tagline = 'Координую команду, щоб кожен агент працював на повну.',
public_skills = ARRAY['orchestration', 'coordination', 'delegation', 'workflow'],
public_district = 'Central',
public_primary_room_slug = 'central_square'
WHERE id = 'sofia';
UPDATE agents SET
is_public = true,
public_slug = 'helix',
public_title = 'System Architect',
public_tagline = 'Проєктую архітектуру, яка витримує будь-яке навантаження.',
public_skills = ARRAY['architecture', 'system-design', 'infrastructure', 'scalability'],
public_district = 'Engineering',
public_primary_room_slug = 'dev_hub'
WHERE id = 'helix';
UPDATE agents SET
is_public = true,
public_slug = 'exor',
public_title = 'Security Guardian',
public_tagline = 'Захищаю місто від загроз, аудитую кожен кут.',
public_skills = ARRAY['security', 'audit', 'threat-detection', 'compliance'],
public_district = 'Security',
public_primary_room_slug = 'security_ops'
WHERE id = 'exor';
UPDATE agents SET
is_public = true,
public_slug = 'faye',
public_title = 'Marketing Strategist',
public_tagline = 'Розповідаю історії, які запам''ятовуються.',
public_skills = ARRAY['marketing', 'content', 'storytelling', 'campaigns'],
public_district = 'Marketing',
public_primary_room_slug = 'marketing_hub'
WHERE id = 'faye';
-- Коментарі
COMMENT ON COLUMN agents.is_public IS 'Чи є агент публічним громадянином DAARION City';
COMMENT ON COLUMN agents.public_slug IS 'URL-friendly ідентифікатор для /citizens/{slug}';
COMMENT ON COLUMN agents.public_title IS 'Публічна назва/титул агента';
COMMENT ON COLUMN agents.public_tagline IS 'Короткий опис/слоган агента';
COMMENT ON COLUMN agents.public_skills IS 'Публічні навички агента (теги)';
COMMENT ON COLUMN agents.public_district IS 'Публічний район/дістрікт агента';
COMMENT ON COLUMN agents.public_primary_room_slug IS 'Основна кімната агента';
SELECT 'Migration 018 completed: Agent public profile fields added' AS result;

View File

@@ -0,0 +1,87 @@
-- 1. MicroDAOs Table
CREATE TABLE IF NOT EXISTS microdaos (
id text PRIMARY KEY,
slug text UNIQUE NOT NULL,
name text NOT NULL,
description text,
logo_url text,
owner_agent_id text, -- References agents(id) deferred
created_at timestamptz DEFAULT now(),
updated_at timestamptz DEFAULT now()
);
-- 2. Agent Matrix Config
CREATE TABLE IF NOT EXISTS agent_matrix_config (
agent_id text PRIMARY KEY REFERENCES agents(id) ON DELETE CASCADE,
matrix_user_id text,
matrix_access_token text,
primary_room_id text,
is_enabled boolean DEFAULT true,
updated_at timestamptz DEFAULT now()
);
-- 3. MicroDAO Members
CREATE TABLE IF NOT EXISTS microdao_members (
microdao_id text REFERENCES microdaos(id) ON DELETE CASCADE,
agent_id text REFERENCES agents(id) ON DELETE CASCADE,
role text DEFAULT 'member',
joined_at timestamptz DEFAULT now(),
PRIMARY KEY (microdao_id, agent_id)
);
-- 4. Insert Orchestrator Agents (Upsert)
INSERT INTO agents (id, display_name, kind, node_id, status, is_active, is_public) VALUES
('daarwizz', 'DAARWIZZ', 'orchestrator', 'NODE1', 'online', true, true),
('helion', 'Helion', 'orchestrator', 'NODE1', 'online', true, true),
('greenfood', 'GreenFood Bot', 'orchestrator', 'NODE1', 'online', true, true),
('druid', 'Druid', 'orchestrator', 'NODE1', 'online', true, true),
('clan', 'Clan Bot', 'orchestrator', 'NODE1', 'online', true, true),
('eonarch', 'Eonarch', 'orchestrator', 'NODE1', 'online', true, true),
('nutra', 'Nutra Bot', 'orchestrator', 'NODE1', 'online', true, true),
('soul', 'Soul Bot', 'orchestrator', 'NODE1', 'online', true, true),
('yaromir', 'Yaromir', 'orchestrator', 'NODE1', 'online', true, true)
ON CONFLICT (id) DO UPDATE SET
node_id = EXCLUDED.node_id,
kind = EXCLUDED.kind,
is_public = EXCLUDED.is_public;
-- 5. Insert MicroDAOs
INSERT INTO microdaos (id, name, slug, owner_agent_id, description, logo_url) VALUES
('dao_daarion', 'DAARION DAO', 'daarion', 'daarwizz', 'Main ecosystem DAO', '/assets/logos/daarion.png'),
('dao_energy', 'Energy Union', 'energy-union', 'helion', 'Energy optimization & sustainability', '/assets/logos/helion.png'),
('dao_greenfood', 'GreenFood DAO', 'greenfood', 'greenfood', 'Sustainable food systems', '/assets/logos/greenfood.png'),
('dao_druid', 'Druid Circle', 'druid', 'druid', 'Nature & wisdom preservation', '/assets/logos/druid.png'),
('dao_clan', 'Clan Network', 'clan', 'clan', 'Community & social bonding', '/assets/logos/clan.png'),
('dao_eonarch', 'Eonarch DAO', 'eonarch', 'eonarch', 'Long-term architectural planning', '/assets/logos/eonarch.png'),
('dao_nutra', 'Nutra Health', 'nutra', 'nutra', 'Health & nutrition monitoring', '/assets/logos/nutra.png'),
('dao_soul', 'Soul Protocol', 'soul', 'soul', 'Identity & reputation systems', '/assets/logos/soul.png'),
('dao_yaromir', 'Yaromir Tribe', 'yaromir', 'yaromir', 'Cultural heritage & storytelling', '/assets/logos/yaromir.png')
ON CONFLICT (id) DO UPDATE SET
owner_agent_id = EXCLUDED.owner_agent_id;
-- 6. Insert Matrix Configs (Placeholders)
INSERT INTO agent_matrix_config (agent_id, matrix_user_id) VALUES
('daarwizz', '@daarwizz:daarion.city'),
('helion', '@helion:daarion.city'),
('greenfood', '@greenfood:daarion.city'),
('druid', '@druid:daarion.city'),
('clan', '@clan:daarion.city'),
('eonarch', '@eonarch:daarion.city'),
('nutra', '@nutra:daarion.city'),
('soul', '@soul:daarion.city'),
('yaromir', '@yaromir:daarion.city')
ON CONFLICT (agent_id) DO NOTHING;
-- 7. Link Owners to DAOs
INSERT INTO microdao_members (microdao_id, agent_id, role) VALUES
('dao_daarion', 'daarwizz', 'owner'),
('dao_energy', 'helion', 'owner'),
('dao_greenfood', 'greenfood', 'owner'),
('dao_druid', 'druid', 'owner'),
('dao_clan', 'clan', 'owner'),
('dao_eonarch', 'eonarch', 'owner'),
('dao_nutra', 'nutra', 'owner'),
('dao_soul', 'soul', 'owner'),
('dao_yaromir', 'yaromir', 'owner')
ON CONFLICT DO NOTHING;