docs(platform): add policy configs, runbooks, ops scripts and platform documentation

Config policies (16 files): alert_routing, architecture_pressure, backlog,
cost_weights, data_governance, incident_escalation, incident_intelligence,
network_allowlist, nodes_registry, observability_sources, rbac_tools_matrix,
release_gate, risk_attribution, risk_policy, slo_policy, tool_limits, tools_rollout

Ops (22 files): Caddyfile, calendar compose, grafana voice dashboard,
deployments/incidents logs, runbooks for alerts/audit/backlog/incidents/sofiia/voice,
cron jobs, scripts (alert_triage, audit_cleanup, migrate_*, governance, schedule),
task_registry, voice alerts/ha/latency/policy

Docs (30+ files): HUMANIZED_STEPAN v2.7-v3 changelogs and runbooks,
NODA1/NODA2 status and setup, audit index and traces, backlog, incident,
supervisor, tools, voice, opencode, release, risk, aistalk, spacebot

Made-with: Cursor
This commit is contained in:
Apple
2026-03-03 07:14:53 -08:00
parent 129e4ea1fc
commit 67225a39fa
102 changed files with 20060 additions and 0 deletions

368
docs/NODA2-MEMORY-SETUP.md Normal file
View File

@@ -0,0 +1,368 @@
# 🧠 Модуль Пам'яті для Агента Sofiia на NODA2
## 📊 Архітектура Пам'яті DAARION
### Трирівнева система пам'яті:
```
┌─────────────────────────────────────────────────────────────┐
│ SOFIIA MEMORY STACK │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Qdrant │ │ PostgreSQL │ │ Neo4j │ │
│ │ (Vector) │ │ (Relational) │ │ (Graph) │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ │ │ │ │
│ └──────────────────┼──────────────────┘ │
│ │ │
│ ┌────────▼────────┐ │
│ │ Memory Service │ │
│ │ (:8000) │ │
│ └─────────────────┘ │
│ │ │
│ ┌────────▼────────┐ │
│ │ Sofiia Agent │ │
│ │ (OpenClaw) │ │
│ └─────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
```
---
## 1. Векторна Пам'ять (Qdrant)
### Колекції для Sofiia:
| Колекція | Призначення | Dimension |
|----------|-------------|-----------|
| `sofiia_messages` | Історія повідомлень діалогів | 1024 |
| `sofiia_docs` | Документи та knowledge base | 1024 |
| `sofiia_memory_items` | Long-term memory items | 1024 |
| `sofiia_user_context` | Контекст користувачів | 1024 |
**Embedding model:** Cohere embed-multilingual-v3.0 (1024 dimensions)
### Що зберігається:
- Повідомлення користувачів та відповіді Sofiia
- Документація проектів
- Контекстні дані про користувачів
- Long-term memories (важливі факти, рішення)
---
## 2. Реляційна Пам'ять (PostgreSQL)
### Таблиця `user_facts`:
| Поле | Тип | Опис |
|------|-----|------|
| `fact_id` | UUID | Унікальний ID |
| `user_id` | String | ID користувача |
| `team_id` | String | ID команди/DAO |
| `agent_id` | String | **"sofiia"** |
| `fact_key` | String | Ключ факту |
| `fact_value` | Text | Текстове значення |
| `fact_value_json` | JSONB | Структуровані дані |
### Приклади фактів:
- `name`: "Олександр"
- `preferences`: {"language": "uk", "style": "formal"}
- `chat_event:2026-02-22`: "Обговорювали архітектуру DAARION"
---
## 3. Графова Пам'ять (Neo4j)
### Node types:
- `Agent` - Sofiia
- `User` - Користувачі
- `Channel` - Telegram, Slack, etc.
- `Message` - Повідомлення
- `Topic` - Теми розмов
- `Project` - Проєкти (DAARION, NODA2, etc.)
### Relationships:
```
(User)-[:SENT]->(Message)
(Sofiia)-[:RESPONDED]->(Message)
(Message)-[:IN_CHANNEL]->(Telegram)
(Message)-[:ABOUT]->(Architecture)
(Message)-[:REFERENCES]->(Project:DAARION)
```
### Що дає:
- Зв'язки між користувачами та темами
- Історія розмов по проектах
- Виявлення залежностей
---
## 🎯 Варіанти налаштування на NODA2:
### Варіант A: Локальна пам'ять (ПОВНА НЕЗАЛЕЖНІСТЬ) ✨
**Переваги:**
- ✅ Повна ізоляція від NODA1
- ✅ Швидкий доступ (локально)
- ✅ Можна тестувати без впливу на прод
- ✅ Dev-середовище
**Недоліки:**
-Не бачить пам'ять з NODA1
- ❌ Потрібно більше ресурсів
- ❌ Окремі дані для dev
**Що потрібно:**
```yaml
services:
# Qdrant для векторної пам'яті
qdrant-node2:
image: qdrant/qdrant:latest
container_name: dagi-qdrant-node2
ports:
- "6333:6333"
- "6334:6334"
volumes:
- ./data/qdrant-node2:/qdrant/storage
environment:
- QDRANT__SERVICE__HOST=0.0.0.0
# PostgreSQL для реляційної пам'яті
postgres-node2:
image: postgres:16
container_name: dagi-postgres-node2
ports:
- "5433:5432"
environment:
- POSTGRES_DB=daarion_memory
- POSTGRES_USER=daarion
- POSTGRES_PASSWORD=daarion_secret
volumes:
- ./data/postgres-node2:/var/lib/postgresql/data
# Neo4j для графової пам'яті (опціонально)
neo4j-node2:
image: neo4j:5.15
container_name: dagi-neo4j-node2
ports:
- "7474:7474"
- "7687:7687"
environment:
- NEO4J_AUTH=neo4j/daarion_secret
volumes:
- ./data/neo4j-node2:/data
# Memory Service
memory-service-node2:
build: ./services/memory-service
container_name: dagi-memory-service-node2
ports:
- "8000:8000"
environment:
- QDRANT_HOST=qdrant-node2
- QDRANT_PORT=6333
- DATABASE_URL=postgresql://daarion:daarion_secret@postgres-node2:5432/daarion_memory
- NEO4J_URI=bolt://neo4j-node2:7687
- COHERE_API_KEY=${COHERE_API_KEY}
depends_on:
- qdrant-node2
- postgres-node2
```
---
### Варіант B: Підключення до NODA1 (РЕПЛІКА) 🔄
**Переваги:**
- ✅ Бачить пам'ять з NODA1
- ✅ Економія ресурсів
- ✅ Read-replica для аналітики
- ✅ Реальний прод-контекст
**Недоліки:**
- ❌ Залежність від NODA1
- ❌ Мережева затримка
-Не можна писати (read-only)
**Що потрібно:**
```yaml
services:
# Memory Service підключається до NODA1
memory-service-node2:
build: ./services/memory-service
container_name: dagi-memory-service-node2
ports:
- "8000:8000"
environment:
# Підключення до NODA1 Qdrant
- QDRANT_HOST=144.76.224.179
- QDRANT_PORT=6333
# Підключення до NODA1 PostgreSQL (read replica)
- DATABASE_URL=postgresql://daarion_reader:***@144.76.224.179:5432/daarion_memory
# Підключення до NODA1 Neo4j (read replica)
- NEO4J_URI=bolt://144.76.224.179:7687
- READ_ONLY_MODE=true
- COHERE_API_KEY=${COHERE_API_KEY}
```
---
### Варіант C: Гібридний (РЕКОМЕНДОВАНО) ⭐
**Переваги:**
- ✅ Локальна пам'ять для dev/test
- ✅ Можливість підключитись до NODA1 за потреби
- ✅ Гнучкість
- ✅ Повна ізоляція для експериментів
**Архітектура:**
```
NODA2 (Development)
├── Local Memory Stack
│ ├── Qdrant (:6333)
│ ├── PostgreSQL (:5433)
│ └── Memory Service (:8000)
└── Optional: Remote NODA1 Access
└── Environment variable switch
```
---
## 🚀 Рекомендація: Почати з Варіанту C
### Крок 1: Створити docker-compose.memory-node2.yml
```bash
cd /Users/apple/github-projects/microdao-daarion
```
Файл: `docker-compose.memory-node2.yml`
### Крок 2: Отримати Cohere API Key
Для embedding моделі потрібен ключ:
1. Зайти на https://cohere.ai
2. Зареєструватись
3. Отримати API Key
### Крок 3: Запустити Memory Stack
```bash
# Додати Cohere API Key в .env
echo "COHERE_API_KEY=your_cohere_key_here" >> .env
# Запустити
docker-compose -f docker-compose.memory-node2.yml up -d
# Перевірити
docker ps | grep -E "memory|qdrant|postgres"
```
### Крок 4: Налаштувати Sofiia для використання пам'яті
В OpenClaw конфігурації додати:
```json
{
"agents": {
"list": [
{
"id": "sofiia",
"model": {
"primary": "xai/grok-4-1-fast-reasoning"
},
"memory": {
"enabled": true,
"serviceUrl": "http://localhost:8000",
"collections": {
"messages": "sofiia_messages",
"docs": "sofiia_docs",
"memory": "sofiia_memory_items",
"context": "sofiia_user_context"
}
}
}
]
}
}
```
---
## 📝 Приклад використання пам'яті Sofiia:
### Збереження повідомлення:
```python
await memory_client.save_memory(
agent_id="sofiia",
user_id="telegram:123456",
channel_id="telegram:sofiia",
content="User asked about DAARION architecture",
role="user",
metadata={
"topic": "architecture",
"intent": "question",
"project": "DAARION"
}
)
```
### Отримання контексту:
```python
context = await memory_client.get_context(
agent_id="sofiia",
user_id="telegram:123456",
query="архітектура",
limit=10
)
```
### Збереження факту:
```python
await memory_client.save_fact(
agent_id="sofiia",
user_id="telegram:123456",
fact_key="preferences",
fact_value_json={
"language": "uk",
"style": "technical",
"projects": ["DAARION", "NODA2"]
}
)
```
---
## 📊 Статистика пам'яті (для моніторингу):
```sql
-- Кількість фактів для Sofiia
SELECT COUNT(*) FROM user_facts WHERE agent_id = 'sofiia';
-- Останні повідомлення
SELECT * FROM user_facts
WHERE agent_id = 'sofiia'
ORDER BY created_at DESC
LIMIT 10;
```
---
## 🎯 Наступні кроки:
1. ✅ Ознайомитись з архітектурою пам'яті (готово!)
2. ⏳ Отримати Cohere API Key
3. ⏳ Створити docker-compose.memory-node2.yml
4. ⏳ Запустити Memory Stack
5. ⏳ Налаштувати OpenClaw для підключення
6. ⏳ Протестувати збереження та пошук
---
**Який варіант цікавить вас більше? Можу допомогти з реалізацією! 🚀**