Compare commits
84 Commits
72e74635cf
...
codex/docs
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
381e4bfe5e | ||
|
|
df19527b48 | ||
|
|
e0a98c837f | ||
|
|
94f74ef111 | ||
|
|
8b84bd8df6 | ||
|
|
aa853f802f | ||
|
|
5ab7b6ddc1 | ||
|
|
0f5327d07e | ||
|
|
24b7468126 | ||
|
|
cca620bbbd | ||
|
|
7640621ade | ||
|
|
4b1dacfdcd | ||
|
|
74c8f8576b | ||
|
|
cc94bb500c | ||
|
|
02548bd58d | ||
|
|
12d389880a | ||
|
|
9afd56da16 | ||
|
|
9a4b3d2f7a | ||
|
|
fa65baf5dd | ||
|
|
85ff0b8669 | ||
|
|
cd7121fd81 | ||
|
|
ddba4483ff | ||
|
|
54bf8dc521 | ||
|
|
4c92b1dded | ||
|
|
3c11d243c5 | ||
|
|
1721b60401 | ||
|
|
45a8bc676e | ||
|
|
79d3257f14 | ||
|
|
8ea99372c0 | ||
|
|
83decf0fc8 | ||
|
|
4098649c59 | ||
|
|
168cb76d42 | ||
|
|
9eba663695 | ||
|
|
40c75258ea | ||
|
|
186aac899b | ||
|
|
d17e2c4fd2 | ||
|
|
9bad0e4bd4 | ||
|
|
43951c1881 | ||
|
|
3a90c57944 | ||
|
|
60ce006284 | ||
|
|
1f21dd52b4 | ||
|
|
197ba8eacb | ||
|
|
5b01335b3a | ||
|
|
b0aedcc052 | ||
|
|
5a12b08106 | ||
|
|
2d1e6a0c50 | ||
|
|
2ccfecea44 | ||
|
|
bf39cb4bee | ||
|
|
0e0a0fab97 | ||
|
|
e595cdc0a5 | ||
|
|
6ac7c8f4b5 | ||
|
|
949b0a608e | ||
|
|
842704d7e7 | ||
|
|
1de120ddfc | ||
|
|
d5bd8748a1 | ||
|
|
1fbd3009b8 | ||
|
|
8789487037 | ||
|
|
6e0096eea7 | ||
|
|
db4107ba4a | ||
|
|
162f3567df | ||
|
|
8d2ae25cdc | ||
|
|
e9bbcde418 | ||
|
|
a4aa1c42aa | ||
|
|
f2a450c159 | ||
|
|
d84a83f639 | ||
|
|
fa07356205 | ||
|
|
16574d1db2 | ||
|
|
210c6426b7 | ||
|
|
083a622817 | ||
|
|
e6221fef67 | ||
|
|
de7533f97e | ||
|
|
9c9f4fa182 | ||
|
|
831f361f0f | ||
|
|
1a00cd4413 | ||
|
|
08dcfea960 | ||
|
|
b722e28338 | ||
|
|
5f2fd7905f | ||
|
|
3146e74ce8 | ||
|
|
fc2d86bd1b | ||
|
|
8ba71f240f | ||
|
|
f82404dc36 | ||
|
|
0d8582d552 | ||
|
|
c1cc5591f6 | ||
|
|
3eb628e4ff |
36
.github/workflows/docs-lint.yml
vendored
Normal file
36
.github/workflows/docs-lint.yml
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
name: docs-lint
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
paths:
|
||||
- "**/*.md"
|
||||
- ".markdownlint.yml"
|
||||
- ".markdownlintignore"
|
||||
- ".github/workflows/docs-lint.yml"
|
||||
- "scripts/docs/docs_lint.sh"
|
||||
- "docs/standards/lint_scope.txt"
|
||||
pull_request:
|
||||
branches: [main]
|
||||
paths:
|
||||
- "**/*.md"
|
||||
- ".markdownlint.yml"
|
||||
- ".markdownlintignore"
|
||||
- ".github/workflows/docs-lint.yml"
|
||||
- "scripts/docs/docs_lint.sh"
|
||||
- "docs/standards/lint_scope.txt"
|
||||
|
||||
jobs:
|
||||
markdownlint:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: "20"
|
||||
|
||||
- name: Lint markdown
|
||||
run: bash scripts/docs/docs_lint.sh
|
||||
17
.markdownlint.yml
Normal file
17
.markdownlint.yml
Normal file
@@ -0,0 +1,17 @@
|
||||
default: true
|
||||
|
||||
MD013:
|
||||
line_length: 180
|
||||
heading_line_length: 180
|
||||
code_block_line_length: 220
|
||||
|
||||
MD024:
|
||||
allow_different_nesting: true
|
||||
|
||||
MD033: false
|
||||
MD041: false
|
||||
MD022: false
|
||||
MD029: false
|
||||
MD031: false
|
||||
MD032: false
|
||||
MD060: false
|
||||
6
.markdownlintignore
Normal file
6
.markdownlintignore
Normal file
@@ -0,0 +1,6 @@
|
||||
.worktrees/
|
||||
node_modules/
|
||||
site/
|
||||
rollback_backups/
|
||||
docs/consolidation/_node1_runtime_docs/
|
||||
**/*.bak_*
|
||||
71
NODA1-SAFE-DEPLOY.md
Normal file
71
NODA1-SAFE-DEPLOY.md
Normal file
@@ -0,0 +1,71 @@
|
||||
# NODA1 Safe Deploy (Canonical Workflow)
|
||||
|
||||
**Goal:** синхронізувати ноут ↔ GitHub ↔ NODA1 ↔ реальний Docker-стек так, щоб не ламати працюючий прод і не плодити "невидимі" гілки.
|
||||
|
||||
**Canonical source of truth:** GitHub `origin/main`.
|
||||
|
||||
---
|
||||
|
||||
## Ролі директорій на NODA1
|
||||
|
||||
- `/opt/microdao-daarion` — legacy checkout (може мати роз'їхавшу історію). Не використовувати для `git pull/rebase`, якщо є конфлікти.
|
||||
- `/opt/microdao-daarion.repo` — canonical deployment checkout (git worktree на `origin/main`). Деплой робимо тільки звідси.
|
||||
|
||||
---
|
||||
|
||||
## Golden rules
|
||||
|
||||
1. Жодних ручних правок коду/доків на NODA1 (крім аварійного hotfix з наступним PR).
|
||||
2. Жодних гілок/розробки на NODA1.
|
||||
3. Docker compose завжди з однаковим project name: `-p microdao-daarion`.
|
||||
4. Secrets не комітяться; для них тримати `*.example` + короткий опис розміщення.
|
||||
|
||||
---
|
||||
|
||||
## Safe sync (NODA1)
|
||||
|
||||
```bash
|
||||
ssh root@144.76.224.179
|
||||
|
||||
cd /opt/microdao-daarion
|
||||
git fetch origin
|
||||
|
||||
cd /opt/microdao-daarion.repo
|
||||
git pull --ff-only
|
||||
git rev-parse --short HEAD
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Safe deploy одного сервісу (мінімальний ризик)
|
||||
|
||||
### Router
|
||||
|
||||
```bash
|
||||
cd /opt/microdao-daarion.repo
|
||||
|
||||
docker compose -p microdao-daarion -f docker-compose.node1.yml build router
|
||||
docker compose -p microdao-daarion -f docker-compose.node1.yml up -d --no-deps --force-recreate router
|
||||
|
||||
curl -fsS http://127.0.0.1:9102/health
|
||||
```
|
||||
|
||||
### Gateway
|
||||
|
||||
```bash
|
||||
cd /opt/microdao-daarion.repo
|
||||
|
||||
docker compose -p microdao-daarion -f docker-compose.node1.yml build gateway
|
||||
docker compose -p microdao-daarion -f docker-compose.node1.yml up -d --no-deps --force-recreate gateway
|
||||
|
||||
curl -fsS http://127.0.0.1:9300/health
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Runtime snapshot
|
||||
|
||||
```bash
|
||||
cd /opt/microdao-daarion.repo
|
||||
./scripts/node1/snapshot_node1.sh > "/opt/backups/node1_snapshot_$(date +%Y%m%d-%H%M%S).txt"
|
||||
```
|
||||
@@ -5,6 +5,14 @@
|
||||
|
||||
---
|
||||
|
||||
## Session Start (Canonical)
|
||||
|
||||
- Старт кожної нової сесії: `docs/SESSION_STARTER.md`
|
||||
- Консолідація та маркування старих/нових/фактичних доків: `docs/consolidation/README.md`
|
||||
- Керований список ключових документів і статусів: `docs/consolidation/docs_registry_curated.csv`
|
||||
|
||||
---
|
||||
|
||||
## 🗂️ Де що лежить
|
||||
|
||||
### Основні репозиторії
|
||||
@@ -26,6 +34,19 @@
|
||||
| **Project Root** | `/opt/microdao-daarion/` |
|
||||
| **Docker Network** | `dagi-network` |
|
||||
|
||||
|
||||
### NODA1 Sync Policy (Repo ↔ Runtime)
|
||||
|
||||
**Канонічна правда:** GitHub `origin/main`.
|
||||
|
||||
На NODA1:
|
||||
- `/opt/microdao-daarion.repo` — canonical deployment checkout (git worktree на `origin/main`), деплой робимо тільки звідси.
|
||||
- `/opt/microdao-daarion` — legacy checkout; не використовувати для `git pull/rebase`, якщо історія роз'їхалась.
|
||||
|
||||
**Safe deploy runbook:** `NODA1-SAFE-DEPLOY.md`
|
||||
|
||||
**Runtime snapshot:** `scripts/node1/snapshot_node1.sh`
|
||||
|
||||
---
|
||||
|
||||
## 🎯 AGENT REGISTRY (Single Source of Truth)
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
### 2. **Neo4j** 📊
|
||||
- **Статус**: ✅ Працює (ports 7474, 7687)
|
||||
- **Що робити**: Підключити до Router для knowledge graphs
|
||||
- **UI**: http://144.76.224.179:7474
|
||||
- **UI**: [http://144.76.224.179:7474](http://144.76.224.179:7474)
|
||||
- **Час**: 45 хв
|
||||
- **Пріоритет**: 🟡 СЕРЕДНІЙ
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
|
||||
### 5. **Memory Service** 🧠
|
||||
- **Проблема**: PostgreSQL не має `pgvector` extension
|
||||
- **Рішення**:
|
||||
- **Рішення**:
|
||||
1. Встановити pgvector в PostgreSQL container
|
||||
2. АБО використовувати Memory з Dify/Neo4j
|
||||
- **Час**: 1 год
|
||||
@@ -50,7 +50,7 @@
|
||||
|
||||
### 6. **RAG Service** 📚
|
||||
- **Проблема**: Haystack 2.x API changes
|
||||
- **Рішення**:
|
||||
- **Рішення**:
|
||||
1. Виправити imports
|
||||
2. АБО використовувати Dify RAG (через Weaviate)
|
||||
- **Час**: 1-2 год
|
||||
@@ -263,17 +263,17 @@ receivers:
|
||||
|
||||
## 📊 Пріоритизований Timeline
|
||||
|
||||
### Сьогодні (3-4 год):
|
||||
### Сьогодні (3-4 год)
|
||||
1. ✅ Дослідити Dify (1 год) - може має все що треба!
|
||||
2. ✅ Інтегрувати CrewAI (30 хв) - web search для агентів
|
||||
3. ✅ Vision через Dify або OpenAI (30 хв) - описи зображень
|
||||
|
||||
### Завтра (2-3 год):
|
||||
### Завтра (2-3 год)
|
||||
4. ✅ Підключити Neo4j (45 хв) - knowledge graphs
|
||||
5. ✅ Streaming TTS (1 год) - якісний голос
|
||||
6. ✅ Grafana Alerts (30 хв) - моніторинг
|
||||
|
||||
### Опційно (якщо потрібно):
|
||||
### Опційно (якщо потрібно)
|
||||
7. ⚠️ Виправити RAG Service (2 год) - АБО використовувати Dify RAG
|
||||
8. ⚠️ Виправити Memory Service (1 год) - АБО використовувати Neo4j
|
||||
9. ⚠️ Запустити Milvus (15 хв) - тільки якщо Qdrant недостатньо
|
||||
@@ -282,19 +282,19 @@ receivers:
|
||||
|
||||
## 💡 Ключові висновки
|
||||
|
||||
### Що маємо:
|
||||
### Що маємо
|
||||
- ✅ **35 Docker контейнерів** - величезна інфраструктура!
|
||||
- ✅ **Dify AI Platform** - може замінити багато сервісів
|
||||
- ✅ **CrewAI** - готовий до використання
|
||||
- ✅ **Neo4j** - готовий до використання
|
||||
- ✅ **3 Vector DBs** - Qdrant, Weaviate, (Milvus)
|
||||
|
||||
### Що можна зробити швидко:
|
||||
### Що можна зробити швидко
|
||||
1. **Dify exploration** - може вже все є!
|
||||
2. **CrewAI integration** - web search для агентів
|
||||
3. **Neo4j integration** - knowledge graphs
|
||||
|
||||
### Що не критично:
|
||||
### Що не критично
|
||||
- Memory Service (є альтернативи)
|
||||
- RAG Service (є Dify RAG)
|
||||
- Milvus (є Qdrant і Weaviate)
|
||||
@@ -316,4 +316,3 @@ receivers:
|
||||
|
||||
*Створено: 2025-11-18*
|
||||
*Базується на: SERVER_AUDIT_REPORT.md*
|
||||
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
# Звіт про синхронізацію агентів та дашборд моніторингу
|
||||
|
||||
**Дата:** 2025-11-21
|
||||
**Дашборд:** http://localhost:8889 (monitoring/local_monitor.py)
|
||||
**Дашборд:** [http://localhost:8889](http://localhost:8889) (`monitoring/local_monitor.py`)
|
||||
|
||||
## 🔍 Знайдені інструменти пошуку
|
||||
|
||||
### ✅ Інструменти пошуку ВЖЕ встановлені
|
||||
|
||||
**1. Web Search Tool (GREENFOOD)**
|
||||
#### 1. Web Search Tool (GREENFOOD)
|
||||
- **Файл:** `services/greenfood/crew/tools/crawl4ai_tool.py`
|
||||
- **Інструменти:**
|
||||
- `web_search_tool` - Пошук в інтернеті через Crawl4AI
|
||||
@@ -15,7 +15,7 @@
|
||||
- **Використання:** Parser Service (Crawl4AI) на порту 9400
|
||||
- **Статус:** ✅ Налаштовано для GREENFOOD агентів
|
||||
|
||||
**2. Parser Service (Crawl4AI)**
|
||||
#### 2. Parser Service (Crawl4AI)
|
||||
- **Порт:** 9400
|
||||
- **Endpoint:** `/crawl`
|
||||
- **Можливості:**
|
||||
@@ -238,6 +238,3 @@ async def get_tools():
|
||||
|
||||
**Останнє оновлення:** 2025-11-21
|
||||
**Статус:** ⚠️ Потребує синхронізації та інтеграції
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
### Поточний стан
|
||||
|
||||
**❌ Інструменти пошуку НЕ налаштовані для агентів**
|
||||
### ❌ Інструменти пошуку НЕ налаштовані для агентів
|
||||
|
||||
Перевірка показала:
|
||||
- CrewAI backend (`dagi-crewai`) не містить інструментів пошуку (SerperDevTool, DuckDuckGoSearchRun, тощо)
|
||||
@@ -101,12 +101,12 @@
|
||||
|
||||
## 📊 DAGI Моніторинг
|
||||
|
||||
### Поточний стан
|
||||
### Поточний стан моніторингу
|
||||
|
||||
#### Prometheus
|
||||
- ✅ **Статус:** Healthy
|
||||
- ✅ **Порт:** 9090
|
||||
- ✅ **URL:** http://144.76.224.179:9090
|
||||
- ✅ **URL:** [http://144.76.224.179:9090](http://144.76.224.179:9090)
|
||||
- ⚠️ **Проблеми:** Деякі targets показують `down`:
|
||||
- `gateway` - down
|
||||
- `router` - down
|
||||
@@ -116,7 +116,7 @@
|
||||
#### Grafana
|
||||
- ⚠️ **Статус:** Restarting (проблеми з плагіном neo4j-datasource)
|
||||
- ✅ **Порт:** 3000
|
||||
- ✅ **URL:** http://144.76.224.179:3000
|
||||
- ✅ **URL:** [http://144.76.224.179:3000](http://144.76.224.179:3000)
|
||||
- ⚠️ **Проблема:** Плагін `neo4j-datasource` не знайдено (404)
|
||||
|
||||
### Налаштовані метрики
|
||||
@@ -138,7 +138,7 @@ Prometheus збирає метрики з:
|
||||
|
||||
### Чи відображаються зміни в реальному часі?
|
||||
|
||||
**⚠️ Частково**
|
||||
### ⚠️ Частково
|
||||
|
||||
**Проблеми:**
|
||||
1. Деякі сервіси не експортують метрики (`/metrics` endpoint)
|
||||
@@ -160,17 +160,17 @@ Prometheus збирає метрики з:
|
||||
## 🔗 Посилання для моніторингу
|
||||
|
||||
### Локальний доступ (на сервері)
|
||||
- **Prometheus:** http://localhost:9090
|
||||
- **Grafana:** http://localhost:3000
|
||||
- **Router Health:** http://localhost:9102/health
|
||||
- **Gateway Health:** http://localhost:9300/health
|
||||
- **Router Providers:** http://localhost:9102/providers
|
||||
- **Router Routing:** http://localhost:9102/routing
|
||||
- **Prometheus:** [http://localhost:9090](http://localhost:9090)
|
||||
- **Grafana:** [http://localhost:3000](http://localhost:3000)
|
||||
- **Router Health:** [http://localhost:9102/health](http://localhost:9102/health)
|
||||
- **Gateway Health:** [http://localhost:9300/health](http://localhost:9300/health)
|
||||
- **Router Providers:** [http://localhost:9102/providers](http://localhost:9102/providers)
|
||||
- **Router Routing:** [http://localhost:9102/routing](http://localhost:9102/routing)
|
||||
|
||||
### Публічний доступ
|
||||
- **Prometheus:** http://144.76.224.179:9090
|
||||
- **Grafana:** http://144.76.224.179:3000
|
||||
- **Gateway Health:** https://gateway.daarion.city/health
|
||||
- **Prometheus:** [http://144.76.224.179:9090](http://144.76.224.179:9090)
|
||||
- **Grafana:** [http://144.76.224.179:3000](http://144.76.224.179:3000)
|
||||
- **Gateway Health:** [https://gateway.daarion.city/health](https://gateway.daarion.city/health)
|
||||
|
||||
---
|
||||
|
||||
@@ -195,6 +195,3 @@ Prometheus збирає метрики з:
|
||||
|
||||
**Останнє оновлення:** 2025-11-21
|
||||
**Статус:** ⚠️ Потребує уваги (інструменти пошуку та моніторинг)
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
|
||||
Agent Hub — це центральний UI для управління агентами DAARION. Надає візуальний інтерфейс для перегляду, моніторингу та налаштування агентів.
|
||||
|
||||
### Features:
|
||||
### Features
|
||||
- ✅ Gallery view — перегляд усіх агентів в grid layout
|
||||
- ✅ Agent Cabinet — детальна сторінка агента з табами
|
||||
- ✅ Metrics Dashboard — статистика використання LLM/tools
|
||||
@@ -24,7 +24,7 @@ Agent Hub — це центральний UI для управління аге
|
||||
|
||||
## 🏗️ Architecture
|
||||
|
||||
```
|
||||
```text
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ Agent Hub UI │
|
||||
│ (React + TypeScript + Tailwind CSS) │
|
||||
@@ -52,13 +52,13 @@ Agent Hub — це центральний UI для управління аге
|
||||
│orchestrator│ │ (metrics) │ │ (authz) │
|
||||
│ :7008 │ │ :7013 │ │ :7012 │
|
||||
└───────────┘ └───────────────┘ └──────────────┘
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
## 📁 File Structure
|
||||
|
||||
```
|
||||
```text
|
||||
src/
|
||||
├── api/
|
||||
│ └── agents.ts ✅ API client (11 functions)
|
||||
@@ -99,7 +99,7 @@ src/
|
||||
- Refresh button
|
||||
|
||||
**Layout:**
|
||||
```
|
||||
```text
|
||||
┌────────────────────────────────────────────────────┐
|
||||
│ 🤖 Agent Hub [🔄 Оновити] │
|
||||
│ Керуйте агентами вашого MicroDAO │
|
||||
@@ -133,7 +133,7 @@ src/
|
||||
- Click → navigate to `/agent/{id}`
|
||||
|
||||
**Visual:**
|
||||
```
|
||||
```text
|
||||
┌────────────────────────────────┐
|
||||
│ 🟢 Активний │
|
||||
│ ┌──┐ │
|
||||
@@ -166,7 +166,7 @@ src/
|
||||
- Actions: [🔄 Оновити] [💬 Чат]
|
||||
|
||||
**Layout:**
|
||||
```
|
||||
```text
|
||||
┌────────────────────────────────────────────────────┐
|
||||
│ ← Назад до Agent Hub │
|
||||
│ │
|
||||
@@ -202,7 +202,7 @@ src/
|
||||
- Time-series bar charts for tool calls
|
||||
|
||||
**Visual:**
|
||||
```
|
||||
```text
|
||||
┌────────────────────────────────────────────────────┐
|
||||
│ 📊 Метрики [24год][7днів][30днів] │
|
||||
│ │
|
||||
@@ -246,7 +246,7 @@ src/
|
||||
- Updated at
|
||||
|
||||
**Visual:**
|
||||
```
|
||||
```text
|
||||
┌────────────────────────────────────────────────────┐
|
||||
│ ⚙️ Налаштування │
|
||||
│ │
|
||||
@@ -262,7 +262,7 @@ src/
|
||||
│ ☐ Пошук в пам'яті (Memory) │
|
||||
│ [Зберегти інструменти] │
|
||||
└────────────────────────────────────────────────────┘
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
@@ -458,7 +458,7 @@ npm run dev
|
||||
|
||||
### 3. Navigate to Agent Hub
|
||||
|
||||
```
|
||||
```text
|
||||
http://localhost:3000/agent-hub
|
||||
```
|
||||
|
||||
@@ -466,10 +466,10 @@ http://localhost:3000/agent-hub
|
||||
|
||||
## 🧪 Testing
|
||||
|
||||
### Manual Testing Flow:
|
||||
### Manual Testing Flow
|
||||
|
||||
1. **Start services** (docker-compose.phase5.yml)
|
||||
2. **Open frontend** (http://localhost:3000)
|
||||
2. **Open frontend** ([http://localhost:3000](http://localhost:3000))
|
||||
3. **Navigate to `/agent-hub`**
|
||||
4. **Verify gallery loads** (should show Sofia, Alex, Guardian)
|
||||
5. **Click on an agent card** → should open `/agent/{id}`
|
||||
@@ -481,7 +481,7 @@ http://localhost:3000/agent-hub
|
||||
8. **Test filter** (select "DAARION")
|
||||
9. **Test refresh** button
|
||||
|
||||
### API Testing:
|
||||
### API Testing
|
||||
|
||||
```bash
|
||||
# Health check
|
||||
@@ -504,7 +504,7 @@ curl http://localhost:7014/agents/agent:sofia/context
|
||||
|
||||
## 📊 Mock Data
|
||||
|
||||
### Current mock agents (from backend):
|
||||
### Current mock agents (from backend)
|
||||
|
||||
```json
|
||||
[
|
||||
@@ -565,18 +565,18 @@ curl http://localhost:7014/agents/agent:sofia/context
|
||||
|
||||
## 📝 Notes
|
||||
|
||||
### Known Limitations:
|
||||
### Known Limitations
|
||||
1. **Mock data only** — agents-service використовує hardcoded mock data (Phase 6 додасть database)
|
||||
2. **No WebSocket** — статус оновлюється тільки при refetch (Phase 6.5 додасть live updates)
|
||||
3. **Limited events** — events endpoint пустий (Phase 6 додасть event store)
|
||||
4. **Basic context** — контекст не повністю інтегрований з memory-orchestrator (Phase 6 покращить)
|
||||
|
||||
### Performance:
|
||||
### Performance
|
||||
- All API calls cached in React state
|
||||
- Lazy loading for metrics/context
|
||||
- Optimistic UI updates for settings
|
||||
|
||||
### Accessibility:
|
||||
### Accessibility
|
||||
- Semantic HTML
|
||||
- Keyboard navigation
|
||||
- ARIA labels (planned)
|
||||
@@ -619,4 +619,3 @@ curl http://localhost:7014/agents/agent:sofia/context
|
||||
---
|
||||
|
||||
**END OF AGENT HUB SPEC** 🤖
|
||||
|
||||
|
||||
@@ -124,4 +124,3 @@ python3 scripts/update_db_asset_urls.py # реальне оновлення
|
||||
1. Перевірте що MinIO контейнер працює: `docker ps | grep minio`
|
||||
2. Перевірте що MinIO слухає на 9000: `curl http://localhost:9000/minio/health/live`
|
||||
3. Перевірте bucket: `docker exec daarion-minio mc ls local/daarion-assets`
|
||||
|
||||
|
||||
@@ -2,11 +2,13 @@
|
||||
|
||||
## Огляд
|
||||
|
||||
DAARION використовує **MinIO** (S3-compatible object storage) для зберігання assets (логотипи, банери, аватарки). Для доступу до assets без налаштування DNS для `assets.daarion.space` використовується **Asset Proxy** через `city-service`.
|
||||
DAARION використовує **MinIO** (S3-compatible object storage) для зберігання assets
|
||||
(логотипи, банери, аватарки). Для доступу до assets без налаштування DNS для
|
||||
`assets.daarion.space` використовується **Asset Proxy** через `city-service`.
|
||||
|
||||
## Архітектура
|
||||
|
||||
```
|
||||
```text
|
||||
┌─────────────┐
|
||||
│ Frontend │ → /api/city/assets/proxy/microdao/logo/...
|
||||
└─────────────┘
|
||||
@@ -62,7 +64,7 @@ import { normalizeAssetUrl } from '@/lib/utils/assetUrl';
|
||||
|
||||
## Endpoint
|
||||
|
||||
### City Service
|
||||
### City Service ENV
|
||||
|
||||
- **Path:** `/city/assets/proxy/{path:path}`
|
||||
- **Method:** `GET`
|
||||
@@ -195,4 +197,3 @@ const normalized = normalizeAssetUrl(logoUrl);
|
||||
- `https://assets.daarion.space/...` → конвертується в `/api/city/assets/proxy/...`
|
||||
|
||||
`normalizeAssetUrl` обробляє всі ці випадки автоматично.
|
||||
|
||||
|
||||
@@ -74,7 +74,7 @@ docker exec daarion-minio mc cp logo.png minio/daarion-assets/microdao/logo/{slu
|
||||
|
||||
## Структура файлів в MinIO
|
||||
|
||||
```
|
||||
```text
|
||||
daarion-assets/
|
||||
├── microdao/
|
||||
│ ├── logo/
|
||||
|
||||
@@ -97,5 +97,3 @@ Gateway & frontend:
|
||||
|
||||
With these fixes the auth-service is stable, compatible with matrix-gateway, and
|
||||
ready for the next milestone (2D City Map + Agent Presence).
|
||||
|
||||
|
||||
|
||||
@@ -53,13 +53,13 @@ crontab -e
|
||||
|
||||
Додати рядок:
|
||||
|
||||
```
|
||||
```cron
|
||||
0 * * * * /usr/local/bin/backup_daarion.sh >> /var/log/daarion-backup.log 2>&1
|
||||
```
|
||||
|
||||
Або для запуску щодня о 2:00 ночі:
|
||||
|
||||
```
|
||||
```cron
|
||||
0 2 * * * /usr/local/bin/backup_daarion.sh >> /var/log/daarion-backup.log 2>&1
|
||||
```
|
||||
|
||||
@@ -184,4 +184,3 @@ df -h /var/backups
|
||||
```bash
|
||||
find /var/backups/daarion -type f -mtime +7 -delete
|
||||
```
|
||||
|
||||
|
||||
@@ -73,7 +73,7 @@ last_updated: 2024-11-14
|
||||
|
||||
## Структура документації
|
||||
|
||||
```
|
||||
```text
|
||||
docs/
|
||||
├── cursor/ # Детальні технічні специфікації
|
||||
├── tokenomics/ # Токеноміка (канонічний: city-tokenomics.md)
|
||||
@@ -92,7 +92,6 @@ docs/
|
||||
Завжди вказуй канонічні документи:
|
||||
|
||||
> Використовуй `docs/tokenomics/city-tokenomics.md` як єдине актуальне джерело токеноміки.
|
||||
|
||||
> Використовуй `docs/cursor/50_daarion_city_website_integration.md` для інтеграції з сайтом.
|
||||
|
||||
### При оновленні документації
|
||||
@@ -137,5 +136,3 @@ docs/
|
||||
---
|
||||
|
||||
**Останнє оновлення:** 2024-11-14
|
||||
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@ DAARWIZZ is an intelligent agent that:
|
||||
## 📋 System Prompt
|
||||
|
||||
DAARWIZZ's behavior is defined by its system prompt located at:
|
||||
```
|
||||
```text
|
||||
gateway-bot/daarwizz_prompt.txt
|
||||
```
|
||||
|
||||
@@ -52,7 +52,7 @@ gateway-bot/daarwizz_prompt.txt
|
||||
|
||||
### Message Flow
|
||||
|
||||
```
|
||||
```text
|
||||
User (Telegram)
|
||||
↓ "Привіт! Що це за DAO?"
|
||||
Gateway (:9300)
|
||||
@@ -111,11 +111,11 @@ def _get_system_prompt(self, req: RouterRequest) -> Optional[str]:
|
||||
context = req.payload.get("context") or {}
|
||||
if "system_prompt" in context:
|
||||
return context["system_prompt"]
|
||||
|
||||
|
||||
# 2. Agent-specific fallback
|
||||
if req.agent == "daarwizz":
|
||||
return "Ти — DAARWIZZ, AI-агент DAARION.city..."
|
||||
|
||||
|
||||
return None
|
||||
```
|
||||
|
||||
@@ -139,9 +139,9 @@ ENV DAARWIZZ_PROMPT_PATH=/app/gateway-bot/daarwizz_prompt.txt
|
||||
|
||||
**User**: `Привіт! Хто ти?`
|
||||
|
||||
**DAARWIZZ**:
|
||||
```
|
||||
Привіт! Я — DAARWIZZ, AI-агент екосистеми DAARION.city.
|
||||
**DAARWIZZ**:
|
||||
```text
|
||||
Привіт! Я — DAARWIZZ, AI-агент екосистеми DAARION.city.
|
||||
|
||||
Я допомагаю учасникам розібратися з:
|
||||
• microDAO та їх структурою
|
||||
@@ -157,7 +157,7 @@ ENV DAARWIZZ_PROMPT_PATH=/app/gateway-bot/daarwizz_prompt.txt
|
||||
**User**: `Які у мене права в цьому DAO?`
|
||||
|
||||
**DAARWIZZ** (with RBAC context):
|
||||
```
|
||||
```text
|
||||
У greenfood-dao ти маєш роль: member
|
||||
|
||||
Твої права (entitlements):
|
||||
@@ -174,7 +174,7 @@ ENV DAARWIZZ_PROMPT_PATH=/app/gateway-bot/daarwizz_prompt.txt
|
||||
**User**: `Як розпочати роботу в DAO?`
|
||||
|
||||
**DAARWIZZ**:
|
||||
```
|
||||
```text
|
||||
Ласкаво просимо! Ось кроки для старту:
|
||||
|
||||
1. Ознайомся з документацією DAO (команда /docs)
|
||||
@@ -255,7 +255,7 @@ curl -X POST http://localhost:9300/telegram/webhook \
|
||||
|
||||
### Expected Log Output
|
||||
|
||||
```
|
||||
```text
|
||||
gateway | INFO: DAARWIZZ system prompt loaded (1243 chars)
|
||||
gateway | INFO: Telegram message from testuser (tg:12345): Привіт! Хто ти?
|
||||
gateway | INFO: Sending to Router: agent=daarwizz, dao=greenfood-dao
|
||||
@@ -336,7 +336,7 @@ curl http://localhost:9300/health
|
||||
|
||||
---
|
||||
|
||||
**Version**: 0.2.0
|
||||
**Agent**: DAARWIZZ
|
||||
**Status**: Production-ready ✅
|
||||
**Version**: 0.2.0
|
||||
**Agent**: DAARWIZZ
|
||||
**Status**: Production-ready ✅
|
||||
**Last Updated**: 2024-11-15
|
||||
|
||||
@@ -113,4 +113,3 @@ crontab -l | grep monitor
|
||||
- Чи працює cron job
|
||||
- Чи є актуальні бекапи
|
||||
- Чи є проблеми з volume персистентністю
|
||||
|
||||
|
||||
@@ -68,4 +68,3 @@ python3 scripts/sync-node2-dagi-agents.py
|
||||
- **SEED_RECOVERY.md** - аварійне відновлення
|
||||
- **INFRA_ASSETS_MINIO.md** - налаштування MinIO
|
||||
- **TASK_PHASE_DATABASE_HARDENING_AND_ASSETS_MIGRATION_v1.md** - повний таск
|
||||
|
||||
|
||||
@@ -6,7 +6,9 @@
|
||||
|
||||
## Причини
|
||||
|
||||
1. **Міграції не застосовуються автоматично**: `/docker-entrypoint-initdb.d` виконується тільки при першому створенні БД (коли volume порожній). При перезапуску контейнера міграції не застосовуються.
|
||||
1. **Міграції не застосовуються автоматично**:
|
||||
`/docker-entrypoint-initdb.d` виконується тільки при першому створенні БД
|
||||
(коли volume порожній). При перезапуску контейнера міграції не застосовуються.
|
||||
|
||||
2. **Конфлікт контейнерів**: Старий `dagi-postgres` контейнер міг конфліктувати з новим `daarion-postgres`.
|
||||
|
||||
@@ -116,4 +118,3 @@ tail -f /var/log/db-health-check.log
|
||||
1. Налаштувати cron для автоматичної перевірки
|
||||
2. Додати алерти при виявленні проблем
|
||||
3. Розглянути використання PostgreSQL replication для високої доступності
|
||||
|
||||
|
||||
@@ -67,4 +67,3 @@ crontab -l | grep db-health-check
|
||||
2. Додати алерти при виявленні проблем (наприклад, через email або Telegram)
|
||||
3. Налаштувати моніторинг розміру volume та попереджати при нестачі місця
|
||||
4. Розглянути використання managed PostgreSQL (наприклад, AWS RDS) для production
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@ docker compose -f docker-compose.db.yml up -d db
|
||||
docker compose -f docker-compose.web.yml up -d city-service web
|
||||
```
|
||||
|
||||
### Крок 4: Перевірити
|
||||
### Крок 4: Верифікувати після аварійного відновлення
|
||||
|
||||
```bash
|
||||
# Перевірити що база працює
|
||||
@@ -135,4 +135,3 @@ docker compose -f docker-compose.db.yml restart db
|
||||
# Перевірити права на файл бекапу
|
||||
chmod 644 db_backups/daarion_*.sql
|
||||
```
|
||||
|
||||
|
||||
@@ -112,4 +112,3 @@ bash scripts/monitor-db-stability.sh
|
||||
- ✅ PostgreSQL конфігурацію покращено
|
||||
- ✅ Автоматичне відновлення працює
|
||||
- ✅ Логи зберігаються в `/var/log/db-stability-monitor.log`
|
||||
|
||||
|
||||
@@ -383,6 +383,6 @@ server {
|
||||
|
||||
## 📞 Support
|
||||
|
||||
- Documentation: https://docs.daarion.city
|
||||
- Issues: https://github.com/daarion/dagi-stack/issues
|
||||
- Discord: https://discord.gg/daarion
|
||||
- Documentation: [docs.daarion.city](https://docs.daarion.city)
|
||||
- Issues: [github.com/daarion/dagi-stack/issues](https://github.com/daarion/dagi-stack/issues)
|
||||
- Discord: [discord.gg/daarion](https://discord.gg/daarion)
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
DAARION uses a **microservices architecture** with a single **NGINX gateway** as the entry point.
|
||||
|
||||
```
|
||||
```text
|
||||
┌─────────────────┐
|
||||
│ Internet │
|
||||
└────────┬────────┘
|
||||
@@ -139,9 +139,9 @@ This will:
|
||||
|
||||
### 3. Access
|
||||
|
||||
- **Frontend:** http://localhost
|
||||
- **API:** http://localhost/api/
|
||||
- **Health:** http://localhost/health
|
||||
- **Frontend:** [http://localhost](http://localhost)
|
||||
- **API:** [http://localhost/api/](http://localhost/api/)
|
||||
- **Health:** [http://localhost/health](http://localhost/health)
|
||||
|
||||
### 4. Stop Services
|
||||
|
||||
@@ -153,7 +153,7 @@ This will:
|
||||
|
||||
## 📁 Project Structure
|
||||
|
||||
```
|
||||
```text
|
||||
daarion/
|
||||
├── docker-compose.all.yml # All-in-one compose
|
||||
├── Dockerfile.frontend # Frontend build
|
||||
@@ -210,7 +210,7 @@ docker-compose -f docker-compose.all.yml logs -f living-map-service
|
||||
|
||||
### Health Checks
|
||||
|
||||
- **Gateway:** http://localhost/health
|
||||
- **Gateway:** [http://localhost/health](http://localhost/health)
|
||||
- **Individual services:** Health checks in docker-compose
|
||||
|
||||
### Metrics
|
||||
@@ -328,4 +328,3 @@ See [DEPLOY_ON_SERVER.md](./DEPLOY_ON_SERVER.md) for:
|
||||
---
|
||||
|
||||
**🎉 DAARION — Unified Gateway Ready!**
|
||||
|
||||
|
||||
@@ -157,16 +157,16 @@ pytest tests/test_infra_smoke.py -v --base-url http://localhost:7001
|
||||
|
||||
## 🌐 КРОК 5: Перевірка в браузері
|
||||
|
||||
1. **Node Directory:** https://daarion.space/nodes
|
||||
1. **Node Directory:** [daarion.space/nodes](https://daarion.space/nodes)
|
||||
- Повинні відображатися NODE1 і NODE2
|
||||
- Без "Помилка завантаження нод"
|
||||
|
||||
2. **Node Cabinet:** https://daarion.space/nodes/node-1-hetzner-gex44
|
||||
2. **Node Cabinet:** [daarion.space/nodes/node-1-hetzner-gex44](https://daarion.space/nodes/node-1-hetzner-gex44)
|
||||
- Метрики CPU/GPU/RAM/Disk
|
||||
- DAGI Router Card
|
||||
- Guardian/Steward агенти
|
||||
|
||||
3. **Agents:** https://daarion.space/agents
|
||||
3. **Agents:** [daarion.space/agents](https://daarion.space/agents)
|
||||
- System Prompts для агентів
|
||||
|
||||
---
|
||||
@@ -190,7 +190,6 @@ NODE_ENVIRONMENT=development \
|
||||
NODE_ROLES=development,gpu,ai_runtime,testing \
|
||||
./scripts/node-bootstrap.sh
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ❌ Rollback (якщо щось пішло не так)
|
||||
@@ -241,4 +240,3 @@ docker exec -it daarion-postgres psql -U daarion_user -d daarion -c "SELECT node
|
||||
# Якщо порожньо — запустити bootstrap
|
||||
./scripts/node-bootstrap.sh
|
||||
```
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
## 📋 Обов'язкові DNS записи
|
||||
|
||||
### 1. Головний домен (Landing / Redirect)
|
||||
```
|
||||
```text
|
||||
Type: A
|
||||
Name: @
|
||||
Value: <SERVER_IP_ADDRESS>
|
||||
@@ -20,7 +20,7 @@ TTL: 3600
|
||||
---
|
||||
|
||||
### 2. Application субдомен (MVP Product)
|
||||
```
|
||||
```text
|
||||
Type: A
|
||||
Name: app
|
||||
Value: <SERVER_IP_ADDRESS>
|
||||
@@ -34,7 +34,7 @@ TTL: 3600
|
||||
## 📋 Опціональні DNS записи
|
||||
|
||||
### 3. Grafana моніторинг
|
||||
```
|
||||
```text
|
||||
Type: A
|
||||
Name: grafana
|
||||
Value: <SERVER_IP_ADDRESS>
|
||||
@@ -48,7 +48,7 @@ TTL: 3600
|
||||
---
|
||||
|
||||
### 4. API субдомен (майбутнє)
|
||||
```
|
||||
```text
|
||||
Type: A
|
||||
Name: api
|
||||
Value: <SERVER_IP_ADDRESS>
|
||||
@@ -62,7 +62,7 @@ TTL: 3600
|
||||
---
|
||||
|
||||
### 5. Matrix субдомен (Phase 4+)
|
||||
```
|
||||
```text
|
||||
Type: A
|
||||
Name: matrix
|
||||
Value: <SERVER_IP_ADDRESS>
|
||||
@@ -231,4 +231,3 @@ done
|
||||
**Статус:** ✅ DNS Setup Guide Complete
|
||||
**Версія:** 1.0.0
|
||||
**Дата:** 24 листопада 2025
|
||||
|
||||
|
||||
@@ -335,13 +335,13 @@ rm daarion-secrets-*.tar.gz
|
||||
|
||||
## 🔄 Rotation Policy
|
||||
|
||||
### Регулярно змінювати:
|
||||
### Регулярно змінювати
|
||||
- **JWT_SECRET**: кожні 90 днів
|
||||
- **Database passwords**: кожні 90 днів
|
||||
- **Redis password**: кожні 90 днів
|
||||
- **Grafana admin password**: кожні 30 днів
|
||||
|
||||
### Процедура rotation:
|
||||
### Процедура rotation
|
||||
1. Згенерувати новий секрет
|
||||
2. Оновити `.env` файл
|
||||
3. Перезапустити affected services:
|
||||
@@ -421,4 +421,3 @@ file .env
|
||||
**Статус:** ✅ ENV Configuration Guide Complete
|
||||
**Версія:** 1.0.0
|
||||
**Дата:** 24 листопада 2025
|
||||
|
||||
|
||||
@@ -133,7 +133,7 @@ INSERT INTO city_rooms (id, slug, name, ...) VALUES (...)
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
```
|
||||
|
||||
### Re-apply конкретної міграції:
|
||||
### Re-apply конкретної міграції
|
||||
```bash
|
||||
# Якщо потрібно перезастосувати (тільки якщо idempotent!)
|
||||
docker compose -f docker-compose.all.yml exec -T postgres \
|
||||
@@ -204,14 +204,14 @@ chmod +x scripts/migrate.sh
|
||||
|
||||
## 🔙 Rollback Strategy
|
||||
|
||||
### Створення rollback файлів (для майбутнього):
|
||||
### Створення rollback файлів (для майбутнього)
|
||||
```text
|
||||
migrations/
|
||||
├── 010_create_city_backend.sql
|
||||
└── 010_create_city_backend_rollback.sql
|
||||
```
|
||||
|
||||
### Приклад rollback:
|
||||
### Приклад rollback
|
||||
```sql
|
||||
-- 010_create_city_backend_rollback.sql
|
||||
DROP TABLE IF EXISTS secondme_messages CASCADE;
|
||||
@@ -231,7 +231,7 @@ docker compose -f docker-compose.all.yml exec -T postgres \
|
||||
|
||||
## 🧪 Testing міграцій
|
||||
|
||||
### Pre-deployment testing (на dev environment):
|
||||
### Pre-deployment testing (на dev environment)
|
||||
```bash
|
||||
# 1. Backup поточної БД
|
||||
docker compose -f docker-compose.all.yml exec postgres \
|
||||
@@ -349,4 +349,3 @@ docker compose -f docker-compose.all.yml exec postgres \
|
||||
**Статус:** ✅ Migrations Guide Complete
|
||||
**Версія:** 1.0.0
|
||||
**Дата:** 24 листопада 2025
|
||||
|
||||
|
||||
@@ -170,4 +170,3 @@ networks:
|
||||
---
|
||||
|
||||
**Last updated:** 2025-11-29
|
||||
|
||||
|
||||
@@ -600,4 +600,3 @@ proxy_cache_valid 200 5m;
|
||||
---
|
||||
|
||||
**🎉 DAARION — Production Ready!**
|
||||
|
||||
|
||||
@@ -416,9 +416,9 @@ docker stats --no-stream --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"
|
||||
|
||||
Записати всі знайдені проблеми:
|
||||
|
||||
1. _____________________________
|
||||
2. _____________________________
|
||||
3. _____________________________
|
||||
1. [ ] _____________________________
|
||||
2. [ ] _____________________________
|
||||
3. [ ] _____________________________
|
||||
|
||||
---
|
||||
|
||||
@@ -440,4 +440,3 @@ docker stats --no-stream --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"
|
||||
**Виконано:** _______________ (дата/час)
|
||||
**Виконавець:** _______________ (ім'я)
|
||||
**Версія:** 1.0.0
|
||||
|
||||
|
||||
@@ -386,4 +386,3 @@ app.daarion.space {
|
||||
**Статус:** ✅ SSL/HTTPS Setup Guide Complete
|
||||
**Версія:** 1.0.0
|
||||
**Дата:** 24 листопада 2025
|
||||
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
# Фінальний звіт: Синхронізація агентів, інструменти пошуку та дашборд
|
||||
|
||||
**Дата:** 2025-11-21
|
||||
**Дашборд:** http://localhost:8889 (monitoring/local_monitor.py)
|
||||
**Дашборд:** <http://localhost:8889> (monitoring/local_monitor.py)
|
||||
|
||||
---
|
||||
|
||||
## 🔍 Інструменти пошуку - ЗНАЙДЕНО!
|
||||
## 🔍 Інструменти пошуку - ЗНАЙДЕНО
|
||||
|
||||
### ✅ Встановлені інструменти пошуку
|
||||
|
||||
**1. Web Search Tool (GREENFOOD Agents)**
|
||||
#### 1. Web Search Tool (GREENFOOD Agents)
|
||||
- **Файл:** `services/greenfood/crew/tools/crawl4ai_tool.py`
|
||||
- **Інструменти:**
|
||||
- `web_search_tool` - Пошук в інтернеті через Crawl4AI
|
||||
@@ -23,7 +23,7 @@
|
||||
- Підтримка Playwright для JavaScript сайтів
|
||||
- **Статус:** ✅ Налаштовано для GREENFOOD агентів
|
||||
|
||||
**2. Parser Service (Crawl4AI)**
|
||||
#### 2. Parser Service (Crawl4AI)
|
||||
- **Порт:** 9400
|
||||
- **Container:** `dagi-parser-service`
|
||||
- **Статус:** ✅ Працює
|
||||
@@ -205,6 +205,3 @@ python3 -m uvicorn monitoring.local_monitor:app --host 0.0.0.0 --port 8889
|
||||
|
||||
**Останнє оновлення:** 2025-11-21
|
||||
**Статус:** ✅ Аналіз завершено, інтеграція додана, потрібно запустити дашборд
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
**Результат**: Боти читають PDF файли та відповідають на питання про них!
|
||||
|
||||
**Приклад**:
|
||||
```
|
||||
```text
|
||||
Ти → 📄 whitepaper.pdf
|
||||
Бот → ✅ Документ 'whitepaper.pdf' оброблено.
|
||||
[Перші 500 символів тексту]...
|
||||
@@ -47,7 +47,7 @@
|
||||
**Результат**: Боти відповідають голосом на голосові повідомлення!
|
||||
|
||||
**Приклад**:
|
||||
```
|
||||
```text
|
||||
Ти → 🎤 [Голосове] "Привіт, як справи?"
|
||||
Бот → 🔊 [Голосове відповідь] "Привіт! У мене все добре..."
|
||||
```
|
||||
@@ -74,14 +74,14 @@
|
||||
6. Voice Responses (1h)
|
||||
7. Documents Processed (1h)
|
||||
|
||||
**Доступ**: http://144.76.224.179:3000
|
||||
**Доступ**: [http://144.76.224.179:3000](http://144.76.224.179:3000)
|
||||
**Login**: admin / admin
|
||||
|
||||
---
|
||||
|
||||
## 📊 Статистика змін
|
||||
|
||||
### Файли створені:
|
||||
### Файли створені
|
||||
1. `/telegram-gateway/app/voice_handler.py` - обробка voice та document
|
||||
2. `/monitoring/grafana/dashboards/daarion_services_overview.json`
|
||||
3. `/monitoring/grafana/dashboards/telegram_bots.json`
|
||||
@@ -89,7 +89,7 @@
|
||||
5. `/docs/testing/VOICE_PHOTO_READY.md`
|
||||
6. `/docs/FINAL_INTEGRATION_SUMMARY.md`
|
||||
|
||||
### Файли оновлені:
|
||||
### Файли оновлені
|
||||
1. `/telegram-gateway/app/telegram_listener.py`:
|
||||
- Додано `send_voice()` метод (+40 рядків)
|
||||
- Додано handlers для voice, document, photo
|
||||
@@ -129,7 +129,7 @@
|
||||
3. (Поки що заглушка - чекаємо multimodal LLM)
|
||||
|
||||
### Моніторинг 📊
|
||||
1. Відкрити http://144.76.224.179:3000
|
||||
1. Відкрити [http://144.76.224.179:3000](http://144.76.224.179:3000)
|
||||
2. Login: admin / admin
|
||||
3. Вибрати Dashboard:
|
||||
- "DAARION Services Overview" - загальний моніторинг
|
||||
@@ -139,21 +139,21 @@
|
||||
|
||||
## 🐛 Відомі обмеження
|
||||
|
||||
### Vision Encoder:
|
||||
### Vision Encoder
|
||||
- ⚠️ Поточний Vision Encoder робить тільки **embeddings** (векторизацію)
|
||||
- ⚠️ Для опису зображень потрібен **multimodal LLM** (GPT-4V, Claude Vision, LLaVA)
|
||||
- 💡 **Рішення**: Інтегрувати OpenAI GPT-4V або Claude 3 Vision API
|
||||
|
||||
### Parser Service:
|
||||
### Parser Service
|
||||
- ⚠️ Обмеження на розмір PDF (зазвичай < 50 MB)
|
||||
- ⚠️ Для дуже великих документів потрібен chunking
|
||||
|
||||
### TTS:
|
||||
### TTS
|
||||
- ⚠️ Відповіді обмежені до 500 символів (gTTS обмеження)
|
||||
- ⚠️ Для довших відповідей треба streaming TTS або chunking
|
||||
- 💡 **Рішення**: Додати більш потужний TTS (Coqui TTS, ElevenLabs API)
|
||||
|
||||
### Grafana:
|
||||
### Grafana
|
||||
- ⚠️ Деякі метрики можуть бути порожні якщо endpoints ще не викликалися
|
||||
- ⚠️ `/metrics` endpoint відсутній в деяких сервісах (STT, TTS, Parser)
|
||||
|
||||
@@ -161,35 +161,35 @@
|
||||
|
||||
## 🎯 Наступні кроки (опційно)
|
||||
|
||||
### Priority 🔴 HIGH:
|
||||
1. **Multimodal LLM для Vision**:
|
||||
### Priority 🔴 HIGH
|
||||
1. **Multimodal LLM для Vision**
|
||||
- Інтегрувати GPT-4V або Claude 3 Vision
|
||||
- Додати endpoint `/analyze` в vision service
|
||||
- Тестування з різними типами зображень
|
||||
|
||||
2. **Додати /metrics до всіх сервісів**:
|
||||
2. **Додати /metrics до всіх сервісів**
|
||||
- STT: додати prometheus_client
|
||||
- TTS: додати prometheus_client
|
||||
- Parser: додати prometheus_client
|
||||
|
||||
### Priority 🟡 MEDIUM:
|
||||
3. **RAG Integration для документів**:
|
||||
### Priority 🟡 MEDIUM
|
||||
3. **RAG Integration для документів**
|
||||
- Інгест PDF в RAG після парсингу
|
||||
- Підтримка follow-up питань з контекстом
|
||||
- Зберігання історії документів
|
||||
|
||||
4. **Streaming TTS**:
|
||||
4. **Streaming TTS**
|
||||
- Замінити gTTS на Coqui TTS або ElevenLabs
|
||||
- Підтримка довших відповідей
|
||||
- Кращ качість голосу
|
||||
|
||||
### Priority 🟢 LOW:
|
||||
5. **Grafana Alerts**:
|
||||
### Priority 🟢 LOW
|
||||
5. **Grafana Alerts**
|
||||
- Налаштувати Alertmanager
|
||||
- Email/Telegram notifications
|
||||
- Custom alert rules
|
||||
|
||||
6. **Extended Monitoring**:
|
||||
6. **Extended Monitoring**
|
||||
- Додати більше custom metrics
|
||||
- User analytics (кількість користувачів, активність)
|
||||
- LLM usage tracking (tokens, cost)
|
||||
@@ -236,7 +236,7 @@
|
||||
|
||||
## 🏆 Підсумок
|
||||
|
||||
### Що працює:
|
||||
### Що працює
|
||||
- ✅ Голосові повідомлення (STT) → Бот
|
||||
- ✅ Бот → Голосові відповіді (TTS)
|
||||
- ✅ PDF парсинг та Q&A
|
||||
@@ -246,12 +246,12 @@
|
||||
- ✅ 3 боти (DAARWIZZ, Helion, GREENFOOD)
|
||||
- ✅ Автоматичне визначення reply_mode (voice/text)
|
||||
|
||||
### Готовність:
|
||||
### Готовність
|
||||
- 🟢 **Production Ready**: Voice, TTS, Parser, Monitoring
|
||||
- 🟡 **Partial Ready**: Vision (потрібен multimodal LLM)
|
||||
- 🔴 **Not Ready**: RAG integration, Advanced alerts
|
||||
|
||||
### Технічний стек:
|
||||
### Технічний стек
|
||||
- **Backend**: Python 3.11, FastAPI, asyncio, httpx
|
||||
- **Telegram**: aiogram 3.x, Local Telegram Bot API
|
||||
- **AI/ML**: Whisper (STT), gTTS (TTS), DotsOCR (Parser), DAGI Router
|
||||
@@ -282,4 +282,3 @@
|
||||
*Автор: Assistant (via Cursor)*
|
||||
*Версія: 1.0*
|
||||
*Тривалість імплементації: ~2 години*
|
||||
|
||||
|
||||
@@ -101,7 +101,7 @@ curl http://localhost:9300/health
|
||||
|
||||
Відкрийте свого бота в Telegram і надішліть повідомлення:
|
||||
|
||||
```
|
||||
```text
|
||||
Привіт! Що таке EcoMiner?
|
||||
```
|
||||
|
||||
@@ -110,25 +110,25 @@ Helion має відповісти з технічними деталями пр
|
||||
## 🧪 Тестові запити
|
||||
|
||||
### Для інвесторів
|
||||
```
|
||||
```text
|
||||
Який ROI від EcoMiner?
|
||||
Які ризики інвестування в ENERGY токен?
|
||||
```
|
||||
|
||||
### Для інженерів
|
||||
```
|
||||
```text
|
||||
Які технічні характеристики EcoMiner SES-77?
|
||||
Як працює когенерація в системі?
|
||||
```
|
||||
|
||||
### Для новачків
|
||||
```
|
||||
```text
|
||||
Що таке Energy Union?
|
||||
Як почати користуватися платформою?
|
||||
```
|
||||
|
||||
### Для DAO учасників
|
||||
```
|
||||
```text
|
||||
Як працює голосування в DAO?
|
||||
Які є ролі учасників?
|
||||
```
|
||||
@@ -244,7 +244,7 @@ docker-compose up -d memory-service
|
||||
|
||||
## 📚 Архітектура
|
||||
|
||||
```
|
||||
```text
|
||||
User (Telegram)
|
||||
↓
|
||||
Telegram Bot API (webhook)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# DAARION Documentation Index
|
||||
|
||||
**Quick navigation for all documentation**
|
||||
## Quick navigation for all documentation
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ DAARION використовує **MinIO** (S3-compatible object storage) для
|
||||
|
||||
## 1. Архітектура
|
||||
|
||||
```
|
||||
```text
|
||||
┌─────────────┐
|
||||
│ Frontend │ → https://assets.daarion.space/daarion-assets/...
|
||||
└─────────────┘
|
||||
@@ -125,7 +125,7 @@ docker compose -f docker-compose.db.yml up -d minio
|
||||
|
||||
### A/AAAA записи
|
||||
|
||||
```
|
||||
```text
|
||||
assets.daarion.space → IP NODE1 (для публічного доступу)
|
||||
minio.daarion.space → IP NODE1 (опційно, для консолі)
|
||||
```
|
||||
@@ -214,7 +214,7 @@ http {
|
||||
|
||||
Після завантаження файлу через API, в БД зберігається повний HTTPS URL:
|
||||
|
||||
```
|
||||
```text
|
||||
https://assets.daarion.space/daarion-assets/microdao/logo/2025/12/02/abc123def456.png
|
||||
```
|
||||
|
||||
@@ -386,4 +386,3 @@ mc replicate add local/daarion-assets --remote-bucket s3/daarion-assets-backup
|
||||
- [ ] Backend використовує `assets_client.py`
|
||||
- [ ] Frontend відображає assets з HTTPS URLs
|
||||
- [ ] Тестовий upload працює
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@ npm run dev
|
||||
### Scenario 1: Basic Messaging (DAARION UI)
|
||||
|
||||
**Steps:**
|
||||
1. Navigate to http://localhost:8899/messenger
|
||||
1. Navigate to [http://localhost:8899/messenger](http://localhost:8899/messenger)
|
||||
2. You should see the Messenger page with channel list
|
||||
3. Select the "#general" channel
|
||||
4. Type a message: "Hello DAARION!"
|
||||
@@ -71,11 +71,11 @@ npm run dev
|
||||
|
||||
### Scenario 3: Element Compatibility
|
||||
|
||||
**Prerequisite:** Install Element Desktop or use Element Web (https://app.element.io)
|
||||
**Prerequisite:** Install Element Desktop or use Element Web ([https://app.element.io](https://app.element.io))
|
||||
|
||||
**Steps:**
|
||||
1. Login to Element with Matrix credentials:
|
||||
- Homeserver: http://localhost:8008
|
||||
- Homeserver: [http://localhost:8008](http://localhost:8008)
|
||||
- Username: @admin:daarion.city
|
||||
- Password: (use Matrix admin password)
|
||||
|
||||
@@ -402,19 +402,3 @@ VALUES (gen_random_uuid(), '<channel-id>', 'agent:sofia', 'agent', '@sofia-agent
|
||||
**Version:** 1.0.0
|
||||
**Last Updated:** 2025-11-24
|
||||
**Maintainer:** DAARION Platform Team
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -29,19 +29,3 @@
|
||||
3. Якщо потрібен vision fallback, перевірити Swapper/vision-encoder сервіси.
|
||||
|
||||
> Якщо чат стартує з нуля, достатньо скопіювати цей блок у промт агента, щоб він миттєво зрозумів поточний стан системи.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
## Схема потоку (спрощена)
|
||||
|
||||
```
|
||||
```text
|
||||
TELEGRAM → GATEWAY:9300 → ROUTER:9102 → LLM (Ollama/Swapper)
|
||||
↓ ↓
|
||||
Memory:8000 CrewAI (за потреби)
|
||||
@@ -32,13 +32,19 @@ TELEGRAM → GATEWAY:9300 → ROUTER:9102 → LLM (Ollama/Swapper)
|
||||
| RAG | 9500 | `/health` |
|
||||
| Swapper | 8890 | `/health` |
|
||||
|
||||
Контейнери: `dagi-gateway-node1`, `dagi-staging-router` (або `dagi-router-node1`), `dagi-memory-service-node1`, `dagi-qdrant-node1` тощо. Якщо Router на ноді називається `dagi-staging-router`, у `.env` на сервері задати `ROUTER_URL=http://dagi-staging-router:8000` для Gateway.
|
||||
Контейнери: `dagi-gateway-node1`, `dagi-staging-router` (або `dagi-router-node1`),
|
||||
`dagi-memory-service-node1`, `dagi-qdrant-node1` тощо.
|
||||
Якщо Router на ноді називається `dagi-staging-router`, у `.env` на сервері
|
||||
задати `ROUTER_URL=http://dagi-staging-router:8000` для Gateway.
|
||||
|
||||
---
|
||||
|
||||
## Реєстр агентів (Gateway)
|
||||
|
||||
У `gateway-bot/http_api.py` — **AGENT_REGISTRY**: daarwizz, helion, greenfood, agromatrix, alateya, nutra, druid, clan, eonarch. Кожен агент має webhook `/{agent_id}/telegram/webhook`, prompt-файл і env з Telegram-токеном.
|
||||
У `gateway-bot/http_api.py` — **AGENT_REGISTRY**: daarwizz, helion, greenfood,
|
||||
agromatrix, alateya, nutra, druid, clan, eonarch.
|
||||
Кожен агент має webhook `/{agent_id}/telegram/webhook`, prompt-файл і env
|
||||
з Telegram-токеном.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -489,7 +489,7 @@
|
||||
|
||||
## ⚠️ КРИТИЧНА ПРОБЛЕМА: Vision Crew
|
||||
|
||||
### 4 агенти ЗАБЛОКОВАНІ через відсутність vision-моделей:
|
||||
### 4 агенти ЗАБЛОКОВАНІ через відсутність vision-моделей
|
||||
|
||||
1. **Iris** — Image Analyzer
|
||||
2. **Lumen** — Visual Content Creator
|
||||
@@ -669,4 +669,3 @@ docker restart dagi-router
|
||||
---
|
||||
|
||||
*Документ створено під час повної діагностики агентів NODE2.*
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
## ✅ 1. Моделі — ВСІ ЗБЕРЕЖЕНІ (Ollama)
|
||||
|
||||
### 📦 8 моделей в Ollama (загалом ~118 GB):
|
||||
### 📦 8 моделей в Ollama (загалом ~118 GB)
|
||||
|
||||
| Модель | Розмір | Параметри | Тип | Статус |
|
||||
|--------|--------|-----------|------|--------|
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
---
|
||||
|
||||
### ❌ Видалено з `models/` (не Ollama):
|
||||
### ❌ Видалено з `models/` (не Ollama)
|
||||
|
||||
- **qwen3-vl-32b-instruct** (~130 GB) — vision-модель для мультимодальності
|
||||
- 65.5 GB `.gguf` файл
|
||||
@@ -33,7 +33,7 @@
|
||||
|
||||
**Проблема:** Немає vision-моделей для мультимодальних запитів!
|
||||
|
||||
**Рішення:**
|
||||
**Рішення:**
|
||||
1. Завантажити `llava:13b` через Ollama (~13 GB)
|
||||
2. АБО відновити Qwen3-VL з HuggingFace (якщо потрібен кастомний inference)
|
||||
|
||||
@@ -77,7 +77,7 @@ curl http://localhost:9102/health
|
||||
|
||||
## ✅ 4. DAGI Stack — Частково ПРАЦЮЄ
|
||||
|
||||
### Запущені сервіси:
|
||||
### Запущені сервіси
|
||||
|
||||
| Сервіс | Статус | Порт | Призначення |
|
||||
|--------|--------|------|-------------|
|
||||
@@ -91,7 +91,7 @@ curl http://localhost:9102/health
|
||||
|
||||
---
|
||||
|
||||
### 🤖 12 CrewAI Агентів (4 Workflows):
|
||||
### 🤖 12 CrewAI Агентів (4 Workflows)
|
||||
|
||||
#### 1. **Onboarding Workflow** (3 агенти)
|
||||
- `welcomer` — вітання нових користувачів
|
||||
@@ -123,7 +123,7 @@ curl http://localhost:9010/workflow/list
|
||||
|
||||
## ⚠️ 5. Мультимодальні сервіси — ЧАСТКОВО
|
||||
|
||||
### ✅ Працюють:
|
||||
### ✅ Працюють
|
||||
|
||||
| Сервіс | Порт | Статус | Призначення |
|
||||
|--------|------|--------|-------------|
|
||||
@@ -132,7 +132,7 @@ curl http://localhost:9010/workflow/list
|
||||
| **Agent Cabinet** | 8898 | ✅ Healthy | Управління агентами |
|
||||
| **MeiliSearch** | 7700 | ✅ Running | Текстовий пошук |
|
||||
|
||||
### ❌ НЕ працюють:
|
||||
### ❌ НЕ працюють
|
||||
|
||||
| Сервіс | Порт | Статус | Причина |
|
||||
|--------|------|--------|---------|
|
||||
@@ -145,19 +145,19 @@ curl http://localhost:9010/workflow/list
|
||||
|
||||
## 📊 6. Інфраструктура NODE2
|
||||
|
||||
### Ресурси:
|
||||
### Ресурси
|
||||
- **CPU:** Apple M4 Max (40-core GPU)
|
||||
- **RAM:** 64 GB
|
||||
- **VRAM:** 48 GB (GPU)
|
||||
- **Диск:** ~500 GB вільно (після cleanup)
|
||||
|
||||
### Docker мережа:
|
||||
### Docker мережа
|
||||
- `dagi-network` — всі DAGI сервіси
|
||||
- Bridge для комунікації між контейнерами
|
||||
|
||||
### Ollama:
|
||||
### Ollama
|
||||
- **Версія:** Latest
|
||||
- **URL:** http://localhost:11434
|
||||
- **URL:** [http://localhost:11434](http://localhost:11434)
|
||||
- **Models dir:** `/Users/apple/.ollama/models`
|
||||
|
||||
---
|
||||
@@ -258,14 +258,14 @@ POST http://localhost:9010/workflow/execute
|
||||
|
||||
## ✅ 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)
|
||||
@@ -280,4 +280,3 @@ POST http://localhost:9010/workflow/execute
|
||||
---
|
||||
|
||||
*Документ створено автоматично під час діагностики NODE2 після git cleanup операції.*
|
||||
|
||||
|
||||
@@ -104,7 +104,7 @@ launchctl list | grep node-guardian
|
||||
|
||||
## Крок 4: Перевірка роботи
|
||||
|
||||
### Перевірити логи:
|
||||
### Перевірити логи
|
||||
|
||||
```bash
|
||||
# Якщо запущено через nohup
|
||||
@@ -114,13 +114,13 @@ tail -f /tmp/node-guardian.log
|
||||
tail -f /tmp/node-guardian.log /tmp/node-guardian-error.log
|
||||
```
|
||||
|
||||
### Перевірити в БД (на сервері):
|
||||
### Перевірити в БД (на сервері)
|
||||
|
||||
```bash
|
||||
ssh root@144.76.224.179 "docker exec daarion-postgres psql -U postgres -d daarion -c \"SELECT node_id, swapper_healthy, swapper_models_total, router_healthy, last_heartbeat FROM node_cache WHERE node_id = 'node-2-macbook-m4max';\""
|
||||
```
|
||||
|
||||
### Перевірити в UI:
|
||||
### Перевірити в UI
|
||||
|
||||
Відкрийте `https://daarion.space/nodes/node/node-2-macbook-m4max` та перевірте:
|
||||
- Swapper Service показує моделі ✅
|
||||
@@ -175,4 +175,3 @@ ssh root@144.76.224.179 "docker exec daarion-postgres psql -U postgres -d daario
|
||||
```bash
|
||||
./scripts/setup-node2-agents.sh
|
||||
```
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@ GUARDIAN_INTERVAL=60
|
||||
|
||||
### 2. Запуск Node Guardian
|
||||
|
||||
#### Як фонове завдання (рекомендовано):
|
||||
#### Як фонове завдання (рекомендовано)
|
||||
|
||||
```bash
|
||||
# Створити systemd service
|
||||
@@ -67,7 +67,7 @@ sudo systemctl start node-guardian
|
||||
sudo systemctl status node-guardian
|
||||
```
|
||||
|
||||
#### Або вручну:
|
||||
#### Або вручну
|
||||
|
||||
```bash
|
||||
cd /path/to/microdao-daarion
|
||||
@@ -76,7 +76,7 @@ python3 scripts/node-guardian-loop.py
|
||||
|
||||
### 3. Перевірка роботи
|
||||
|
||||
#### Перевірити логи:
|
||||
#### Перевірити логи
|
||||
|
||||
```bash
|
||||
# Якщо systemd service
|
||||
@@ -85,7 +85,7 @@ sudo journalctl -u node-guardian -f
|
||||
# Або якщо запущено вручну - дивитись stdout
|
||||
```
|
||||
|
||||
#### Перевірити в БД:
|
||||
#### Перевірити в БД
|
||||
|
||||
```sql
|
||||
-- Перевірити чи оновлюються метрики для НОДА2
|
||||
@@ -104,7 +104,7 @@ ORDER BY updated_at DESC
|
||||
LIMIT 1;
|
||||
```
|
||||
|
||||
#### Перевірити Swapper State:
|
||||
#### Перевірити Swapper State
|
||||
|
||||
```sql
|
||||
SELECT
|
||||
@@ -167,7 +167,7 @@ WHERE node_id = 'node-2-macbook-m4max'
|
||||
|
||||
На НОДА1 guardian зазвичай запускається автоматично через docker-compose або systemd.
|
||||
|
||||
### ENV змінні для НОДА1:
|
||||
### ENV змінні для НОДА1
|
||||
|
||||
```bash
|
||||
NODE_ID=node-1-hetzner-gex44
|
||||
@@ -182,7 +182,7 @@ CITY_SERVICE_URL=https://daarion.space/api/city
|
||||
|
||||
## Архітектура
|
||||
|
||||
```
|
||||
```text
|
||||
┌─────────────────┐
|
||||
│ Node Guardian │ (на кожній ноді)
|
||||
│ (loop script) │
|
||||
@@ -214,9 +214,14 @@ CITY_SERVICE_URL=https://daarion.space/api/city
|
||||
|
||||
## Важливі моменти
|
||||
|
||||
1. **Один Router/Swapper для всіх нод у проді**: На НОДА1 є один DAGI Router та один Swapper Service, які обслуговують всі ноди. Guardian на кожній ноді просто збирає метрики та пушить їх в БД з правильним `node_id`.
|
||||
1. **Один Router/Swapper для всіх нод у проді**:
|
||||
На НОДА1 є один DAGI Router та один Swapper Service, які обслуговують всі ноди.
|
||||
Guardian на кожній ноді просто збирає метрики та пушить їх в БД
|
||||
з правильним `node_id`.
|
||||
|
||||
2. **ENV змінні мають пріоритет**: Guardian використовує `NODE_SWAPPER_URL` та `NODE_ROUTER_URL` з ENV, якщо вони встановлені. Це дозволяє для НОДА2 використовувати `localhost`, а для НОДА1 - Docker service names.
|
||||
2. **ENV змінні мають пріоритет**:
|
||||
Guardian використовує `NODE_SWAPPER_URL` та `NODE_ROUTER_URL` з ENV,
|
||||
якщо вони встановлені. Це дозволяє для НОДА2 використовувати `localhost`,
|
||||
а для НОДА1 - Docker service names.
|
||||
|
||||
3. **Heartbeat оновлює node_cache**: Кожен heartbeat оновлює метрики в `node_cache` для конкретного `node_id`, тому дані не перетираються між нодами.
|
||||
|
||||
|
||||
@@ -340,4 +340,3 @@ Returns aggregated dashboard data for the current node.
|
||||
## Changelog
|
||||
|
||||
- **v1.0.0** (2025-11-28): Initial standard based on NODE1/NODE2 audit
|
||||
|
||||
|
||||
@@ -204,22 +204,21 @@ grafana:
|
||||
## 6. Корисні запити для аналізу
|
||||
|
||||
**Hit Rate (кількість успішних запитів з результатами):**
|
||||
```
|
||||
```promql
|
||||
(rag_query_total - rag_query_empty_results_total) / rag_query_total
|
||||
```
|
||||
|
||||
**Average Documents per Query:**
|
||||
```
|
||||
```promql
|
||||
avg(rag_query_documents_retrieved)
|
||||
```
|
||||
|
||||
**DAO Distribution:**
|
||||
```
|
||||
```promql
|
||||
sum by (dao_id) (rag_query_dao_filter_applied)
|
||||
```
|
||||
|
||||
**Token Usage:**
|
||||
```
|
||||
```promql
|
||||
avg(router_rag_query_prompt_tokens_estimated)
|
||||
```
|
||||
|
||||
|
||||
@@ -36,8 +36,14 @@ DAGI Router, DevTools Agent, CrewAI Orchestrator.
|
||||
**Категорії:**
|
||||
- **00-07:** Фундамент (overview, product brief, architecture, API, UI/UX, coding standards, tasks, testing)
|
||||
- **08-13:** Агентська система (onboarding, evolutionary agent, UI, LLM, runtime core, memory)
|
||||
- **14-24:** Модулі та інтерфейс (messenger, projects, follow-ups, co-memory, governance, notifications, integrations, agent-only interface, operator modes, domains/wallet/DAO, agent cards)
|
||||
- **24-50:** Інфраструктура та сервіси (access keys, deployment, security, database, flows, scaling, cost optimization, governance policies, PDP, API Gateway, service mesh, agent isolation, tools, lifecycle, templates, RWA, AI governance, NATS, outbox, usage, LLM proxy, router, messaging, teams, wallet, website integration)
|
||||
- **14-24:** Модулі та інтерфейс
|
||||
(messenger, projects, follow-ups, co-memory, governance, notifications, integrations,
|
||||
agent-only interface, operator modes, domains/wallet/DAO, agent cards)
|
||||
- **24-50:** Інфраструктура та сервіси
|
||||
(access keys, deployment, security, database, flows, scaling, cost optimization,
|
||||
governance policies, PDP, API Gateway, service mesh, agent isolation, tools, lifecycle,
|
||||
templates, RWA, AI governance, NATS, outbox, usage, LLM proxy, router, messaging, teams,
|
||||
wallet, website integration)
|
||||
|
||||
**Детальний опис:** `/cursor/README.md`
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
|
||||
4. Monitor знову бачив < 50 агентів → знову DROP → **НЕСКІНЧЕННИЙ ЦИКЛ!**
|
||||
|
||||
```
|
||||
```text
|
||||
┌─────────────────────────────────────────────────────────────────┐
|
||||
│ Monitor бачить: Agents=9 (< 50) │
|
||||
│ ↓ │
|
||||
@@ -128,4 +128,3 @@ crontab -l
|
||||
Проблема виникала через логічну помилку в monitor-db-stability.sh.
|
||||
Виправлено розділенням на два режими: FULL та SOFT recovery.
|
||||
Тепер DROP DATABASE відбувається тільки при критичній втраті MicroDAOs.
|
||||
|
||||
|
||||
@@ -46,7 +46,7 @@ python3 scripts/seed_full_city_reset.py
|
||||
```
|
||||
|
||||
Очікуваний вивід:
|
||||
```
|
||||
```text
|
||||
🏙️ DAARION City Emergency Recovery
|
||||
============================================================
|
||||
|
||||
@@ -111,7 +111,7 @@ docker exec daarion-postgres psql -U postgres -d daarion -c "
|
||||
```
|
||||
|
||||
Очікуваний результат:
|
||||
```
|
||||
```text
|
||||
slug | name | district | is_platform
|
||||
--------------+-----------------+----------+-------------
|
||||
daarion | DAARION DAO | Core | t
|
||||
@@ -175,13 +175,13 @@ mc cp ./assets/logos/energy-union.png local/daarion-assets/microdao/logo/energy-
|
||||
|
||||
## Що відновлюється
|
||||
|
||||
### ✅ Відновлюється seed-скриптом:
|
||||
### ✅ Відновлюється seed-скриптом
|
||||
|
||||
- 4 базові MicroDAOs (DAARION, Energy Union, GreenFood, Soul)
|
||||
- 4 core агентів NODE1 (DAARWIZZ, Helion, GreenFood Bot, Soul Bot)
|
||||
- Зв'язки агентів з MicroDAOs
|
||||
|
||||
### ❌ НЕ відновлюється автоматично:
|
||||
### ❌ НЕ відновлюється автоматично
|
||||
|
||||
- City Rooms (потрібно запустити `scripts/seed_city_rooms.py`)
|
||||
- DAGI-агенти NODE2 (потрібно запустити `scripts/sync-node2-dagi-agents.py`)
|
||||
@@ -227,4 +227,3 @@ docker compose -f docker-compose.db.yml up -d db
|
||||
```bash
|
||||
docker exec daarion-postgres psql -U postgres -d daarion -c "SELECT slug, logo_url FROM microdao;"
|
||||
```
|
||||
|
||||
|
||||
111
docs/SESSION_STARTER.md
Normal file
111
docs/SESSION_STARTER.md
Normal file
@@ -0,0 +1,111 @@
|
||||
# SESSION STARTER (Documentation + Runtime Truth)
|
||||
|
||||
Date: 2026-02-16
|
||||
Purpose: single context file to start any new session without losing architectural state.
|
||||
|
||||
## Canonical Repo
|
||||
|
||||
- Main working repo: `/Users/apple/github-projects/microdao-daarion`
|
||||
- Runtime on NODE1: `/opt/microdao-daarion`
|
||||
|
||||
Important: keep docs and runtime aligned via explicit drift checks, not assumptions.
|
||||
|
||||
## Core Entry Documents
|
||||
|
||||
1. `PROJECT-MASTER-INDEX.md` (entry point to docs map)
|
||||
2. `config/README.md` (how to add/modify agents)
|
||||
3. `docs/NODA1-AGENT-ARCHITECTURE.md` (node1 architecture and agent wiring)
|
||||
4. `NODA1-SAFE-DEPLOY.md` (safe deployment flow)
|
||||
5. `docs/consolidation/README.md` (docs hub)
|
||||
6. `docs/consolidation/docs_registry_curated.csv` (curated doc truth table)
|
||||
|
||||
## Session Bootstrap (Services + Docs)
|
||||
|
||||
0. Preflight (must pass before any task):
|
||||
```bash
|
||||
bash scripts/session/preflight.sh --expected-root /Users/apple/github-projects/microdao-daarion
|
||||
```
|
||||
|
||||
1. Run integrations bootstrap report:
|
||||
```bash
|
||||
bash scripts/docs/session_bootstrap.sh
|
||||
```
|
||||
Output:
|
||||
- `docs/consolidation/INTEGRATIONS_STATUS_LATEST.md`
|
||||
- `docs/consolidation/INTEGRATIONS_STATUS_<timestamp>.md`
|
||||
|
||||
2. Dry-run docs sync to remotes:
|
||||
```bash
|
||||
bash scripts/docs/docs_sync.sh --dry-run
|
||||
```
|
||||
|
||||
3. Apply docs sync (only after review):
|
||||
```bash
|
||||
bash scripts/docs/docs_sync.sh --apply --targets github,gitea
|
||||
```
|
||||
|
||||
4. Service adapters (Jupyter + Pieces):
|
||||
```bash
|
||||
bash scripts/docs/services_sync.sh --dry-run
|
||||
# apply mode:
|
||||
bash scripts/docs/services_sync.sh --apply
|
||||
```
|
||||
|
||||
5. Docs lint and standards:
|
||||
```bash
|
||||
bash scripts/docs/docs_lint.sh
|
||||
```
|
||||
|
||||
6. Docs backup (explicit run):
|
||||
```bash
|
||||
bash scripts/docs/docs_backup.sh --dry-run
|
||||
bash scripts/docs/docs_backup.sh --apply
|
||||
```
|
||||
|
||||
7. Local scheduler (daily, no auto-push):
|
||||
```bash
|
||||
bash scripts/docs/install_local_cron.sh --schedule "17 9 * * *"
|
||||
```
|
||||
|
||||
## Runtime-First Facts (must re-check each session)
|
||||
|
||||
1. NODE1 branch/SHA:
|
||||
```bash
|
||||
ssh root@<NODE1> "cd /opt/microdao-daarion && git rev-parse --abbrev-ref HEAD && git rev-parse HEAD"
|
||||
```
|
||||
|
||||
2. Core health:
|
||||
```bash
|
||||
curl -sS http://127.0.0.1:9102/health
|
||||
curl -sS http://127.0.0.1:9300/health
|
||||
```
|
||||
|
||||
3. Canary suite:
|
||||
```bash
|
||||
cd /opt/microdao-daarion
|
||||
./ops/canary_all.sh
|
||||
./ops/canary_senpai_osr_guard.sh
|
||||
```
|
||||
|
||||
4. Router endpoint contract:
|
||||
- Active: `POST /v1/agents/{agent_id}/infer`
|
||||
- Not active: `POST /route` (returns 404 on current runtime)
|
||||
|
||||
## NODE3/NODE4 Policy
|
||||
|
||||
- NODE3 and NODE4 remain part of target architecture.
|
||||
- If currently unreachable, mark as `DEGRADED` (not removed).
|
||||
- Re-enable dependent flows only after connectivity + health checks pass.
|
||||
|
||||
## Documentation Status Model
|
||||
|
||||
- `new-canonical`: active docs in canonical repo.
|
||||
- `runtime-fact`: docs/snapshots that reflect current live runtime behavior.
|
||||
- `legacy-worktree`: old but useful strategic docs in `.worktrees/*`.
|
||||
- `legacy-desktop`: docs from old Desktop repo (`MicroDAO 3`).
|
||||
- `needs-triage`: unresolved status.
|
||||
|
||||
## Governance Rule
|
||||
|
||||
No deployment/reconfiguration based only on docs text.
|
||||
Always confirm against live runtime facts (health, canary, config hashes, active endpoints).
|
||||
@@ -1,18 +1,18 @@
|
||||
# 🎯 Стратегія вибору моделей: API vs Локальні
|
||||
|
||||
**Дата**: 2025-11-18
|
||||
**Дата**: 2025-11-18
|
||||
**Питання**: Використовувати Dify/API чи завантажувати важкі моделі?
|
||||
|
||||
---
|
||||
|
||||
## 📊 Поточна ситуація
|
||||
|
||||
### Що вже є на сервері:
|
||||
### Що вже є на сервері
|
||||
|
||||
#### 1. **Локальні моделі (Ollama)** ✅
|
||||
- **qwen3:8b** - вже завантажена (5.2 GB)
|
||||
- **Використання**: DAGI Router використовує для DAARWIZZ, Helion, GREENFOOD
|
||||
- **Переваги**:
|
||||
- **Переваги**:
|
||||
- ✅ Безкоштовно
|
||||
- ✅ Приватно (дані не йдуть в OpenAI)
|
||||
- ✅ Працює офлайн
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
#### 2. **Dify Platform** ✅
|
||||
- **Статус**: Працює, але потребує API ключі
|
||||
- **OPENAI_API_BASE**: https://api.openai.com/v1
|
||||
- **OPENAI_API_BASE**: [https://api.openai.com/v1](https://api.openai.com/v1)
|
||||
- **API Key**: Потрібен (не знайдено в env)
|
||||
- **Використання**: Може використовувати GPT-4V, Claude Vision через API
|
||||
|
||||
@@ -170,7 +170,7 @@ async def _analyze_photo_api(self, image_url: str):
|
||||
"""Використати GPT-4V через API"""
|
||||
import openai
|
||||
openai.api_key = os.getenv("OPENAI_API_KEY")
|
||||
|
||||
|
||||
response = openai.ChatCompletion.create(
|
||||
model="gpt-4-vision-preview",
|
||||
messages=[{
|
||||
@@ -187,7 +187,7 @@ async def _analyze_photo_api(self, image_url: str):
|
||||
---
|
||||
|
||||
### **Сценарій 3: Немає GPU + немає бюджету** ⚠️
|
||||
**Рекомендація**:
|
||||
**Рекомендація**:
|
||||
- ⚠️ **НЕ завантажувати важкі Vision моделі** (буде дуже повільно)
|
||||
- ✅ Використовувати **BLIP-2** (легший, ~1-2 GB)
|
||||
- АБО залишити заглушку поки не з'явиться GPU/бюджет
|
||||
@@ -241,5 +241,4 @@ ssh root@144.76.224.179 "docker exec docker-api-1 env | grep OPENAI_API_KEY"
|
||||
|
||||
---
|
||||
|
||||
*Створено: 2025-11-18*
|
||||
|
||||
## Створено: 2025-11-18
|
||||
|
||||
@@ -609,4 +609,3 @@ describe('Swapper Service Integration', () => {
|
||||
**Last Updated:** 2025-11-22
|
||||
**Maintained by:** Ivan Tytar & DAARION Team
|
||||
**Status:** ✅ Ready for Integration
|
||||
|
||||
|
||||
@@ -136,9 +136,9 @@
|
||||
|
||||
## 📋 Висновок
|
||||
|
||||
### Для поточного стеку DAARION:
|
||||
### Для поточного стеку DAARION
|
||||
|
||||
**✅ Swapper Service — оптимальний вибір**
|
||||
#### ✅ Swapper Service — оптимальний вибір
|
||||
|
||||
**Причини:**
|
||||
1. ✅ Підходить для обмежених ресурсів (Node #2 MacBook)
|
||||
@@ -167,4 +167,3 @@
|
||||
**Last Updated:** 2025-11-22
|
||||
**Decision:** ✅ Swapper Service для поточного стеку
|
||||
**Future Consideration:** vLLM для production high-throughput use cases
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
# Unified Tokenomics for DAARION.city & MicroDAO (Integration-Ready)
|
||||
|
||||
*Version: 1.0 — production-ready (LEGACY)*
|
||||
Version: 1.0 — production-ready (LEGACY)
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -24,4 +24,3 @@
|
||||
- [MicroDAO документація](../microdao/README.md)
|
||||
- [DAARION.city документація](../daarion/README.md)
|
||||
- [Технічна документація для розробки](../cursor/README.md)
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ PARSER — це агент, який перетворює неструктуро
|
||||
|
||||
- **Тип:** Image-Text-to-Text VLM (Vision Language Model)
|
||||
- **Орієнтація:** Документ-орієнтований OCR з layout detection
|
||||
- **GitHub:** https://github.com/QwenLM/Qwen3-ASR-Toolkit (або відповідний репозиторій)
|
||||
- **GitHub:** <https://github.com/QwenLM/Qwen3-ASR-Toolkit> (або відповідний репозиторій)
|
||||
|
||||
### Ключові можливості моделі
|
||||
|
||||
@@ -252,7 +252,7 @@ curl -X POST http://router:9102/route \
|
||||
|
||||
## Архітектура сервісу
|
||||
|
||||
```
|
||||
```text
|
||||
parser-service/
|
||||
├── main.py # FastAPI сервіс
|
||||
├── parser_runtime/ # Runtime для dots.ocr
|
||||
@@ -275,4 +275,3 @@ parser-service/
|
||||
- [TODO: PARSER + RAG Implementation](../TODO-PARSER-RAG.md)
|
||||
- [DAGI Router Documentation](./dagi-router.md)
|
||||
- [CrewAI Orchestrator](./crewai-orchestrator.md)
|
||||
|
||||
|
||||
@@ -270,5 +270,4 @@
|
||||
|
||||
---
|
||||
|
||||
*Документ оновлюється: 2025-11-18*
|
||||
|
||||
## Документ оновлюється: 2025-11-18
|
||||
|
||||
@@ -8,9 +8,9 @@ last_updated: 2024-11-14
|
||||
> **Цей документ є актуальною API специфікацією для DAARION.city & MicroDAO.**
|
||||
> Повна версія API з усіма ендпоінтами. Для MVP-версії див. `api-mvp.md`.
|
||||
|
||||
# API Reference — DAARION.city & MicroDAO
|
||||
## API Reference — DAARION.city & MicroDAO
|
||||
|
||||
*Мінімальний набір MVP-ендпоінтів для інтеграції з DAARION.city*
|
||||
### Мінімальний набір MVP-ендпоінтів для інтеграції з DAARION.city
|
||||
|
||||
---
|
||||
|
||||
@@ -1161,4 +1161,3 @@ Authorization: Bearer {token}
|
||||
**Версія:** 1.1.0
|
||||
**Останнє оновлення:** 2024-11-14
|
||||
*Документ готовий до інтеграції у Cursor, GitHub або будь-який інший проект.*
|
||||
|
||||
|
||||
1
docs/backups/LATEST.txt
Normal file
1
docs/backups/LATEST.txt
Normal file
@@ -0,0 +1 @@
|
||||
/Users/apple/github-projects/microdao-daarion/docs/backups/docs_backup_20260216-022549.tar.gz
|
||||
30
docs/consolidation/INTEGRATIONS_STATUS_20260216-023237.md
Normal file
30
docs/consolidation/INTEGRATIONS_STATUS_20260216-023237.md
Normal file
@@ -0,0 +1,30 @@
|
||||
# Integrations Bootstrap Status
|
||||
|
||||
Generated: 2026-02-16 10:32:37 UTC
|
||||
|
||||
Repo: /Users/apple/github-projects/microdao-daarion/.worktrees/codex-docs-pr
|
||||
|
||||
## Gitea
|
||||
|
||||
- **gitea_http**: OK - http_code=200 (<http://127.0.0.1:3000>)
|
||||
- **gitea_git_remote**: OK - gitea <http://localhost:3000/daarion-admin/microdao-daarion.git>;
|
||||
|
||||
## GitHub
|
||||
|
||||
- **gh_auth**: OK - IvanTytar (keyring)
|
||||
- **github_git_remote**: OK - origin `git@github.com:IvanTytar/microdao-daarion.git`;
|
||||
|
||||
## Jupyter
|
||||
|
||||
- **jupyter_cli**: DEGRADED - jupyter not found in PATH
|
||||
- **notebooks_dir**: OK - /Users/apple/notebooks (ipynb_count=7)
|
||||
|
||||
## Pieces
|
||||
|
||||
- **pieces_extension**: OK - cursor extensions matched=1
|
||||
- **pieces_data_dir**: INFO - /Users/apple/Library/Application Support/Pieces not found
|
||||
|
||||
## Next
|
||||
|
||||
- Run docs sync dry-run: bash scripts/docs/docs_sync.sh --dry-run
|
||||
- Apply sync to remotes: bash scripts/docs/docs_sync.sh --apply --targets github,gitea
|
||||
30
docs/consolidation/INTEGRATIONS_STATUS_LATEST.md
Normal file
30
docs/consolidation/INTEGRATIONS_STATUS_LATEST.md
Normal file
@@ -0,0 +1,30 @@
|
||||
# Integrations Bootstrap Status
|
||||
|
||||
Generated: 2026-02-16 10:25:49 UTC
|
||||
|
||||
Repo: /Users/apple/github-projects/microdao-daarion
|
||||
|
||||
## Gitea
|
||||
|
||||
- **gitea_http**: OK - http_code=200 (<http://127.0.0.1:3000>)
|
||||
- **gitea_git_remote**: OK - gitea <http://localhost:3000/daarion-admin/microdao-daarion.git>;
|
||||
|
||||
## GitHub
|
||||
|
||||
- **gh_auth**: OK - IvanTytar (keyring)
|
||||
- **github_git_remote**: OK - origin `git@github.com:IvanTytar/microdao-daarion.git`;
|
||||
|
||||
## Jupyter
|
||||
|
||||
- **jupyter_cli**: DEGRADED - jupyter not found in PATH
|
||||
- **notebooks_dir**: OK - /Users/apple/notebooks (ipynb_count=7)
|
||||
|
||||
## Pieces
|
||||
|
||||
- **pieces_extension**: OK - cursor extensions matched=1
|
||||
- **pieces_data_dir**: INFO - /Users/apple/Library/Application Support/Pieces not found
|
||||
|
||||
## Next
|
||||
|
||||
- Run docs sync dry-run: bash scripts/docs/docs_sync.sh --dry-run
|
||||
- Apply sync to remotes: bash scripts/docs/docs_sync.sh --apply --targets github,gitea
|
||||
39
docs/consolidation/README.md
Normal file
39
docs/consolidation/README.md
Normal file
@@ -0,0 +1,39 @@
|
||||
# Docs Consolidation Hub
|
||||
|
||||
Single entry point for documentation reconciliation across:
|
||||
- canonical repo docs
|
||||
- legacy repo copies
|
||||
- worktree docs
|
||||
- NODE1 runtime docs snapshot
|
||||
- local notebooks
|
||||
|
||||
## Files
|
||||
|
||||
- `docs_inventory.csv` — machine-readable inventory with classification.
|
||||
- `docs_inventory_summary.txt` — class-level counts.
|
||||
- `docs_registry_curated.csv` — manually curated truth table for key docs (startup + runtime + legacy refs).
|
||||
- `_node1_runtime_docs/` — runtime docs snapshot pulled from NODE1.
|
||||
|
||||
## Classification
|
||||
|
||||
- `runtime-fact` — observed in NODE1 runtime snapshot.
|
||||
- `new-canonical` — canonical docs in active repo (`docs/runbooks`, master index, safe deploy).
|
||||
- `legacy-worktree` — docs from `.worktrees/*`.
|
||||
- `legacy-desktop` — docs from `/Users/apple/Desktop/MicroDAO/MicroDAO 3`.
|
||||
- `needs-triage` — requires manual decision.
|
||||
|
||||
## Rebuild inventory
|
||||
|
||||
```bash
|
||||
python3 /Users/apple/github-projects/microdao-daarion/scripts/docs/build_docs_hub_inventory.py
|
||||
```
|
||||
|
||||
## Service Automation
|
||||
|
||||
```bash
|
||||
bash /Users/apple/github-projects/microdao-daarion/scripts/docs/session_bootstrap.sh
|
||||
bash /Users/apple/github-projects/microdao-daarion/scripts/docs/services_sync.sh --dry-run
|
||||
bash /Users/apple/github-projects/microdao-daarion/scripts/docs/services_sync.sh --apply
|
||||
bash /Users/apple/github-projects/microdao-daarion/scripts/docs/docs_lint.sh
|
||||
bash /Users/apple/github-projects/microdao-daarion/scripts/docs/docs_sync.sh --dry-run
|
||||
```
|
||||
31
docs/consolidation/SOURCES.md
Normal file
31
docs/consolidation/SOURCES.md
Normal file
@@ -0,0 +1,31 @@
|
||||
# Documentation Sources Map
|
||||
|
||||
This file tracks where documentation is collected from for consolidation.
|
||||
|
||||
## Primary
|
||||
- Canonical repo: `/Users/apple/github-projects/microdao-daarion`
|
||||
- Legacy repo: `/Users/apple/Desktop/MicroDAO/MicroDAO 3`
|
||||
- Worktrees:
|
||||
- `/Users/apple/github-projects/microdao-daarion/.worktrees/origin-main`
|
||||
- `/Users/apple/github-projects/microdao-daarion/.worktrees/docs-node1-sync`
|
||||
- NODE1 runtime snapshot mirror:
|
||||
- `/Users/apple/github-projects/microdao-daarion/docs/consolidation/_node1_runtime_docs`
|
||||
- Local notebooks:
|
||||
- `/Users/apple/notebooks`
|
||||
|
||||
## Connectivity/Integrations (verified 2026-02-16)
|
||||
- GitHub CLI: authenticated (`gh auth status` -> account `IvanTytar`, scopes include `repo`)
|
||||
- Gitea web UI: reachable at `http://127.0.0.1:3000` (HTTP 200)
|
||||
- Jupyter CLI: not found in current PATH (`jupyter: command not found`), notebooks directory exists at `/Users/apple/notebooks`
|
||||
- Pieces: Cursor extension found (`meshintelligenttechnologiesinc.pieces-vscode-3.0.1-universal`)
|
||||
- NODE1 SSH: intermittent (periodic `connection refused`), use retry/backoff for snapshot refresh.
|
||||
- NODE3/NODE4: currently unreachable from this workstation and from NODE1.
|
||||
|
||||
## Automation Scripts
|
||||
- `scripts/docs/session_bootstrap.sh` — refreshes integration status and writes `INTEGRATIONS_STATUS_LATEST.md`.
|
||||
- `scripts/docs/docs_sync.sh` — safe docs sync automation with `--dry-run` by default and explicit `--apply`.
|
||||
- `scripts/docs/docs_lint.sh` — markdown lint for canonical documentation.
|
||||
- `scripts/docs/docs_backup.sh` — timestamped docs backup with retention rotation.
|
||||
- `scripts/docs/jupyter_sync.sh` — adapter for Jupyter server API status + notebooks index export.
|
||||
- `scripts/docs/pieces_sync.sh` — adapter for Pieces local runtime/data index + optional API probe.
|
||||
- `scripts/docs/services_sync.sh` — orchestrator for bootstrap + Jupyter + Pieces sync adapters.
|
||||
16
docs/consolidation/docs_registry_curated.csv
Normal file
16
docs/consolidation/docs_registry_curated.csv
Normal file
@@ -0,0 +1,16 @@
|
||||
path,title,status,source,notes,last_verified
|
||||
/Users/apple/github-projects/microdao-daarion/docs/SESSION_STARTER.md,Session Starter,new-canonical,canonical-repo,Primary startup context for new sessions,2026-02-16
|
||||
/Users/apple/github-projects/microdao-daarion/PROJECT-MASTER-INDEX.md,Master Index,new-canonical,canonical-repo,Single entry point for docs navigation,2026-02-16
|
||||
/Users/apple/github-projects/microdao-daarion/config/README.md,Agent Registry README,new-canonical,canonical-repo,Canonical process for adding/modifying agents,2026-02-16
|
||||
/Users/apple/github-projects/microdao-daarion/docs/NODA1-AGENT-ARCHITECTURE.md,NODA1 Agent Architecture,new-canonical,canonical-repo,Architecture and wiring for NODE1 agents,2026-02-16
|
||||
/Users/apple/github-projects/microdao-daarion/NODA1-SAFE-DEPLOY.md,NODA1 Safe Deploy,new-canonical,canonical-repo,Safe deploy workflow and rollback gates,2026-02-16
|
||||
/Users/apple/github-projects/microdao-daarion/docs/runbooks/AGENT_REGISTRY_NODE1_DECISION_2026-02-16.md,Agent Registry Decision,runtime-fact,canonical-repo,Decision log aligned to live NODE1 runtime,2026-02-16
|
||||
/Users/apple/github-projects/microdao-daarion/docs/runbooks/NODE_ARCH_RECONCILIATION_PLAN_2026-02-16.md,Node Arch Reconciliation Plan,runtime-fact,canonical-repo,Runtime-first reconciliation plan across nodes,2026-02-16
|
||||
/Users/apple/github-projects/microdao-daarion/docs/consolidation/_node1_runtime_docs/PROJECT-MASTER-INDEX.md,Runtime Snapshot Master Index,runtime-fact,node1-snapshot,Snapshot from /opt/microdao-daarion,2026-02-16
|
||||
/Users/apple/github-projects/microdao-daarion/docs/consolidation/_node1_runtime_docs/config/README.md,Runtime Snapshot Config README,runtime-fact,node1-snapshot,Snapshot from /opt/microdao-daarion,2026-02-16
|
||||
/Users/apple/github-projects/microdao-daarion/docs/consolidation/_node1_runtime_docs/docs/NODA1-AGENT-ARCHITECTURE.md,Runtime Snapshot NODA1 Architecture,runtime-fact,node1-snapshot,Snapshot from /opt/microdao-daarion,2026-02-16
|
||||
/Users/apple/github-projects/microdao-daarion/.worktrees/origin-main/IMPLEMENTATION-STATUS.md,Implementation Status,legacy-worktree,worktree-origin-main,Legacy strategic doc kept for reference only,2026-02-16
|
||||
/Users/apple/github-projects/microdao-daarion/.worktrees/origin-main/ARCHITECTURE-150-NODES.md,Architecture 150 Nodes,legacy-worktree,worktree-origin-main,Legacy scale architecture reference,2026-02-16
|
||||
/Users/apple/github-projects/microdao-daarion/.worktrees/origin-main/infrastructure/auth/AUTH-IMPLEMENTATION-PLAN.md,Auth Implementation Plan,legacy-worktree,worktree-origin-main,Legacy auth rollout plan,2026-02-16
|
||||
/Users/apple/github-projects/microdao-daarion/.worktrees/origin-main/infrastructure/matrix-gateway/README.md,Matrix Gateway README,legacy-worktree,worktree-origin-main,Legacy matrix gateway reference,2026-02-16
|
||||
/Users/apple/Desktop/MicroDAO/MicroDAO 3/NODA1-CURRENT-STATUS-2026-01-26.md,NODA1 Current Status 2026-01-26,legacy-desktop,desktop-legacy,Old status snapshot from legacy repo,2026-02-16
|
||||
|
13
docs/consolidation/jupyter/JUPYTER_SYNC_LATEST.md
Normal file
13
docs/consolidation/jupyter/JUPYTER_SYNC_LATEST.md
Normal file
@@ -0,0 +1,13 @@
|
||||
# Jupyter Sync Report
|
||||
|
||||
Generated: 2026-02-16 10:25:50 UTC
|
||||
|
||||
- jupyter_cmd: not-found
|
||||
- server_count: 0
|
||||
- api_ok: 0/0
|
||||
- notebooks_dir: /Users/apple/notebooks
|
||||
- notebooks_count: 7
|
||||
|
||||
## API Probes
|
||||
|
||||
- no active jupyter servers discovered
|
||||
8
docs/consolidation/jupyter/notebooks_index_latest.csv
Normal file
8
docs/consolidation/jupyter/notebooks_index_latest.csv
Normal file
@@ -0,0 +1,8 @@
|
||||
path,size_bytes,mtime_epoch
|
||||
"/Users/apple/notebooks/04_latency_profile.ipynb",31210,1760335066
|
||||
"/Users/apple/notebooks/03_window_packing.ipynb",8762,1760334699
|
||||
"/Users/apple/notebooks/02_reranker_ablation.ipynb",26615,1760334615
|
||||
"/Users/apple/notebooks/05_groundedness_eval.ipynb",39210,1760335328
|
||||
"/Users/apple/notebooks/hybrid-search-demo.ipynb",27580,1760307946
|
||||
"/Users/apple/notebooks/01_retrieval_sanity.ipynb",16137,1760308259
|
||||
"/Users/apple/notebooks/ai-stack-demo.ipynb",14607,1760307623
|
||||
|
25
docs/consolidation/pieces/PIECES_SYNC_LATEST.md
Normal file
25
docs/consolidation/pieces/PIECES_SYNC_LATEST.md
Normal file
@@ -0,0 +1,25 @@
|
||||
# Pieces Sync Report
|
||||
|
||||
Generated: 2026-02-16 10:25:50 UTC
|
||||
|
||||
- pieces_extensions_count: 1
|
||||
- pieces_data_dirs_count: 0
|
||||
- pieces_process_count: 2
|
||||
- api_probe_ok: 0/0
|
||||
|
||||
## Extensions
|
||||
|
||||
- /Users/apple/.cursor/extensions/meshintelligenttechnologiesinc.pieces-vscode-3.0.1-universal
|
||||
|
||||
## Data Dirs
|
||||
|
||||
- no pieces data directories found
|
||||
|
||||
## Processes
|
||||
|
||||
- 54969 /Applications/Pieces OS.app/Contents/MacOS/Pieces OS
|
||||
- 55184 /Applications/Pieces.app/Contents/MacOS/Pieces
|
||||
|
||||
## API Probes
|
||||
|
||||
- no api probe ports supplied
|
||||
4
docs/consolidation/pieces/pieces_index_latest.csv
Normal file
4
docs/consolidation/pieces/pieces_index_latest.csv
Normal file
@@ -0,0 +1,4 @@
|
||||
kind,path_or_process
|
||||
extension,"/Users/apple/.cursor/extensions/meshintelligenttechnologiesinc.pieces-vscode-3.0.1-universal"
|
||||
process,"54969 /Applications/Pieces OS.app/Contents/MacOS/Pieces OS"
|
||||
process,"55184 /Applications/Pieces.app/Contents/MacOS/Pieces"
|
||||
|
@@ -2,7 +2,10 @@
|
||||
|
||||
## Що таке MicroDAO
|
||||
|
||||
MicroDAO — це приватна мережа ШІ-агентів для малих спільнот (5-50 учасників). Система дозволяє створювати спільноти (teams) з автоматичним створенням micro-DAO, публічні та приватні канали для спілкування, проєкти з задачами, базу знань (Co-Memory) та приватних ШІ-агентів, які допомагають у роботі команди.
|
||||
MicroDAO — це приватна мережа ШІ-агентів для малих спільнот (5-50 учасників).
|
||||
Система дозволяє створювати спільноти (teams) з автоматичним створенням
|
||||
micro-DAO, публічні та приватні канали для спілкування, проєкти з задачами,
|
||||
базу знань (Co-Memory) та приватних ШІ-агентів, які допомагають у роботі команди.
|
||||
|
||||
## Ключові модулі
|
||||
|
||||
@@ -30,4 +33,3 @@ MicroDAO — це приватна мережа ШІ-агентів для ма
|
||||
- `05_coding_standards.md` — Стандарти кодування
|
||||
- `06_tasks_onboarding_mvp.md` — Задачі для реалізації
|
||||
- `07_testing_checklist_mvp.md` — Чеклист тестування
|
||||
|
||||
|
||||
@@ -195,7 +195,7 @@ MicroDAO складається з:
|
||||
|
||||
### 8.1. Каталоги
|
||||
|
||||
```
|
||||
```text
|
||||
src/
|
||||
api/
|
||||
components/
|
||||
|
||||
@@ -11,12 +11,12 @@
|
||||
|
||||
Надсилає магічний лінк користувачу на email.
|
||||
|
||||
**Body**
|
||||
- **Body**
|
||||
```json
|
||||
{ "email": "user@example.com" }
|
||||
```
|
||||
|
||||
**Response**
|
||||
- **Response**
|
||||
`204 No Content`
|
||||
|
||||
---
|
||||
@@ -25,12 +25,12 @@
|
||||
|
||||
Обмін коду з email-лінка на JWT.
|
||||
|
||||
**Body**
|
||||
- **Body**
|
||||
```json
|
||||
{ "code": "XXXXXX" }
|
||||
```
|
||||
|
||||
**Response 200**
|
||||
- **Response 200**
|
||||
```json
|
||||
{
|
||||
"token": "jwt-string",
|
||||
@@ -50,12 +50,12 @@
|
||||
|
||||
Створює нову спільноту (micro-DAO).
|
||||
|
||||
**Body**
|
||||
- **Body**
|
||||
```json
|
||||
{ "name": "My Team" }
|
||||
```
|
||||
|
||||
**Response 201**
|
||||
- **Response 201**
|
||||
```json
|
||||
{
|
||||
"id": "t_123",
|
||||
@@ -71,12 +71,12 @@
|
||||
|
||||
Оновлює налаштування спільноти.
|
||||
|
||||
**Body**
|
||||
- **Body**
|
||||
```json
|
||||
{ "mode": "public" | "confidential" }
|
||||
```
|
||||
|
||||
**Response 200**
|
||||
- **Response 200**
|
||||
```json
|
||||
{
|
||||
"id": "t_123",
|
||||
@@ -91,7 +91,7 @@
|
||||
|
||||
Список моїх спільнот.
|
||||
|
||||
**Response**
|
||||
- **Response**
|
||||
```json
|
||||
{
|
||||
"items": [
|
||||
@@ -109,7 +109,7 @@
|
||||
|
||||
Створює канал.
|
||||
|
||||
**Body**
|
||||
- **Body**
|
||||
```json
|
||||
{
|
||||
"team_id": "t_123",
|
||||
@@ -119,7 +119,7 @@
|
||||
}
|
||||
```
|
||||
|
||||
**Response 201**
|
||||
- **Response 201**
|
||||
```json
|
||||
{
|
||||
"id": "c_123",
|
||||
@@ -136,11 +136,11 @@
|
||||
|
||||
Отримує повідомлення каналу (cursor pagination).
|
||||
|
||||
**Query params**
|
||||
* `cursor` (optional)
|
||||
* `limit` (1–200)
|
||||
- **Query params**
|
||||
- `cursor` (optional)
|
||||
- `limit` (1–200)
|
||||
|
||||
**Response**
|
||||
- **Response**
|
||||
```json
|
||||
{
|
||||
"items": [
|
||||
@@ -164,7 +164,7 @@
|
||||
|
||||
Надсилає повідомлення.
|
||||
|
||||
**Body**
|
||||
- **Body**
|
||||
```json
|
||||
{
|
||||
"kind": "text",
|
||||
@@ -172,7 +172,7 @@
|
||||
}
|
||||
```
|
||||
|
||||
**Response 201**
|
||||
- **Response 201**
|
||||
```json
|
||||
{
|
||||
"id": "m_123",
|
||||
@@ -190,7 +190,7 @@
|
||||
|
||||
Створює follow-up із повідомлення.
|
||||
|
||||
**Body**
|
||||
- **Body**
|
||||
```json
|
||||
{
|
||||
"team_id": "t_123",
|
||||
@@ -200,7 +200,7 @@
|
||||
}
|
||||
```
|
||||
|
||||
**Response 201**
|
||||
- **Response 201**
|
||||
```json
|
||||
{
|
||||
"id": "fu_1",
|
||||
@@ -214,12 +214,12 @@
|
||||
|
||||
Список follow-up.
|
||||
|
||||
**Query**
|
||||
* `assignee` (optional)
|
||||
* `status` (optional)
|
||||
* `cursor` (optional)
|
||||
- **Query**
|
||||
- `assignee` (optional)
|
||||
- `status` (optional)
|
||||
- `cursor` (optional)
|
||||
|
||||
**Response**
|
||||
- **Response**
|
||||
```json
|
||||
{
|
||||
"items": [
|
||||
@@ -241,7 +241,7 @@
|
||||
|
||||
Створює проєкт.
|
||||
|
||||
**Body**
|
||||
- **Body**
|
||||
```json
|
||||
{
|
||||
"team_id": "t_123",
|
||||
@@ -250,7 +250,7 @@
|
||||
}
|
||||
```
|
||||
|
||||
**Response**
|
||||
- **Response**
|
||||
```json
|
||||
{
|
||||
"id": "p_1",
|
||||
@@ -265,7 +265,7 @@
|
||||
|
||||
Список проєктів.
|
||||
|
||||
**Response**
|
||||
- **Response**
|
||||
```json
|
||||
{ "items": [ { "id": "p_1", "name": "Website Launch" } ] }
|
||||
```
|
||||
@@ -276,7 +276,7 @@
|
||||
|
||||
Створює задачу.
|
||||
|
||||
**Body**
|
||||
- **Body**
|
||||
```json
|
||||
{
|
||||
"title": "Design homepage",
|
||||
@@ -284,7 +284,7 @@
|
||||
}
|
||||
```
|
||||
|
||||
**Response 201**
|
||||
- **Response 201**
|
||||
```json
|
||||
{
|
||||
"id": "task_1",
|
||||
@@ -299,10 +299,10 @@
|
||||
|
||||
Отримує задачі.
|
||||
|
||||
**Query**
|
||||
* `status` (optional)
|
||||
- **Query**
|
||||
- `status` (optional)
|
||||
|
||||
**Response**
|
||||
- **Response**
|
||||
```json
|
||||
{
|
||||
"items": [
|
||||
@@ -323,7 +323,7 @@
|
||||
|
||||
Список приватних агентів.
|
||||
|
||||
**Response**
|
||||
- **Response**
|
||||
```json
|
||||
{
|
||||
"items": [
|
||||
@@ -343,7 +343,7 @@
|
||||
|
||||
Створює агента.
|
||||
|
||||
**Body**
|
||||
- **Body**
|
||||
```json
|
||||
{
|
||||
"owner_kind": "team",
|
||||
@@ -354,7 +354,7 @@
|
||||
}
|
||||
```
|
||||
|
||||
**Response**
|
||||
- **Response**
|
||||
```json
|
||||
{
|
||||
"id": "ag_1",
|
||||
@@ -370,11 +370,11 @@
|
||||
|
||||
Глобальний пошук по команді.
|
||||
|
||||
**Query**
|
||||
* `q` — текст
|
||||
* `scope`: `messages | files | docs | tasks | people`
|
||||
- **Query**
|
||||
- `q` — текст
|
||||
- `scope`: `messages | files | docs | tasks | people`
|
||||
|
||||
**Response**
|
||||
- **Response**
|
||||
```json
|
||||
{
|
||||
"results": [
|
||||
@@ -391,13 +391,13 @@
|
||||
|
||||
## 8. Errors (узагальнення)
|
||||
|
||||
* **400** — неправильні дані
|
||||
* **401** — без авторизації
|
||||
* **403** — заборонено (немає прав)
|
||||
* **404** — не знайдено
|
||||
* **409** — конфлікт
|
||||
* **429** — rate limit
|
||||
* **500** — помилка сервера
|
||||
- **400** — неправильні дані
|
||||
- **401** — без авторизації
|
||||
- **403** — заборонено (немає прав)
|
||||
- **404** — не знайдено
|
||||
- **409** — конфлікт
|
||||
- **429** — rate limit
|
||||
- **500** — помилка сервера
|
||||
|
||||
Cursor повинен обробляти помилки через toast + лог у консоль.
|
||||
|
||||
@@ -409,6 +409,6 @@ Cursor повинен обробляти помилки через toast + ло
|
||||
|
||||
Він узятий з офіційної специфікації MicroDAO і адаптований для:
|
||||
|
||||
* автоматичної генерації типів,
|
||||
* швидкої розробки фронтенду,
|
||||
* мінімізації зайвих деталей.
|
||||
- автоматичної генерації типів,
|
||||
- швидкої розробки фронтенду,
|
||||
- мінімізації зайвих деталей.
|
||||
|
||||
@@ -108,7 +108,7 @@
|
||||
|
||||
**UI структура:**
|
||||
|
||||
```
|
||||
```text
|
||||
---
|
||||
| Назва спільноти |
|
||||
| Опис |
|
||||
@@ -144,7 +144,7 @@
|
||||
|
||||
Структура:
|
||||
|
||||
```
|
||||
```text
|
||||
---
|
||||
## | Sidebar (список каналів) |
|
||||
|
||||
@@ -176,7 +176,7 @@
|
||||
|
||||
### 4.3. Messages Stream
|
||||
|
||||
#### Повідомлення містить:
|
||||
#### Повідомлення містить
|
||||
- Аватар автора
|
||||
- Ім'я
|
||||
- Час
|
||||
@@ -209,7 +209,7 @@ API:
|
||||
|
||||
Простий інпут:
|
||||
|
||||
```
|
||||
```text
|
||||
[Написати повідомлення… ] (Кнопка Надіслати)
|
||||
```
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
## 2. Архітектура проєкту
|
||||
|
||||
```
|
||||
```text
|
||||
src/
|
||||
api/ // Typed API clients
|
||||
components/ // UI components (buttons, inputs, modals)
|
||||
@@ -34,7 +34,7 @@ routes/ // Route definitions
|
||||
store/ // Zustand stores (optional)
|
||||
styles/ // Global CSS/tokens
|
||||
utils/ // Formatting, validation
|
||||
```
|
||||
```text
|
||||
|
||||
- `features/*` містять логіку конкретних модулів.
|
||||
- `components/*` — лише dumb UI-компоненти (без бізнес-логіки).
|
||||
@@ -51,18 +51,18 @@ utils/ // Formatting, validation
|
||||
"strict": true
|
||||
}
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
### 3.2. Заборонено
|
||||
|
||||
* `any`
|
||||
* `!` non-null assertion (за винятком рідкісних випадків)
|
||||
* глобальний mutable state
|
||||
- `any`
|
||||
- `!` non-null assertion (за винятком рідкісних випадків)
|
||||
- глобальний mutable state
|
||||
|
||||
### 3.3. API-типи
|
||||
|
||||
* Генеруємо типи з API Snapshot / OpenAPI.
|
||||
* Типи для відповідей зберігаються в `src/api/types.ts`.
|
||||
- Генеруємо типи з API Snapshot / OpenAPI.
|
||||
- Типи для відповідей зберігаються в `src/api/types.ts`.
|
||||
|
||||
## 4. React Query (network layer)
|
||||
|
||||
@@ -87,31 +87,31 @@ export async function api<T>(path: string, options?: RequestInit): Promise<T> {
|
||||
|
||||
return res.json();
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
### 4.2. Query Keys
|
||||
|
||||
```
|
||||
```text
|
||||
["teams"]
|
||||
["teams", teamId]
|
||||
["channels", teamId]
|
||||
["messages", channelId]
|
||||
["followups", teamId]
|
||||
["projects", teamId]
|
||||
```
|
||||
```text
|
||||
|
||||
## 5. Стандарти компонентів
|
||||
|
||||
### 5.1. Іменування
|
||||
|
||||
* Компоненти: `PascalCase`
|
||||
* Хуки: `useCamelCase`
|
||||
* Файли: `camel-case.tsx`
|
||||
* Папки: `kebab-case`
|
||||
- Компоненти: `PascalCase`
|
||||
- Хуки: `useCamelCase`
|
||||
- Файли: `camel-case.tsx`
|
||||
- Папки: `kebab-case`
|
||||
|
||||
### 5.2. Компонент повинен мати:
|
||||
### 5.2. Компонент повинен мати
|
||||
|
||||
* Чіткий props-інтерфейс:
|
||||
- Чіткий props-інтерфейс:
|
||||
|
||||
```ts
|
||||
interface MyCompProps {
|
||||
@@ -119,8 +119,8 @@ export async function api<T>(path: string, options?: RequestInit): Promise<T> {
|
||||
onClick: () => void;
|
||||
}
|
||||
```
|
||||
* Внутрішній стан не змішується з зовнішнім API-станом.
|
||||
* Міжкомпонентна логіка виноситься в хуки (наприклад: `useMessages(channelId)`).
|
||||
- Внутрішній стан не змішується з зовнішнім API-станом.
|
||||
- Міжкомпонентна логіка виноситься в хуки (наприклад: `useMessages(channelId)`).
|
||||
|
||||
## 6. Обробка помилок
|
||||
|
||||
@@ -143,20 +143,20 @@ POST — без retry.
|
||||
|
||||
Всі тексти повинні бути в словнику:
|
||||
|
||||
```
|
||||
```text
|
||||
src/i18n/uk.json
|
||||
src/i18n/en.json
|
||||
```
|
||||
```text
|
||||
|
||||
Формат ключів:
|
||||
|
||||
```
|
||||
```text
|
||||
onboarding.welcome_title
|
||||
onboarding.next
|
||||
chat.send
|
||||
chat.input_placeholder
|
||||
followup.create
|
||||
```
|
||||
```text
|
||||
|
||||
Форсувати одразу правильну структуру.
|
||||
|
||||
@@ -164,18 +164,18 @@ followup.create
|
||||
|
||||
### 8.1. Кольори
|
||||
|
||||
```
|
||||
```text
|
||||
--primary: #3F51F5;
|
||||
--success: #43A047;
|
||||
--error: #E53935;
|
||||
--gray-100: #F8F9FA;
|
||||
--gray-200: #ECEFF1;
|
||||
--gray-800: #263238;
|
||||
```
|
||||
```text
|
||||
|
||||
### 8.2. Типографіка
|
||||
|
||||
* System font stack:
|
||||
- System font stack:
|
||||
`"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto`
|
||||
|
||||
### 8.3. Контрасти
|
||||
@@ -184,12 +184,12 @@ followup.create
|
||||
|
||||
## 9. Робота з WebSockets
|
||||
|
||||
* Використовуємо один хук: `useChannelStream(channelId)`.
|
||||
* WS підключається коли відкрито чат.
|
||||
* Події:
|
||||
- Використовуємо один хук: `useChannelStream(channelId)`.
|
||||
- WS підключається коли відкрито чат.
|
||||
- Події:
|
||||
|
||||
* `message.created`
|
||||
* `message.updated`
|
||||
- `message.created`
|
||||
- `message.updated`
|
||||
|
||||
Не зберігати WS-стан у глобальному store.
|
||||
|
||||
@@ -197,11 +197,11 @@ followup.create
|
||||
|
||||
Що треба **вимкнути** у коді, щоб не перевантажити ранніх користувачів:
|
||||
|
||||
* Без drag'n'drop для файлів.
|
||||
* Без реакцій (emoji).
|
||||
* Без WYSIWYG редактора.
|
||||
* Без Co-Memory (файли/документи), лише stub.
|
||||
* Без granular RBAC.
|
||||
- Без drag'n'drop для файлів.
|
||||
- Без реакцій (emoji).
|
||||
- Без WYSIWYG редактора.
|
||||
- Без Co-Memory (файли/документи), лише stub.
|
||||
- Без granular RBAC.
|
||||
|
||||
## 11. Патерни, які Cursor повинен дотримуватися
|
||||
|
||||
@@ -213,7 +213,7 @@ followup.create
|
||||
|
||||
## 12. Приклад робочого промта для Cursor
|
||||
|
||||
```
|
||||
```text
|
||||
You are a senior React/TS engineer.
|
||||
|
||||
Implement Step 2 of the onboarding flow (/onboarding).
|
||||
@@ -226,7 +226,7 @@ Specs:
|
||||
Please output:
|
||||
- list of files to modify
|
||||
- code diff
|
||||
```
|
||||
```text
|
||||
|
||||
## 13. Мета документа
|
||||
|
||||
@@ -234,8 +234,8 @@ Please output:
|
||||
|
||||
Він гарантує:
|
||||
|
||||
* узгоджений стиль,
|
||||
* передбачуваний код,
|
||||
* мінімум помилок,
|
||||
* легку підтримку,
|
||||
* зрозумілість структури для нових девелоперів.
|
||||
- узгоджений стиль,
|
||||
- передбачуваний код,
|
||||
- мінімум помилок,
|
||||
- легку підтримку,
|
||||
- зрозумілість структури для нових девелоперів.
|
||||
|
||||
@@ -98,18 +98,18 @@ UI: дві великі карточки:
|
||||
```
|
||||
|
||||
**Acceptance Criteria:**
|
||||
* Після успіху → Step 5.
|
||||
* Канал створений і додається до списку каналів у state.
|
||||
- Після успіху → Step 5.
|
||||
- Канал створений і додається до списку каналів у state.
|
||||
|
||||
### Task A6 — Step 5: Agent & memory settings (POST /agents)
|
||||
|
||||
**Specs:**
|
||||
UI:
|
||||
|
||||
* toggle: "Увімкнути приватного агента"
|
||||
* select: мова агента
|
||||
* select: профіль агента
|
||||
* select: memory depth
|
||||
- toggle: "Увімкнути приватного агента"
|
||||
- select: мова агента
|
||||
- select: профіль агента
|
||||
- select: memory depth
|
||||
|
||||
API:
|
||||
|
||||
@@ -124,29 +124,29 @@ API:
|
||||
"role": "general",
|
||||
"scopes": ["chat"]
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
2. Якщо OFF → skip
|
||||
|
||||
**Acceptance Criteria:**
|
||||
|
||||
* Вибір зберігається в onboarding state.
|
||||
* API викликається тільки якщо агент включений.
|
||||
* Після успіху → Step 6.
|
||||
- Вибір зберігається в onboarding state.
|
||||
- API викликається тільки якщо агент включений.
|
||||
- Після успіху → Step 6.
|
||||
|
||||
### Task A7 — Step 6: Invite (UI only)
|
||||
|
||||
**Specs:**
|
||||
UI:
|
||||
|
||||
* Заголовок: "Спільнота створена!"
|
||||
* Показати посилання-запрошення (stub: `/invite?t=ID`).
|
||||
* Кнопка: "Перейти в чат".
|
||||
- Заголовок: "Спільнота створена!"
|
||||
- Показати посилання-запрошення (stub: `/invite?t=ID`).
|
||||
- Кнопка: "Перейти в чат".
|
||||
|
||||
**Acceptance Criteria:**
|
||||
|
||||
* Немає API.
|
||||
* При натисканні — redirect до `/t/:teamId/c/:channelId`.
|
||||
- Немає API.
|
||||
- При натисканні — redirect до `/t/:teamId/c/:channelId`.
|
||||
|
||||
## BLOCK B — CHAT CORE
|
||||
|
||||
@@ -154,58 +154,58 @@ UI:
|
||||
|
||||
**Specs:**
|
||||
|
||||
* Зробити компонент `SidebarChannels`.
|
||||
* Отримати список каналів командою:
|
||||
- Зробити компонент `SidebarChannels`.
|
||||
- Отримати список каналів командою:
|
||||
|
||||
* Використати локальний state (оновлює онбординг).
|
||||
* У реальному додатку — GET `/teams/{id}/channels` (можна додати).
|
||||
* Показати активний канал.
|
||||
- Використати локальний state (оновлює онбординг).
|
||||
- У реальному додатку — GET `/teams/{id}/channels` (можна додати).
|
||||
- Показати активний канал.
|
||||
|
||||
**Acceptance Criteria:**
|
||||
|
||||
* Sidebar показує всі канали.
|
||||
* Active канал підсвічений.
|
||||
- Sidebar показує всі канали.
|
||||
- Active канал підсвічений.
|
||||
|
||||
### Task B2 — Messages Stream (GET /channels/{id}/messages)
|
||||
|
||||
**Specs:**
|
||||
|
||||
* Компонент: `MessagesStream`.
|
||||
* Пагінація: cursor-based scroll.
|
||||
* Рендер: avatar + name + time + text.
|
||||
* Confidential → body_enc (можна stub дешифрування).
|
||||
- Компонент: `MessagesStream`.
|
||||
- Пагінація: cursor-based scroll.
|
||||
- Рендер: avatar + name + time + text.
|
||||
- Confidential → body_enc (можна stub дешифрування).
|
||||
|
||||
**Acceptance Criteria:**
|
||||
|
||||
* Стрічка відображає повідомлення.
|
||||
* При скролі догори → підвантаження старих.
|
||||
- Стрічка відображає повідомлення.
|
||||
- При скролі догори → підвантаження старих.
|
||||
|
||||
### Task B3 — Composer (POST /messages)
|
||||
|
||||
**Specs:**
|
||||
|
||||
* Компонент: `MessageComposer`.
|
||||
* Input + кнопка "Надіслати".
|
||||
* Enter → відправка.
|
||||
* Shift+Enter → новий рядок.
|
||||
- Компонент: `MessageComposer`.
|
||||
- Input + кнопка "Надіслати".
|
||||
- Enter → відправка.
|
||||
- Shift+Enter → новий рядок.
|
||||
|
||||
**Acceptance Criteria:**
|
||||
|
||||
* Повідомлення додається в стрічку без перезавантаження.
|
||||
* Порожній інпут → заборонити надсилання.
|
||||
- Повідомлення додається в стрічку без перезавантаження.
|
||||
- Порожній інпут → заборонити надсилання.
|
||||
|
||||
### Task B4 — Follow-up creation (POST /followups)
|
||||
|
||||
**Specs:**
|
||||
|
||||
* Контекстне меню у повідомленні: "Створити follow-up".
|
||||
* Модалка: назва (автоматично), assignee (список членів), due.
|
||||
* API: POST `/followups`.
|
||||
- Контекстне меню у повідомленні: "Створити follow-up".
|
||||
- Модалка: назва (автоматично), assignee (список членів), due.
|
||||
- API: POST `/followups`.
|
||||
|
||||
**Acceptance Criteria:**
|
||||
|
||||
* Follow-up створюється успішно.
|
||||
* Помилки показуються через toast.
|
||||
- Follow-up створюється успішно.
|
||||
- Помилки показуються через toast.
|
||||
|
||||
## BLOCK C — PROJECTS & TASKS
|
||||
|
||||
@@ -213,39 +213,39 @@ UI:
|
||||
|
||||
**Specs:**
|
||||
|
||||
* Вкладка "Проєкти".
|
||||
* Список проєктів (назва).
|
||||
* Кнопка "Створити проєкт".
|
||||
- Вкладка "Проєкти".
|
||||
- Список проєктів (назва).
|
||||
- Кнопка "Створити проєкт".
|
||||
|
||||
**Acceptance Criteria:**
|
||||
|
||||
* Працює рендер списку.
|
||||
* Порожній стан: "Проєкти ще не створені".
|
||||
- Працює рендер списку.
|
||||
- Порожній стан: "Проєкти ще не створені".
|
||||
|
||||
### Task C2 — Create Project (POST /projects)
|
||||
|
||||
**Specs:**
|
||||
|
||||
* Модалка → створення нового проєкту.
|
||||
* Поля: назва, visibility (public/confidential).
|
||||
* API: POST `/projects`.
|
||||
- Модалка → створення нового проєкту.
|
||||
- Поля: назва, visibility (public/confidential).
|
||||
- API: POST `/projects`.
|
||||
|
||||
**Acceptance Criteria:**
|
||||
|
||||
* Новий проєкт зʼявляється в списку.
|
||||
- Новий проєкт зʼявляється в списку.
|
||||
|
||||
### Task C3 — Tasks Board (GET/POST /projects/{id}/tasks)
|
||||
|
||||
**Specs:**
|
||||
|
||||
* 3 колонки: backlog, in_progress, done.
|
||||
* Карточка задачі: title + status.
|
||||
* При кліку → змінити статус.
|
||||
- 3 колонки: backlog, in_progress, done.
|
||||
- Карточка задачі: title + status.
|
||||
- При кліку → змінити статус.
|
||||
|
||||
**Acceptance Criteria:**
|
||||
|
||||
* Задачі змінюють статус (PATCH можна stub: просто оновлювати client state).
|
||||
* Мінімальний Kanban працює.
|
||||
- Задачі змінюють статус (PATCH можна stub: просто оновлювати client state).
|
||||
- Мінімальний Kanban працює.
|
||||
|
||||
## BLOCK D — AGENTS
|
||||
|
||||
@@ -253,28 +253,28 @@ UI:
|
||||
|
||||
**Specs:**
|
||||
|
||||
* Вкладка "Агенти".
|
||||
* Показати всіх агентів команди.
|
||||
- Вкладка "Агенти".
|
||||
- Показати всіх агентів команди.
|
||||
|
||||
**Acceptance Criteria:**
|
||||
|
||||
* Один агент "Team Assistant" відображається.
|
||||
- Один агент "Team Assistant" відображається.
|
||||
|
||||
### Task D2 — Agent Chat (stub)
|
||||
|
||||
**Specs:**
|
||||
|
||||
* Створити окремий чат з агентом:
|
||||
- Створити окремий чат з агентом:
|
||||
|
||||
* `MessageComposer`
|
||||
* потік повідомлень (локальний state)
|
||||
* В API-запиті викликати зовнішній LLM (можна mock)
|
||||
* Зберігати історію до reload.
|
||||
- `MessageComposer`
|
||||
- потік повідомлень (локальний state)
|
||||
- В API-запиті викликати зовнішній LLM (можна mock)
|
||||
- Зберігати історію до reload.
|
||||
|
||||
**Acceptance Criteria:**
|
||||
|
||||
* Агент відповідає у вигляді тексту.
|
||||
* Історія видно в UI.
|
||||
- Агент відповідає у вигляді тексту.
|
||||
- Історія видно в UI.
|
||||
|
||||
## BLOCK E — FINALIZATION
|
||||
|
||||
@@ -282,43 +282,43 @@ UI:
|
||||
|
||||
**Specs:**
|
||||
|
||||
* Після Step 6 redirect:
|
||||
- Після Step 6 redirect:
|
||||
`/t/:teamId/c/:channelId`
|
||||
|
||||
**Acceptance Criteria:**
|
||||
|
||||
* Після онбордингу користувач потрапляє у свій перший канал.
|
||||
- Після онбордингу користувач потрапляє у свій перший канал.
|
||||
|
||||
### Task E2 — Mobile adaptation
|
||||
|
||||
**Specs:**
|
||||
|
||||
* Sidebar → Drawer
|
||||
* Composer sticky bottom
|
||||
* Onboarding → одна колонка
|
||||
- Sidebar → Drawer
|
||||
- Composer sticky bottom
|
||||
- Onboarding → одна колонка
|
||||
|
||||
**Acceptance Criteria:**
|
||||
|
||||
* Мобільна версія не ламається.
|
||||
- Мобільна версія не ламається.
|
||||
|
||||
### Task E3 — Error Handling Audit
|
||||
|
||||
**Specs:**
|
||||
Перевірити всі виклики API:
|
||||
|
||||
* login
|
||||
* teams
|
||||
* channels
|
||||
* messages
|
||||
* followups
|
||||
* projects
|
||||
* tasks
|
||||
* agents
|
||||
- login
|
||||
- teams
|
||||
- channels
|
||||
- messages
|
||||
- followups
|
||||
- projects
|
||||
- tasks
|
||||
- agents
|
||||
|
||||
**Acceptance Criteria:**
|
||||
|
||||
* Усі помилки показуються через toast.
|
||||
* Немає uncaught exceptions у консолі.
|
||||
- Усі помилки показуються через toast.
|
||||
- Немає uncaught exceptions у консолі.
|
||||
|
||||
## Кінець документа
|
||||
|
||||
@@ -327,6 +327,6 @@ UI:
|
||||
Кожна задача може бути надіслана як окремий prompt,
|
||||
Cursor повинен завжди відповідати:
|
||||
|
||||
* списком файлів,
|
||||
* diff,
|
||||
* коротким summary.
|
||||
- списком файлів,
|
||||
- diff,
|
||||
- коротким summary.
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
---
|
||||
|
||||
# 1. Мета
|
||||
## 1. Мета
|
||||
|
||||
Замінити класичні форми/кроки онбордингу повністю **агентським інтерфейсом**.
|
||||
Увесь onboarding виконується через `AgentOnboardingChat`, який:
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
---
|
||||
|
||||
# 2. Загальна архітектура
|
||||
## 2. Загальна архітектура
|
||||
|
||||
Усі дії будуються на:
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
|
||||
Компоненти:
|
||||
|
||||
```
|
||||
```text
|
||||
src/features/onboarding-agent/
|
||||
AgentOnboardingChat.tsx
|
||||
useOnboardingState.ts
|
||||
@@ -44,11 +44,11 @@ src/features/onboarding-agent/
|
||||
script.json
|
||||
parser.ts
|
||||
transitions.ts
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 3. State Machine
|
||||
## 3. State Machine
|
||||
|
||||
```ts
|
||||
type OnboardingStep =
|
||||
@@ -63,16 +63,16 @@ type OnboardingStep =
|
||||
| "ask_agent_prefs"
|
||||
| "ask_invites"
|
||||
| "done";
|
||||
```
|
||||
```text
|
||||
|
||||
Перехід між кроками базується на:
|
||||
|
||||
* відповіді користувача,
|
||||
* успішності API-виклику.
|
||||
- відповіді користувача,
|
||||
- успішності API-виклику.
|
||||
|
||||
---
|
||||
|
||||
# 4. Повний сценарій діалогу (репліки агента)
|
||||
## 4. Повний сценарій діалогу (репліки агента)
|
||||
|
||||
Нижче — готовий сценарій, який можна покласти в JSON або хардкод.
|
||||
|
||||
@@ -132,8 +132,8 @@ type OnboardingStep =
|
||||
|
||||
Після відповіді:
|
||||
|
||||
* map → `"public"` / `"confidential"`
|
||||
* `PATCH /teams/{teamId}`
|
||||
- map → `"public"` / `"confidential"`
|
||||
- `PATCH /teams/{teamId}`
|
||||
→ `ask_channel_name`.
|
||||
|
||||
---
|
||||
@@ -158,8 +158,8 @@ type OnboardingStep =
|
||||
|
||||
Mapping:
|
||||
|
||||
* `public` → `type: "public"`
|
||||
* `private` → `type: "group"`
|
||||
- `public` → `type: "public"`
|
||||
- `private` → `type: "group"`
|
||||
|
||||
API:
|
||||
`POST /channels`
|
||||
@@ -177,8 +177,8 @@ API:
|
||||
|
||||
Очікувані відповіді: так / ні.
|
||||
|
||||
* Якщо «ні» → `ask_invites`
|
||||
* Якщо «так» → `ask_agent_prefs`
|
||||
- Якщо «ні» → `ask_invites`
|
||||
- Якщо «так» → `ask_agent_prefs`
|
||||
|
||||
---
|
||||
|
||||
@@ -242,7 +242,7 @@ redirect → `/t/:teamId/c/:channelId`.
|
||||
|
||||
---
|
||||
|
||||
# 5. Intent Parser (як агент розуміє відповіді)
|
||||
## 5. Intent Parser (як агент розуміє відповіді)
|
||||
|
||||
Мінімальний підхід (regex):
|
||||
|
||||
@@ -251,26 +251,26 @@ function parseMode(input: string) {
|
||||
if (input.match(/1|пуб/i)) return "public";
|
||||
if (input.match(/2|прив/i)) return "confidential";
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
```ts
|
||||
function parseYesNo(input: string) {
|
||||
if (input.match(/^так|yes|y$/i)) return true;
|
||||
if (input.match(/^ні|no|n$/i)) return false;
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
Або гібридний:
|
||||
|
||||
* парсимо regex,
|
||||
* якщо незрозуміло → питаємо LLM:
|
||||
- парсимо regex,
|
||||
- якщо незрозуміло → питаємо LLM:
|
||||
*"Чи відповідь користувача означає Так/Ні/Інше?"*
|
||||
|
||||
---
|
||||
|
||||
# 6. Компонент `AgentOnboardingChat.tsx`
|
||||
## 6. Компонент `AgentOnboardingChat.tsx`
|
||||
|
||||
### Мінімальна структура:
|
||||
### Мінімальна структура
|
||||
|
||||
```tsx
|
||||
export function AgentOnboardingChat() {
|
||||
@@ -311,31 +311,31 @@ export function AgentOnboardingChat() {
|
||||
/>
|
||||
);
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 7. Acceptance Criteria (як перевіряти)
|
||||
## 7. Acceptance Criteria (як перевіряти)
|
||||
|
||||
* `/onboarding` відкривається як чат.
|
||||
* Користувач спілкується з агентом.
|
||||
* На кожному кроці агент відповідає правильно.
|
||||
* Усі API виклики працюють:
|
||||
- `/onboarding` відкривається як чат.
|
||||
- Користувач спілкується з агентом.
|
||||
- На кожному кроці агент відповідає правильно.
|
||||
- Усі API виклики працюють:
|
||||
|
||||
* `/teams`
|
||||
* `/teams/{id}`
|
||||
* `/channels`
|
||||
* `/agents`
|
||||
* Після завершення → redirect.
|
||||
* UX: користувач не бачить жодної форми. Все — діалог.
|
||||
- `/teams`
|
||||
- `/teams/{id}`
|
||||
- `/channels`
|
||||
- `/agents`
|
||||
- Після завершення → redirect.
|
||||
- UX: користувач не бачить жодної форми. Все — діалог.
|
||||
|
||||
---
|
||||
|
||||
# 8. Для Cursor
|
||||
## 8. Для Cursor
|
||||
|
||||
Коли ти даси йому задачу, використовуй цей формат:
|
||||
|
||||
```
|
||||
```text
|
||||
You are a senior React/TS engineer.
|
||||
|
||||
Implement the Agent-first onboarding at `/onboarding` using the specification in:
|
||||
@@ -349,11 +349,11 @@ Output:
|
||||
- list of modified files
|
||||
- diff
|
||||
- summary
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 9. Інтеграція з існуючим кодом
|
||||
## 9. Інтеграція з існуючим кодом
|
||||
|
||||
## 9.1. Заміна класичного онбордингу
|
||||
|
||||
@@ -375,7 +375,7 @@ Output:
|
||||
|
||||
---
|
||||
|
||||
# 10. UI/UX Вимоги
|
||||
## 10. UI/UX Вимоги
|
||||
|
||||
## 10.1. Chat Interface
|
||||
|
||||
@@ -400,7 +400,7 @@ Output:
|
||||
|
||||
---
|
||||
|
||||
# 11. Обробка помилок
|
||||
## 11. Обробка помилок
|
||||
|
||||
## 11.1. Помилки API
|
||||
|
||||
@@ -424,7 +424,7 @@ Output:
|
||||
|
||||
---
|
||||
|
||||
# 12. Тестування
|
||||
## 12. Тестування
|
||||
|
||||
## 12.1. Unit Tests
|
||||
|
||||
@@ -446,7 +446,7 @@ Output:
|
||||
|
||||
---
|
||||
|
||||
# 13. Майбутні покращення
|
||||
## 13. Майбутні покращення
|
||||
|
||||
## 13.1. LLM Integration
|
||||
|
||||
@@ -471,4 +471,3 @@ Output:
|
||||
**Готово.**
|
||||
Це **повна специфікація агентського онбордингу**, готова до використання в Cursor.
|
||||
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
|
||||
---
|
||||
|
||||
# 1. Мета
|
||||
## 1. Мета
|
||||
|
||||
Створити **особистого eволюційного агента** для кожної microDAO:
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
|
||||
---
|
||||
|
||||
# 2. Архітектура (3 рівні мозку)
|
||||
## 2. Архітектура (3 рівні мозку)
|
||||
|
||||
Еволюційний агент складається з трьох шарів.
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
|
||||
---
|
||||
|
||||
# 3. Компоненти Meta-Agent
|
||||
## 3. Компоненти Meta-Agent
|
||||
|
||||
## 3.1. Feedback Collector
|
||||
|
||||
@@ -132,13 +132,13 @@
|
||||
|
||||
Формує список пропозицій у вигляді:
|
||||
|
||||
```
|
||||
```text
|
||||
• Пропозиція №17
|
||||
Тип: Нове правило
|
||||
Текст: "Якщо user → українська, відповідай українською."
|
||||
Джерело: 13 подібних ситуацій.
|
||||
[Прийняти] [Відхилити] [Редагувати]
|
||||
```
|
||||
```text
|
||||
|
||||
Це ключова відмінність MicroDAO від централізованих систем:
|
||||
|
||||
@@ -166,7 +166,7 @@ UI показує «дерево еволюції».
|
||||
|
||||
---
|
||||
|
||||
# 4. UI/UX модуля "Еволюція агента"
|
||||
## 4. UI/UX модуля "Еволюція агента"
|
||||
|
||||
## 4.1. Вкладка 1 — Огляд
|
||||
|
||||
@@ -212,13 +212,13 @@ UI показує «дерево еволюції».
|
||||
|
||||
Список:
|
||||
|
||||
```
|
||||
```text
|
||||
• Пропозиція №23
|
||||
Тип: FAQ
|
||||
Тема: «Як додати нового учасника?»
|
||||
Згенеровано: Meta-Agent
|
||||
→ [Прийняти] [Відхилити] [Редагувати]
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
@@ -228,7 +228,7 @@ UI показує «дерево еволюції».
|
||||
|
||||
---
|
||||
|
||||
# 5. Логіка самонавчання (алгоритм)
|
||||
## 5. Логіка самонавчання (алгоритм)
|
||||
|
||||
## 5.1. Тригер self-review
|
||||
|
||||
@@ -249,7 +249,7 @@ Self-review запускається коли:
|
||||
|
||||
---
|
||||
|
||||
# 6. API для еволюційного агента
|
||||
## 6. API для еволюційного агента
|
||||
|
||||
Додаємо нові ендпоїнти:
|
||||
|
||||
@@ -279,7 +279,7 @@ Self-review запускається коли:
|
||||
|
||||
---
|
||||
|
||||
# 7. Як працює Train-to-Earn
|
||||
## 7. Як працює Train-to-Earn
|
||||
|
||||
Коли користувач вмикає цю опцію:
|
||||
|
||||
@@ -292,16 +292,16 @@ Self-review запускається коли:
|
||||
|
||||
Користувач бачить:
|
||||
|
||||
```
|
||||
```text
|
||||
Ми використали 3 нові патерни вашої спільноти.
|
||||
Винагорода: +17 1T
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 8. MVP того, що реально зробити зараз
|
||||
## 8. MVP того, що реально зробити зараз
|
||||
|
||||
### MVP-версія:
|
||||
### MVP-версія
|
||||
|
||||
- збір фідбеків (👍/👎),
|
||||
- ручний запуск self-review,
|
||||
@@ -309,7 +309,7 @@ Self-review запускається коли:
|
||||
- вручну додане рев'ю у UI,
|
||||
- зберігання версій у JSON.
|
||||
|
||||
### Наступні етапи:
|
||||
### Наступні етапи
|
||||
|
||||
- кластеризація помилок,
|
||||
- автоматичні тест-кейси,
|
||||
@@ -318,9 +318,9 @@ Self-review запускається коли:
|
||||
|
||||
---
|
||||
|
||||
# 9. Завдання для Cursor (шаблон)
|
||||
## 9. Завдання для Cursor (шаблон)
|
||||
|
||||
```
|
||||
```text
|
||||
You are a senior React/TS and backend engineer.
|
||||
|
||||
Implement the Self-Improving Agent module using:
|
||||
@@ -342,11 +342,11 @@ Output:
|
||||
* list of files
|
||||
* diff
|
||||
* summary
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 10. Інтеграція з існуючим кодом
|
||||
## 10. Інтеграція з існуючим кодом
|
||||
|
||||
## 10.1. Використання API клієнтів
|
||||
|
||||
@@ -365,13 +365,13 @@ export async function getAgentSuggestions(agentId: string) {
|
||||
export async function acceptSuggestion(agentId: string, suggestionId: string) {
|
||||
return apiClient.post(`/agents/${agentId}/suggestions/${suggestionId}/accept`);
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
## 10.2. Компоненти UI
|
||||
|
||||
Створити нову структуру:
|
||||
|
||||
```
|
||||
```text
|
||||
src/features/agent-evolution/
|
||||
AgentEvolutionTab.tsx
|
||||
SuggestionsList.tsx
|
||||
@@ -381,7 +381,7 @@ src/features/agent-evolution/
|
||||
hooks/
|
||||
useAgentEvolution.ts
|
||||
useSuggestions.ts
|
||||
```
|
||||
```text
|
||||
|
||||
## 10.3. State Management
|
||||
|
||||
@@ -392,11 +392,11 @@ const { data: suggestions } = useQuery({
|
||||
queryKey: ['agent-suggestions', agentId],
|
||||
queryFn: () => getAgentSuggestions(agentId),
|
||||
});
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 11. Типи даних
|
||||
## 11. Типи даних
|
||||
|
||||
## 11.1. Suggestion
|
||||
|
||||
@@ -414,7 +414,7 @@ interface Suggestion {
|
||||
status: 'pending' | 'accepted' | 'rejected' | 'edited';
|
||||
createdAt: string;
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
## 11.2. AgentVersion
|
||||
|
||||
@@ -427,7 +427,7 @@ interface AgentVersion {
|
||||
memoryDiff: MemoryDiff;
|
||||
changes: Change[];
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
## 11.3. Feedback
|
||||
|
||||
@@ -439,11 +439,11 @@ interface Feedback {
|
||||
content?: string; // для explicit correction
|
||||
createdAt: string;
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 12. Тестування
|
||||
## 12. Тестування
|
||||
|
||||
## 12.1. Unit Tests
|
||||
|
||||
@@ -466,7 +466,7 @@ interface Feedback {
|
||||
|
||||
---
|
||||
|
||||
# 13. Безпека та приватність
|
||||
## 13. Безпека та приватність
|
||||
|
||||
## 13.1. Контроль доступу
|
||||
|
||||
@@ -491,7 +491,7 @@ interface Feedback {
|
||||
|
||||
---
|
||||
|
||||
# 14. Продуктивність
|
||||
## 14. Продуктивність
|
||||
|
||||
## 14.1. Оптимізація self-review
|
||||
|
||||
@@ -507,7 +507,7 @@ interface Feedback {
|
||||
|
||||
---
|
||||
|
||||
# 15. Майбутні покращення
|
||||
## 15. Майбутні покращення
|
||||
|
||||
## 15.1. Розширений аналіз
|
||||
|
||||
@@ -529,7 +529,7 @@ interface Feedback {
|
||||
|
||||
---
|
||||
|
||||
# 16. Результат
|
||||
## 16. Результат
|
||||
|
||||
Еволюційний агент стає серцем MicroDAO:
|
||||
він вчиться, адаптується, росте — і належить спільноті.
|
||||
@@ -547,4 +547,3 @@ interface Feedback {
|
||||
**Готово.**
|
||||
Це **повна специфікація еволюційного агента**, готова до використання в Cursor.
|
||||
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
---
|
||||
|
||||
# 1. Мета
|
||||
## 1. Мета
|
||||
|
||||
Зробити агента центральною точкою взаємодії користувача зі спільнотою.
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
|
||||
---
|
||||
|
||||
# 2. Типи агентів у UI
|
||||
## 2. Типи агентів у UI
|
||||
|
||||
## 2.1. Guide Agent (провідник)
|
||||
|
||||
@@ -66,7 +66,7 @@
|
||||
|
||||
---
|
||||
|
||||
# 3. Компоненти Agent UI
|
||||
## 3. Компоненти Agent UI
|
||||
|
||||
## 3.1. Agent Bubble
|
||||
|
||||
@@ -80,12 +80,12 @@
|
||||
|
||||
Окремий чат у форматі інтерфейсу:
|
||||
|
||||
```
|
||||
```text
|
||||
---
|
||||
| Team Assistant (ім'я агента) |
|
||||
| Chat messages |
|
||||
| Input field |
|
||||
```
|
||||
```text
|
||||
|
||||
Функції:
|
||||
|
||||
@@ -123,23 +123,23 @@
|
||||
|
||||
---
|
||||
|
||||
# 4. Sidebar інтеграція
|
||||
## 4. Sidebar інтеграція
|
||||
|
||||
У лівому меню зʼявляється новий розділ:
|
||||
|
||||
```
|
||||
```text
|
||||
Агенти
|
||||
• Team Assistant
|
||||
• (у майбутньому: Personal Agent)
|
||||
```
|
||||
```text
|
||||
|
||||
При натисканні → сторінка агента.
|
||||
|
||||
---
|
||||
|
||||
# 5. Сторінка агента
|
||||
## 5. Сторінка агента
|
||||
|
||||
### Розташування:
|
||||
### Розташування
|
||||
|
||||
`/t/:teamId/agent/:agentId`
|
||||
|
||||
@@ -209,18 +209,18 @@
|
||||
|
||||
UI приклад:
|
||||
|
||||
```
|
||||
```text
|
||||
Версія: v4.2
|
||||
Запропоновано 2 покращення:
|
||||
|
||||
[1] Нове правило: "Відповідати українською, якщо канал український." [Прийняти] [Відхилити]
|
||||
|
||||
[2] FAQ: "Як додати учасника до команди?" [Прийняти] [Редагувати]
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 6. Взаємодія агента з подіями
|
||||
## 6. Взаємодія агента з подіями
|
||||
|
||||
## 6.1. У каналі
|
||||
|
||||
@@ -244,7 +244,7 @@ UI приклад:
|
||||
|
||||
---
|
||||
|
||||
# 7. Взаємодія агента з Follow-Ups & Projects
|
||||
## 7. Взаємодія агента з Follow-Ups & Projects
|
||||
|
||||
### 7.1. Follow-ups
|
||||
|
||||
@@ -270,7 +270,7 @@ UI приклад:
|
||||
|
||||
---
|
||||
|
||||
# 8. Notification Logic
|
||||
## 8. Notification Logic
|
||||
|
||||
Агент sparingly надсилає нотифікації:
|
||||
|
||||
@@ -296,7 +296,7 @@ UI:
|
||||
|
||||
---
|
||||
|
||||
# 9. Анімації та UX-поведінка
|
||||
## 9. Анімації та UX-поведінка
|
||||
|
||||
- Аватар агента реагує на події (мʼяка анімована "пульсація").
|
||||
|
||||
@@ -308,7 +308,7 @@ UI:
|
||||
|
||||
---
|
||||
|
||||
# 10. Інтеграція з Agent-First Onboarding
|
||||
## 10. Інтеграція з Agent-First Onboarding
|
||||
|
||||
Після онбордингу:
|
||||
|
||||
@@ -322,17 +322,17 @@ UI:
|
||||
|
||||
---
|
||||
|
||||
# 11. Завдання для Cursor
|
||||
## 11. Завдання для Cursor
|
||||
|
||||
```
|
||||
```text
|
||||
You are a senior React/TS engineer.
|
||||
|
||||
Implement Agent UI System using:
|
||||
|
||||
* 10_agent_ui_system.md
|
||||
* 08_agent_first_onboarding.md
|
||||
* 03_api_core_snapshot.md
|
||||
* 05_coding_standards.md
|
||||
- 10_agent_ui_system.md
|
||||
- 08_agent_first_onboarding.md
|
||||
- 03_api_core_snapshot.md
|
||||
- 05_coding_standards.md
|
||||
|
||||
Deliverables:
|
||||
|
||||
@@ -344,50 +344,50 @@ Deliverables:
|
||||
|
||||
Output:
|
||||
|
||||
* list of modified files
|
||||
* diff
|
||||
* summary
|
||||
```
|
||||
- list of modified files
|
||||
- diff
|
||||
- summary
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 12. Компоненти та структура файлів
|
||||
## 12. Компоненти та структура файлів
|
||||
|
||||
## 12.1. Компоненти UI
|
||||
|
||||
```
|
||||
```text
|
||||
src/components/agent/
|
||||
AgentBubble.tsx # Фіксований аватар у правому нижньому куті
|
||||
AgentChatWindow.tsx # Окно чату з агентом
|
||||
AgentMessage.tsx # Повідомлення агента в каналах
|
||||
AgentAvatar.tsx # Аватар агента з анімаціями
|
||||
AgentTypingIndicator.tsx # Індикатор набору тексту
|
||||
```
|
||||
```text
|
||||
|
||||
## 12.2. Сторінки
|
||||
|
||||
```
|
||||
```text
|
||||
src/pages/
|
||||
AgentPage.tsx # Головна сторінка агента з вкладками
|
||||
AgentChatTab.tsx # Вкладка чату
|
||||
AgentMemoryTab.tsx # Вкладка пам'яті
|
||||
AgentLearningTab.tsx # Вкладка самонавчання
|
||||
AgentEvolutionTab.tsx # Вкладка еволюції
|
||||
```
|
||||
```text
|
||||
|
||||
## 12.3. Hooks
|
||||
|
||||
```
|
||||
```text
|
||||
src/hooks/
|
||||
useAgentActions.ts # Дії агента (відповіді, аналіз)
|
||||
useAgentNotifications.ts # Нотифікації від агента
|
||||
useAgentMemory.ts # Робота з пам'яттю агента
|
||||
useAgentEvolution.ts # Еволюція агента (з 09_evolutionary_agent.md)
|
||||
```
|
||||
```text
|
||||
|
||||
## 12.4. Типи
|
||||
|
||||
```
|
||||
```text
|
||||
src/types/
|
||||
agent.ts # Типи для агентів
|
||||
- Agent
|
||||
@@ -395,11 +395,11 @@ src/types/
|
||||
- AgentSuggestion
|
||||
- AgentVersion
|
||||
- AgentMemory
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 13. Інтеграція з каналами
|
||||
## 13. Інтеграція з каналами
|
||||
|
||||
## 13.1. Відображення повідомлень агента
|
||||
|
||||
@@ -433,7 +433,7 @@ src/types/
|
||||
|
||||
---
|
||||
|
||||
# 14. API інтеграція
|
||||
## 14. API інтеграція
|
||||
|
||||
## 14.1. Отримання відповіді від агента
|
||||
|
||||
@@ -446,13 +446,13 @@ POST /agents/{agentId}/chat
|
||||
"threadId": "thread-456"
|
||||
}
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
## 14.2. Отримання пам'яті агента
|
||||
|
||||
```ts
|
||||
GET /agents/{agentId}/memory
|
||||
```
|
||||
```text
|
||||
|
||||
## 14.3. Оновлення налаштувань самонавчання
|
||||
|
||||
@@ -463,11 +463,11 @@ PATCH /agents/{agentId}/learning
|
||||
"level": "extended",
|
||||
"sources": ["channel", "team"]
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 15. UX деталі
|
||||
## 15. UX деталі
|
||||
|
||||
## 15.1. Agent Bubble
|
||||
|
||||
@@ -492,7 +492,7 @@ PATCH /agents/{agentId}/learning
|
||||
|
||||
---
|
||||
|
||||
# 16. Обробка помилок
|
||||
## 16. Обробка помилок
|
||||
|
||||
## 16.1. Помилки API
|
||||
|
||||
@@ -512,7 +512,7 @@ PATCH /agents/{agentId}/learning
|
||||
|
||||
---
|
||||
|
||||
# 17. Тестування
|
||||
## 17. Тестування
|
||||
|
||||
## 17.1. Unit Tests
|
||||
|
||||
@@ -535,7 +535,7 @@ PATCH /agents/{agentId}/learning
|
||||
|
||||
---
|
||||
|
||||
# 18. Результат
|
||||
## 18. Результат
|
||||
|
||||
MicroDAO стає не месенджером з агентами, а **агентською операційною системою спільнот**, де ШІ — активний навігатор, який еволюціонує та живе поруч з людьми.
|
||||
|
||||
@@ -552,4 +552,3 @@ MicroDAO стає не месенджером з агентами, а **аген
|
||||
**Готово.**
|
||||
Це **повна специфікація агентського UI системи**, готова до використання в Cursor.
|
||||
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
|
||||
---
|
||||
|
||||
# 1. Принцип інтеграції
|
||||
## 1. Принцип інтеграції
|
||||
|
||||
Усі виклики до LLM здійснюються **на бекенді**, не з фронтенду.
|
||||
|
||||
@@ -38,9 +38,9 @@
|
||||
|
||||
---
|
||||
|
||||
# 2. Високорівнева архітектура
|
||||
## 2. Високорівнева архітектура
|
||||
|
||||
```
|
||||
```text
|
||||
Frontend (React SPA)
|
||||
|
|
||||
| POST /agents/{id}/chat
|
||||
@@ -56,15 +56,15 @@ Backend
|
||||
|
|
||||
↓
|
||||
OpenAI API (або інша модель)
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 3. Структура директорій для LLM
|
||||
## 3. Структура директорій для LLM
|
||||
|
||||
Додайте на бекенд:
|
||||
|
||||
```
|
||||
```text
|
||||
src/
|
||||
llm/
|
||||
openaiClient.ts
|
||||
@@ -73,7 +73,7 @@ prompts/
|
||||
system_agent.txt
|
||||
system_onboarding.txt
|
||||
system_evolution.txt
|
||||
```
|
||||
```text
|
||||
|
||||
- `openaiClient.ts` — клієнт OpenAI / GPT.
|
||||
|
||||
@@ -89,7 +89,7 @@ system_evolution.txt
|
||||
|
||||
---
|
||||
|
||||
# 4. Реалізація базового клієнта OpenAI
|
||||
## 4. Реалізація базового клієнта OpenAI
|
||||
|
||||
**Файл: `src/llm/openaiClient.ts`**
|
||||
|
||||
@@ -109,11 +109,11 @@ export async function callLLM(messages: any[], model = "gpt-4.1-mini") {
|
||||
|
||||
return res.choices[0]?.message?.content ?? "";
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 5. Model Router
|
||||
## 5. Model Router
|
||||
|
||||
**Файл: `src/llm/modelRouter.ts`**
|
||||
|
||||
@@ -130,17 +130,17 @@ export function pickModel(agentProfile: string) {
|
||||
return "gpt-4.1-mini";
|
||||
}
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
У майбутньому це місце для:
|
||||
|
||||
* локальних моделей (Ollama, vLLM),
|
||||
* кластеру DAGI,
|
||||
* автоматичного підбору моделі.
|
||||
- локальних моделей (Ollama, vLLM),
|
||||
- кластеру DAGI,
|
||||
- автоматичного підбору моделі.
|
||||
|
||||
---
|
||||
|
||||
# 6. Запит до LLM для агентського чату
|
||||
## 6. Запит до LLM для агентського чату
|
||||
|
||||
**Файл: `src/controllers/agentsController.ts`**
|
||||
|
||||
@@ -173,11 +173,11 @@ export async function chatWithAgent(req, res) {
|
||||
|
||||
res.json({ reply });
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 7. Інтеграція з Agent Chat у фронтенді
|
||||
## 7. Інтеграція з Agent Chat у фронтенді
|
||||
|
||||
**Файл: `api/agents.ts`**
|
||||
|
||||
@@ -185,7 +185,7 @@ export async function chatWithAgent(req, res) {
|
||||
export async function agentChat(agentId: string, messages: ChatMessage[]) {
|
||||
return api.post(`/agents/${agentId}/chat`, { messages });
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
**У `AgentChatWindow.tsx`:**
|
||||
|
||||
@@ -200,17 +200,17 @@ const onSend = async (text: string) => {
|
||||
|
||||
addMessage({ role: "assistant", content: response.reply });
|
||||
};
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 8. Agent-First Onboarding Integration
|
||||
## 8. Agent-First Onboarding Integration
|
||||
|
||||
Використовує той самий LLM-клієнт, але з іншим системним промптом:
|
||||
|
||||
**`prompts/system_onboarding.txt`:**
|
||||
|
||||
```
|
||||
```text
|
||||
You are MicroDAO Guide Agent.
|
||||
|
||||
Your job is to ask the user questions one-by-one to configure their microDAO.
|
||||
@@ -218,7 +218,7 @@ Your job is to ask the user questions one-by-one to configure their microDAO.
|
||||
NEVER skip steps. NEVER jump too far.
|
||||
|
||||
Be friendly, minimalistic and precise.
|
||||
```
|
||||
```text
|
||||
|
||||
У онбордингу:
|
||||
|
||||
@@ -227,25 +227,25 @@ const reply = await callLLM([
|
||||
{ role: "system", content: onboardingSystemPrompt },
|
||||
...conversation
|
||||
]);
|
||||
```
|
||||
```text
|
||||
|
||||
Але state-machine керує реальними діями (API), LLM — тільки текстом.
|
||||
|
||||
---
|
||||
|
||||
# 9. Integration with Evolutionary Agent (09_evolutionary_agent.md)
|
||||
## 9. Integration with Evolutionary Agent (09_evolutionary_agent.md)
|
||||
|
||||
Meta-Agent (self-review) використовує **ще один промпт**:
|
||||
|
||||
`prompts/system_evolution.txt`:
|
||||
|
||||
```
|
||||
```text
|
||||
You are Meta-Agent responsible for analyzing logs of conversations.
|
||||
|
||||
Find mistakes, weak answers, missing rules, and propose improvements.
|
||||
|
||||
Always output JSON with `["type", "value", "explanation"]`.
|
||||
```
|
||||
```text
|
||||
|
||||
Self-review:
|
||||
|
||||
@@ -254,21 +254,21 @@ const improvements = await callLLM([
|
||||
{ role: "system", content: evolutionPrompt },
|
||||
{ role: "user", content: JSON.stringify(conversationLog) }
|
||||
]);
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 10. Як передавати пам'ять агента в LLM
|
||||
## 10. Як передавати пам'ять агента в LLM
|
||||
|
||||
У LLM-запит можна додати:
|
||||
|
||||
* `short-term memory` (останні X повідомлень)
|
||||
- `short-term memory` (останні X повідомлень)
|
||||
|
||||
* `long-term memory` (витяг з Co-Memory)
|
||||
- `long-term memory` (витяг з Co-Memory)
|
||||
|
||||
* `agent profile`
|
||||
- `agent profile`
|
||||
|
||||
* інструкції агента (структура з DB)
|
||||
- інструкції агента (структура з DB)
|
||||
|
||||
Приклад у messages:
|
||||
|
||||
@@ -280,23 +280,23 @@ const llmMessages = [
|
||||
...history,
|
||||
{ role: "user", content: question }
|
||||
];
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 11. Безпека
|
||||
## 11. Безпека
|
||||
|
||||
* API key зберігати у `.env` на сервері.
|
||||
- API key зберігати у `.env` на сервері.
|
||||
|
||||
* Ніколи не відправляти ключ у фронтенд.
|
||||
- Ніколи не відправляти ключ у фронтенд.
|
||||
|
||||
* Додавати rate limit.
|
||||
- Додавати rate limit.
|
||||
|
||||
* Додавати аудит використання агента.
|
||||
- Додавати аудит використання агента.
|
||||
|
||||
---
|
||||
|
||||
# 12. Кешування та оптимізація
|
||||
## 12. Кешування та оптимізація
|
||||
|
||||
## 12.1. Кешування відповідей
|
||||
|
||||
@@ -310,7 +310,7 @@ if (cached) return cached;
|
||||
const reply = await callLLM(messages);
|
||||
await cache.set(cacheKey, reply, { ttl: 3600 });
|
||||
return reply;
|
||||
```
|
||||
```text
|
||||
|
||||
## 12.2. Streaming відповідей
|
||||
|
||||
@@ -329,7 +329,7 @@ for await (const chunk of stream) {
|
||||
res.write(content);
|
||||
}
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
## 12.3. Rate Limiting
|
||||
|
||||
@@ -343,11 +343,11 @@ const agentLimiter = rateLimit({
|
||||
max: 10, // 10 запитів на хвилину
|
||||
keyGenerator: (req) => req.user.id,
|
||||
});
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 13. Альтернативні провайдери
|
||||
## 13. Альтернативні провайдери
|
||||
|
||||
## 13.1. Anthropic Claude
|
||||
|
||||
@@ -367,7 +367,7 @@ export async function callClaude(messages: any[]) {
|
||||
|
||||
return response.content[0].text;
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
## 13.2. Локальні моделі (Ollama)
|
||||
|
||||
@@ -384,7 +384,7 @@ export async function callOllama(messages: any[], model = "llama2") {
|
||||
const data = await response.json();
|
||||
return data.message.content;
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
## 13.3. Уніфікований інтерфейс
|
||||
|
||||
@@ -417,11 +417,11 @@ export function getLLMProvider(provider: string): LLMProvider {
|
||||
return new OpenAIProvider();
|
||||
}
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 14. Обробка помилок
|
||||
## 14. Обробка помилок
|
||||
|
||||
## 14.1. Retry Logic
|
||||
|
||||
@@ -441,7 +441,7 @@ async function callLLMWithRetry(
|
||||
}
|
||||
throw new Error("LLM call failed after retries");
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
## 14.2. Fallback моделі
|
||||
|
||||
@@ -454,11 +454,11 @@ async function callLLMWithFallback(messages: any[], primaryModel: string) {
|
||||
return await callLLM(messages, "gpt-3.5-turbo");
|
||||
}
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 15. Моніторинг та логування
|
||||
## 15. Моніторинг та логування
|
||||
|
||||
## 15.1. Логування викликів
|
||||
|
||||
@@ -489,7 +489,7 @@ async function callLLM(messages: any[], model: string) {
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
## 15.2. Метрики
|
||||
|
||||
@@ -503,9 +503,9 @@ async function callLLM(messages: any[], model: string) {
|
||||
|
||||
---
|
||||
|
||||
# 16. Завдання для Cursor
|
||||
## 16. Завдання для Cursor
|
||||
|
||||
```
|
||||
```text
|
||||
You are a senior backend + frontend engineer.
|
||||
|
||||
Integrate OpenAI LLM into the MicroDAO Agents system using:
|
||||
@@ -528,11 +528,11 @@ Output:
|
||||
- list of modified files
|
||||
- diff
|
||||
- summary
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 17. Типи та інтерфейси
|
||||
## 17. Типи та інтерфейси
|
||||
|
||||
## 17.1. ChatMessage
|
||||
|
||||
@@ -542,7 +542,7 @@ interface ChatMessage {
|
||||
content: string;
|
||||
timestamp?: string;
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
## 17.2. LLMResponse
|
||||
|
||||
@@ -557,7 +557,7 @@ interface LLMResponse {
|
||||
};
|
||||
finishReason?: string;
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
## 17.3. AgentChatRequest
|
||||
|
||||
@@ -575,11 +575,11 @@ interface AgentChatRequest {
|
||||
stream?: boolean;
|
||||
};
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 18. Тестування
|
||||
## 18. Тестування
|
||||
|
||||
## 18.1. Unit Tests
|
||||
|
||||
@@ -596,7 +596,7 @@ describe("openaiClient", () => {
|
||||
expect(typeof response).toBe("string");
|
||||
});
|
||||
});
|
||||
```
|
||||
```text
|
||||
|
||||
## 18.2. Integration Tests
|
||||
|
||||
@@ -612,23 +612,23 @@ describe("Agent Chat Integration", () => {
|
||||
expect(response.reply).toBeDefined();
|
||||
});
|
||||
});
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 19. Результат
|
||||
## 19. Результат
|
||||
|
||||
Після інтеграції:
|
||||
|
||||
* будь-який агент microDAO працює на GPT/LLM,
|
||||
* онбординг веде агент-гіда,
|
||||
* Team Assistant відповідає у чаті,
|
||||
* Meta-Agent генерує покращення,
|
||||
* вся система стає справжньою OS на базі ШІ.
|
||||
- будь-який агент microDAO працює на GPT/LLM,
|
||||
- онбординг веде агент-гіда,
|
||||
- Team Assistant відповідає у чаті,
|
||||
- Meta-Agent генерує покращення,
|
||||
- вся система стає справжньою OS на базі ШІ.
|
||||
|
||||
---
|
||||
|
||||
# 20. Наступні кроки
|
||||
## 20. Наступні кроки
|
||||
|
||||
Після базової інтеграції можна додати:
|
||||
|
||||
@@ -643,4 +643,3 @@ describe("Agent Chat Integration", () => {
|
||||
**Готово.**
|
||||
Це **повна специфікація інтеграції LLM**, готова до використання в Cursor.
|
||||
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
---
|
||||
|
||||
# 1. Базові принципи
|
||||
## 1. Базові принципи
|
||||
|
||||
1. Агент — це **чиста функція + конфіг**.
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
|
||||
---
|
||||
|
||||
# 2. Інтерфейси агента
|
||||
## 2. Інтерфейси агента
|
||||
|
||||
```ts
|
||||
export type AgentRole =
|
||||
@@ -59,7 +59,7 @@ export interface AgentConfig {
|
||||
modelHint?: string; // підказка для modelRouter
|
||||
tools?: string[]; // назви інструментів, які дозволені
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
Повідомлення:
|
||||
|
||||
@@ -72,11 +72,11 @@ export interface AgentMessage {
|
||||
toolName?: string; // якщо role === "tool"
|
||||
ts?: string;
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 3. Runtime-контекст агента
|
||||
## 3. Runtime-контекст агента
|
||||
|
||||
```ts
|
||||
export interface AgentContext {
|
||||
@@ -94,11 +94,11 @@ export interface AgentContext {
|
||||
memory: AgentMemoryAdapter;
|
||||
llm: AgentLLMAdapter;
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 4. Інтерфейси Memory та LLM
|
||||
## 4. Інтерфейси Memory та LLM
|
||||
|
||||
## 4.1. AgentMemoryAdapter
|
||||
|
||||
@@ -109,11 +109,11 @@ export interface AgentMemoryAdapter {
|
||||
saveTurn(ctx: AgentContext, turn: AgentMessage): Promise<void>;
|
||||
appendFact(ctx: AgentContext, fact: string): Promise<void>;
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
* `short-term` — останні N ходів діалогу;
|
||||
- `short-term` — останні N ходів діалогу;
|
||||
|
||||
* `long-term` — узагальнені знання про команду/проект.
|
||||
- `long-term` — узагальнені знання про команду/проект.
|
||||
|
||||
## 4.2. AgentLLMAdapter
|
||||
|
||||
@@ -125,13 +125,13 @@ export interface AgentLLMAdapter {
|
||||
options?: { modelHint?: string }
|
||||
): Promise<string>;
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
Фактична реалізація використовує `openaiClient` + `modelRouter` з `11_llm_integration.md`.
|
||||
|
||||
---
|
||||
|
||||
# 5. Інструменти (Tools)
|
||||
## 5. Інструменти (Tools)
|
||||
|
||||
```ts
|
||||
export type ToolFn = (ctx: AgentContext, args: any) => Promise<any>;
|
||||
@@ -139,23 +139,23 @@ export type ToolFn = (ctx: AgentContext, args: any) => Promise<any>;
|
||||
export interface ToolRegistry {
|
||||
[name: string]: ToolFn;
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
Приклади tools:
|
||||
|
||||
* `create_followup`
|
||||
- `create_followup`
|
||||
|
||||
* `create_task`
|
||||
- `create_task`
|
||||
|
||||
* `get_project_summary`
|
||||
- `get_project_summary`
|
||||
|
||||
* `get_channel_history`
|
||||
- `get_channel_history`
|
||||
|
||||
Інструменти не викликаються напряму з UI, тільки через агентський runtime.
|
||||
|
||||
---
|
||||
|
||||
# 6. Головна функція: runAgentTurn
|
||||
## 6. Головна функція: runAgentTurn
|
||||
|
||||
```ts
|
||||
export interface AgentTurnResult {
|
||||
@@ -209,11 +209,11 @@ export async function runAgentTurn(ctx: AgentContext): Promise<AgentTurnResult>
|
||||
|
||||
return { reply, toolCalls };
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 7. buildLLMMessages: як формується промпт
|
||||
## 7. buildLLMMessages: як формується промпт
|
||||
|
||||
```ts
|
||||
function buildLLMMessages(
|
||||
@@ -240,43 +240,43 @@ function buildLLMMessages(
|
||||
|
||||
return [system, memoryMsg, ...shortTerm, userInput];
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
Надалі:
|
||||
|
||||
* можна додати Co-Memory / RAG (витягнути релевантні факти з векторної БД);
|
||||
- можна додати Co-Memory / RAG (витягнути релевантні факти з векторної БД);
|
||||
|
||||
* можна додати структуровані інструкції для tools.
|
||||
- можна додати структуровані інструкції для tools.
|
||||
|
||||
---
|
||||
|
||||
# 8. Життєвий цикл одного запиту агента (end-to-end)
|
||||
## 8. Життєвий цикл одного запиту агента (end-to-end)
|
||||
|
||||
1. UI (`AgentChatWindow` або `AgentOnboardingChat`) відправляє `/agents/{id}/chat`:
|
||||
|
||||
* `agentId`,
|
||||
- `agentId`,
|
||||
|
||||
* `channelId`,
|
||||
- `channelId`,
|
||||
|
||||
* `userId`,
|
||||
- `userId`,
|
||||
|
||||
* `input` (текст користувача).
|
||||
- `input` (текст користувача).
|
||||
|
||||
2. Backend:
|
||||
|
||||
* дістає `AgentConfig` з БД;
|
||||
- дістає `AgentConfig` з БД;
|
||||
|
||||
* формує `AgentContext`:
|
||||
- формує `AgentContext`:
|
||||
|
||||
* agent, teamId, channelId, userId,
|
||||
- agent, teamId, channelId, userId,
|
||||
|
||||
* history (опційно),
|
||||
- history (опційно),
|
||||
|
||||
* memory adapter,
|
||||
- memory adapter,
|
||||
|
||||
* llm adapter,
|
||||
- llm adapter,
|
||||
|
||||
* tools.
|
||||
- tools.
|
||||
|
||||
3. Викликає `runAgentTurn(ctx)`.
|
||||
|
||||
@@ -288,15 +288,15 @@ function buildLLMMessages(
|
||||
|
||||
---
|
||||
|
||||
# 9. Інтеграція з SML / локальними моделями
|
||||
## 9. Інтеграція з SML / локальними моделями
|
||||
|
||||
У майбутньому:
|
||||
|
||||
* `AgentLLMAdapter.complete` може:
|
||||
- `AgentLLMAdapter.complete` може:
|
||||
|
||||
* для простих задач (класифікація, короткі відповіді) викликати локальний SML,
|
||||
- для простих задач (класифікація, короткі відповіді) викликати локальний SML,
|
||||
|
||||
* для складних — OpenAI/велику LLM.
|
||||
- для складних — OpenAI/велику LLM.
|
||||
|
||||
Псевдокод:
|
||||
|
||||
@@ -308,63 +308,63 @@ export async function complete(ctx, messages, options) {
|
||||
return callLLM(messages, pickModel(ctx.agent.role));
|
||||
}
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 10. Використання для різних типів агентів
|
||||
## 10. Використання для різних типів агентів
|
||||
|
||||
### Guide Agent (онбординг)
|
||||
|
||||
* той самий runtime,
|
||||
- той самий runtime,
|
||||
|
||||
* інший `systemPrompt`,
|
||||
- інший `systemPrompt`,
|
||||
|
||||
* інший набір tools:
|
||||
- інший набір tools:
|
||||
|
||||
* `create_team`
|
||||
- `create_team`
|
||||
|
||||
* `update_team_mode`
|
||||
- `update_team_mode`
|
||||
|
||||
* `create_channel`
|
||||
- `create_channel`
|
||||
|
||||
* `create_agent`
|
||||
- `create_agent`
|
||||
|
||||
### Team Assistant
|
||||
|
||||
* general-purpose агент,
|
||||
- general-purpose агент,
|
||||
|
||||
* має tools:
|
||||
- має tools:
|
||||
|
||||
* `create_followup`
|
||||
- `create_followup`
|
||||
|
||||
* `create_task`
|
||||
- `create_task`
|
||||
|
||||
* `get_summary`
|
||||
- `get_summary`
|
||||
|
||||
* `search_memory`
|
||||
- `search_memory`
|
||||
|
||||
### Evolution Meta-Agent
|
||||
|
||||
* використовує:
|
||||
- використовує:
|
||||
|
||||
* `conversation_log` як input,
|
||||
- `conversation_log` як input,
|
||||
|
||||
* інший systemPrompt,
|
||||
- інший systemPrompt,
|
||||
|
||||
* tools:
|
||||
- tools:
|
||||
|
||||
* `create_improvement_proposal`
|
||||
- `create_improvement_proposal`
|
||||
|
||||
* `update_agent_rules`
|
||||
- `update_agent_rules`
|
||||
|
||||
---
|
||||
|
||||
# 11. Структура файлів
|
||||
## 11. Структура файлів
|
||||
|
||||
## 11.1. Core Runtime
|
||||
|
||||
```
|
||||
```text
|
||||
src/agent-runtime/
|
||||
core/
|
||||
types.ts # AgentConfig, AgentContext, AgentMessage
|
||||
@@ -379,18 +379,18 @@ src/agent-runtime/
|
||||
createFollowup.ts # Інструмент створення follow-up
|
||||
createTask.ts # Інструмент створення задачі
|
||||
getSummary.ts # Інструмент отримання підсумку
|
||||
```
|
||||
```text
|
||||
|
||||
## 11.2. Контролери
|
||||
|
||||
```
|
||||
```text
|
||||
src/controllers/
|
||||
agentsController.ts # HTTP endpoint /agents/{id}/chat
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 12. Реалізація адаптерів
|
||||
## 12. Реалізація адаптерів
|
||||
|
||||
## 12.1. Memory Adapter
|
||||
|
||||
@@ -447,7 +447,7 @@ export class DatabaseMemoryAdapter implements AgentMemoryAdapter {
|
||||
});
|
||||
}
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
## 12.2. LLM Adapter
|
||||
|
||||
@@ -474,11 +474,11 @@ export class OpenAILLMAdapter implements AgentLLMAdapter {
|
||||
return await callLLM(openaiMessages, model);
|
||||
}
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 13. Реєстр інструментів
|
||||
## 13. Реєстр інструментів
|
||||
|
||||
```ts
|
||||
import { ToolRegistry, ToolFn } from "./types";
|
||||
@@ -506,11 +506,11 @@ export function getAvailableTools(agent: AgentConfig): ToolRegistry {
|
||||
}
|
||||
return registry;
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 14. Парсинг викликів інструментів
|
||||
## 14. Парсинг викликів інструментів
|
||||
|
||||
```ts
|
||||
export function parseToolCalls(replyText: string): Array<{ name: string; args: any }> {
|
||||
@@ -533,13 +533,13 @@ export function parseToolCalls(replyText: string): Array<{ name: string; args: a
|
||||
|
||||
return calls;
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
Альтернативно, можна використовувати structured outputs або function calling API OpenAI.
|
||||
|
||||
---
|
||||
|
||||
# 15. HTTP Endpoint
|
||||
## 15. HTTP Endpoint
|
||||
|
||||
```ts
|
||||
import { Request, Response } from "express";
|
||||
@@ -610,11 +610,11 @@ export async function chatWithAgent(req: Request, res: Response) {
|
||||
res.status(500).json({ error: "Agent failed to respond" });
|
||||
}
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 16. Тестування
|
||||
## 16. Тестування
|
||||
|
||||
## 16.1. Unit Tests
|
||||
|
||||
@@ -648,15 +648,15 @@ describe("runAgentTurn", () => {
|
||||
expect(mockLLM.complete).toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 17. Завдання для Cursor
|
||||
## 17. Завдання для Cursor
|
||||
|
||||
Приклад промта:
|
||||
|
||||
```
|
||||
```text
|
||||
You are a senior backend engineer.
|
||||
|
||||
Implement the Agent Runtime Core for MicroDAO using:
|
||||
@@ -682,25 +682,24 @@ Output:
|
||||
- list of modified files
|
||||
- diff
|
||||
- summary
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 18. Результат
|
||||
## 18. Результат
|
||||
|
||||
Після впровадження цього ядра:
|
||||
|
||||
* усі агенти MicroDAO працюють через єдиний runtime;
|
||||
- усі агенти MicroDAO працюють через єдиний runtime;
|
||||
|
||||
* легко додавати нові типи агентів;
|
||||
- легко додавати нові типи агентів;
|
||||
|
||||
* пам'ять, LLM і tools чітко відокремлені;
|
||||
- пам'ять, LLM і tools чітко відокремлені;
|
||||
|
||||
* інтеграція з SML і DAGI стає питанням конфігурації, а не переписування коду.
|
||||
- інтеграція з SML і DAGI стає питанням конфігурації, а не переписування коду.
|
||||
|
||||
---
|
||||
|
||||
**Готово.**
|
||||
Це **повна специфікація Agent Runtime Core**, готова до використання в Cursor.
|
||||
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
|
||||
---
|
||||
|
||||
# 1. Цілі системи памʼяті
|
||||
## 1. Цілі системи памʼяті
|
||||
|
||||
1. Зробити агентів **контекстними**: вони памʼятають діалоги, рішення, факти.
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
|
||||
---
|
||||
|
||||
# 2. Рівні памʼяті
|
||||
## 2. Рівні памʼяті
|
||||
|
||||
## 2.1. Short-Term Memory (STM)
|
||||
|
||||
@@ -106,7 +106,7 @@
|
||||
|
||||
---
|
||||
|
||||
# 3. Простір памʼяті (Scopes)
|
||||
## 3. Простір памʼяті (Scopes)
|
||||
|
||||
Памʼять розділяється за обсягом:
|
||||
|
||||
@@ -128,9 +128,9 @@
|
||||
|
||||
---
|
||||
|
||||
# 4. Модель даних
|
||||
## 4. Модель даних
|
||||
|
||||
### Таблиці (логічно):
|
||||
### Таблиці (логічно)
|
||||
|
||||
- `agent_memory_events`
|
||||
|
||||
@@ -172,7 +172,7 @@
|
||||
|
||||
---
|
||||
|
||||
# 5. AgentMemoryAdapter (деталізація)
|
||||
## 5. AgentMemoryAdapter (деталізація)
|
||||
|
||||
Посилання на 12_agent_runtime_core.md:
|
||||
|
||||
@@ -183,41 +183,41 @@ export interface AgentMemoryAdapter {
|
||||
saveTurn(ctx: AgentContext, turn: AgentMessage): Promise<void>;
|
||||
appendFact(ctx: AgentContext, fact: string): Promise<void>;
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
### 5.1. loadShortTerm
|
||||
|
||||
* Витягує останні `N` подій типу `kind = 'message'` зі scope `short_term` для:
|
||||
- Витягує останні `N` подій типу `kind = 'message'` зі scope `short_term` для:
|
||||
|
||||
* `agent_id`,
|
||||
- `agent_id`,
|
||||
|
||||
* `team_id`,
|
||||
- `team_id`,
|
||||
|
||||
* `channel_id` (якщо є).
|
||||
- `channel_id` (якщо є).
|
||||
|
||||
### 5.2. loadLongTerm
|
||||
|
||||
* Витягує список текстових фактів зі scope `long_term` (через `agent_memory_events` з `kind = 'fact'`).
|
||||
- Витягує список текстових фактів зі scope `long_term` (через `agent_memory_events` з `kind = 'fact'`).
|
||||
|
||||
### 5.3. saveTurn
|
||||
|
||||
* Записує повідомлення user/assistant як `message` (short-term).
|
||||
- Записує повідомлення user/assistant як `message` (short-term).
|
||||
|
||||
* Якщо увімкнено автоматичне ущільнення памʼяті — може переносити деякі фрагменти в mid-term.
|
||||
- Якщо увімкнено автоматичне ущільнення памʼяті — може переносити деякі фрагменти в mid-term.
|
||||
|
||||
### 5.4. appendFact
|
||||
|
||||
* Додає факт у long-term (як `kind = 'fact'`).
|
||||
- Додає факт у long-term (як `kind = 'fact'`).
|
||||
|
||||
* Додатково:
|
||||
- Додатково:
|
||||
|
||||
* рахує ембедінг (через окремий LLM/embedding API),
|
||||
- рахує ембедінг (через окремий LLM/embedding API),
|
||||
|
||||
* зберігає в `agent_memory_facts_vector`.
|
||||
- зберігає в `agent_memory_facts_vector`.
|
||||
|
||||
---
|
||||
|
||||
# 6. RAG (Retrieval-Augmented Generation)
|
||||
## 6. RAG (Retrieval-Augmented Generation)
|
||||
|
||||
### 6.1. Retrieval
|
||||
|
||||
@@ -227,9 +227,9 @@ export interface AgentMemoryAdapter {
|
||||
|
||||
2. Шукає релевантні факти у:
|
||||
|
||||
* `agent_memory_facts_vector`,
|
||||
- `agent_memory_facts_vector`,
|
||||
|
||||
* (опційно) Co-Memory документів (файли, wiki).
|
||||
- (опційно) Co-Memory документів (файли, wiki).
|
||||
|
||||
3. Обмежує контекст, наприклад Top-K = 5–10 фактів.
|
||||
|
||||
@@ -244,11 +244,11 @@ const memoryMsg: AgentMessage = {
|
||||
"LONG_TERM_MEMORY:\n" +
|
||||
retrievedFacts.map((f, i) => `- ${f.text}`).join("\n"),
|
||||
};
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 7. Перетікання памʼяті (compression / distillation)
|
||||
## 7. Перетікання памʼяті (compression / distillation)
|
||||
|
||||
Щоб памʼять не перетворювалась на хаос, потрібні періодичні "distillation jobs".
|
||||
|
||||
@@ -262,85 +262,85 @@ const memoryMsg: AgentMessage = {
|
||||
|
||||
3. Отримуємо:
|
||||
|
||||
* конспект (summary),
|
||||
- конспект (summary),
|
||||
|
||||
* витяг корисних фактів,
|
||||
- витяг корисних фактів,
|
||||
|
||||
* пропозиції правил.
|
||||
- пропозиції правил.
|
||||
|
||||
4. Записуємо:
|
||||
|
||||
* summary → mid-term,
|
||||
- summary → mid-term,
|
||||
|
||||
* факти → long-term (appendFact),
|
||||
- факти → long-term (appendFact),
|
||||
|
||||
* пропозиції → evolution suggestions.
|
||||
- пропозиції → evolution suggestions.
|
||||
|
||||
### 7.2. Видалення шуму
|
||||
|
||||
Після успішної дистиляції:
|
||||
|
||||
* можна частину короткої памʼяті чистити;
|
||||
- можна частину короткої памʼяті чистити;
|
||||
|
||||
* можна перевести непотрібні `message` у архів.
|
||||
- можна перевести непотрібні `message` у архів.
|
||||
|
||||
---
|
||||
|
||||
# 8. Контроль з боку користувача
|
||||
## 8. Контроль з боку користувача
|
||||
|
||||
У UI потрібно дати користувачу можливість:
|
||||
|
||||
1. Переглядати памʼять (принаймні long-term):
|
||||
|
||||
* список фактів,
|
||||
- список фактів,
|
||||
|
||||
* розділений по каналах / темах.
|
||||
- розділений по каналах / темах.
|
||||
|
||||
2. Видаляти факти:
|
||||
|
||||
* для конфіденційних даних,
|
||||
- для конфіденційних даних,
|
||||
|
||||
* при помилках.
|
||||
- при помилках.
|
||||
|
||||
3. Вимикати зберігання:
|
||||
|
||||
* «Не зберігати DM-переписку з агентом у довгострокову памʼять».
|
||||
- «Не зберігати DM-переписку з агентом у довгострокову памʼять».
|
||||
|
||||
4. Експортувати памʼять:
|
||||
|
||||
* для аудиту / переносу.
|
||||
- для аудиту / переносу.
|
||||
|
||||
---
|
||||
|
||||
# 9. Memory Scopes vs Agent Roles
|
||||
## 9. Memory Scopes vs Agent Roles
|
||||
|
||||
### Guide Agent (онбординг)
|
||||
|
||||
* short-term: поточна сесія онбордингу;
|
||||
- short-term: поточна сесія онбордингу;
|
||||
|
||||
* long-term: факти про те, як виглядає створена команда (не обовʼязково).
|
||||
- long-term: факти про те, як виглядає створена команда (не обовʼязково).
|
||||
|
||||
### Team Assistant
|
||||
|
||||
* short-term: останні діалоги в конкретному каналі;
|
||||
- short-term: останні діалоги в конкретному каналі;
|
||||
|
||||
* mid-term: summaries мітингів / сесій;
|
||||
- mid-term: summaries мітингів / сесій;
|
||||
|
||||
* long-term: знання про команду, процеси, словник.
|
||||
- long-term: знання про команду, процеси, словник.
|
||||
|
||||
### Meta-Agent
|
||||
|
||||
* працює на mid-/long-term даних:
|
||||
- працює на mid-/long-term даних:
|
||||
|
||||
* аналізує їх,
|
||||
- аналізує їх,
|
||||
|
||||
* пропонує зміни в правилах,
|
||||
- пропонує зміни в правилах,
|
||||
|
||||
* оновлює памʼять.
|
||||
- оновлює памʼять.
|
||||
|
||||
---
|
||||
|
||||
# 10. Псевдокод реалізації Adapter'а
|
||||
## 10. Псевдокод реалізації Adapter'а
|
||||
|
||||
```ts
|
||||
export class PgAgentMemoryAdapter implements AgentMemoryAdapter {
|
||||
@@ -398,11 +398,11 @@ export class PgAgentMemoryAdapter implements AgentMemoryAdapter {
|
||||
// TODO: обчислити embedding та зберегти у agent_memory_facts_vector
|
||||
}
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 11. RAG Implementation
|
||||
## 11. RAG Implementation
|
||||
|
||||
## 11.1. Embedding Generation
|
||||
|
||||
@@ -417,7 +417,7 @@ export async function generateEmbedding(text: string): Promise<number[]> {
|
||||
const result = await embeddings.embedQuery(text);
|
||||
return result;
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
## 11.2. Vector Search
|
||||
|
||||
@@ -448,7 +448,7 @@ export async function searchRelevantFacts(
|
||||
score: r.similarity,
|
||||
}));
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
## 11.3. Integration with runAgentTurn
|
||||
|
||||
@@ -479,11 +479,11 @@ export async function runAgentTurn(ctx: AgentContext): Promise<AgentTurnResult>
|
||||
|
||||
// ... решта логіки
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 12. Distillation Job Implementation
|
||||
## 12. Distillation Job Implementation
|
||||
|
||||
```ts
|
||||
export async function runDistillationJob(
|
||||
@@ -569,11 +569,11 @@ export async function runDistillationJob(
|
||||
},
|
||||
});
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 13. Database Schema
|
||||
## 13. Database Schema
|
||||
|
||||
## 13.1. agent_memory_events
|
||||
|
||||
@@ -594,7 +594,7 @@ CREATE TABLE agent_memory_events (
|
||||
INDEX idx_agent_channel (agent_id, channel_id),
|
||||
INDEX idx_created_at (created_at)
|
||||
);
|
||||
```
|
||||
```text
|
||||
|
||||
## 13.2. agent_memory_facts_vector
|
||||
|
||||
@@ -613,11 +613,11 @@ CREATE TABLE agent_memory_facts_vector (
|
||||
INDEX idx_agent_team (agent_id, team_id),
|
||||
INDEX idx_embedding USING ivfflat (embedding vector_cosine_ops)
|
||||
);
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 14. API Endpoints
|
||||
## 14. API Endpoints
|
||||
|
||||
## 14.1. GET /agents/{id}/memory
|
||||
|
||||
@@ -640,7 +640,7 @@ export async function getAgentMemory(req: Request, res: Response) {
|
||||
items: memory,
|
||||
});
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
## 14.2. DELETE /agents/{id}/memory/{memoryId}
|
||||
|
||||
@@ -657,7 +657,7 @@ export async function deleteMemoryItem(req: Request, res: Response) {
|
||||
|
||||
res.json({ success: true });
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
## 14.3. POST /agents/{id}/memory/distill
|
||||
|
||||
@@ -676,33 +676,33 @@ export async function triggerDistillation(req: Request, res: Response) {
|
||||
|
||||
res.json({ success: true });
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 15. Інтеграція з еволюційним агентом (09)
|
||||
## 15. Інтеграція з еволюційним агентом (09)
|
||||
|
||||
Еволюційний агент:
|
||||
|
||||
* читає `agent_memory_events` (особливо з негативним фідбеком),
|
||||
- читає `agent_memory_events` (особливо з негативним фідбеком),
|
||||
|
||||
* агрегує логи,
|
||||
- агрегує логи,
|
||||
|
||||
* робить distillation,
|
||||
- робить distillation,
|
||||
|
||||
* створює пропозиції покращень.
|
||||
- створює пропозиції покращень.
|
||||
|
||||
Memory System → джерело для:
|
||||
|
||||
* аналізу діалогів,
|
||||
- аналізу діалогів,
|
||||
|
||||
* виявлення патернів,
|
||||
- виявлення патернів,
|
||||
|
||||
* побудови Train-to-Earn.
|
||||
- побудови Train-to-Earn.
|
||||
|
||||
---
|
||||
|
||||
# 16. Тестування
|
||||
## 16. Тестування
|
||||
|
||||
## 16.1. Unit Tests
|
||||
|
||||
@@ -733,15 +733,15 @@ describe("PgAgentMemoryAdapter", () => {
|
||||
);
|
||||
});
|
||||
});
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 17. Завдання для Cursor
|
||||
## 17. Завдання для Cursor
|
||||
|
||||
Приклад промта:
|
||||
|
||||
```
|
||||
```text
|
||||
You are a senior backend engineer.
|
||||
|
||||
Implement the Agent Memory System for MicroDAO using:
|
||||
@@ -769,25 +769,24 @@ Output:
|
||||
- list of modified files
|
||||
- diff
|
||||
- summary
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 18. Результат
|
||||
## 18. Результат
|
||||
|
||||
Після впровадження цієї системи:
|
||||
|
||||
* агенти MicroDAO мають справжню багаторівневу памʼять;
|
||||
- агенти MicroDAO мають справжню багаторівневу памʼять;
|
||||
|
||||
* можна керувати тим, що саме вони памʼятають;
|
||||
- можна керувати тим, що саме вони памʼятають;
|
||||
|
||||
* можна будувати RAG, еволюційний аналіз, Train-to-Earn;
|
||||
- можна будувати RAG, еволюційний аналіз, Train-to-Earn;
|
||||
|
||||
* перехід до DAGI стає природним — через спільну колективну памʼять агентів.
|
||||
- перехід до DAGI стає природним — через спільну колективну памʼять агентів.
|
||||
|
||||
---
|
||||
|
||||
**Готово.**
|
||||
Це **повна специфікація системи пам'яті агентів**, готова до використання в Cursor.
|
||||
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
---
|
||||
|
||||
# 1. Ідея
|
||||
## 1. Ідея
|
||||
|
||||
Замість "голої" стрічки чатів у MicroDAO є:
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
|
||||
---
|
||||
|
||||
# 2. Ролі агентів у модулі месенджера
|
||||
## 2. Ролі агентів у модулі месенджера
|
||||
|
||||
## 2.1. Messenger Agent (core)
|
||||
|
||||
@@ -66,7 +66,7 @@ User-facing агент делегує запити Messenger Agent'у.
|
||||
|
||||
---
|
||||
|
||||
# 3. Функціональні спроможності Messenger Agent
|
||||
## 3. Функціональні спроможності Messenger Agent
|
||||
|
||||
## 3.1. Базові (класичний месенджер)
|
||||
|
||||
@@ -144,7 +144,7 @@ Messenger Agent вміє:
|
||||
|
||||
---
|
||||
|
||||
# 4. Інтерфейс з точки зору користувача
|
||||
## 4. Інтерфейс з точки зору користувача
|
||||
|
||||
### 4.1. Класичний UI (sidebar + список чатів)
|
||||
|
||||
@@ -189,7 +189,7 @@ Messenger Agent вміє:
|
||||
|
||||
---
|
||||
|
||||
# 5. Інтеграція з Agent Runtime Core (12)
|
||||
## 5. Інтеграція з Agent Runtime Core (12)
|
||||
|
||||
Messenger Agent описується як звичайний агент:
|
||||
|
||||
@@ -210,7 +210,7 @@ const messengerAgentConfig: AgentConfig = {
|
||||
"create_followup_from_message"
|
||||
],
|
||||
};
|
||||
```
|
||||
```text
|
||||
|
||||
Tools реалізуються через Messaging Service:
|
||||
|
||||
@@ -222,51 +222,51 @@ const tools: ToolRegistry = {
|
||||
async open_channel(ctx, args) { ... }, // повертає метаданні каналу
|
||||
async get_daily_digest(ctx, args) { ... },
|
||||
};
|
||||
```
|
||||
```text
|
||||
|
||||
Агент runtime (`runAgentTurn`) вирішує:
|
||||
|
||||
* чи просто відповісти текстом,
|
||||
- чи просто відповісти текстом,
|
||||
|
||||
* чи викликати tools,
|
||||
- чи викликати tools,
|
||||
|
||||
* чи комбінувати.
|
||||
- чи комбінувати.
|
||||
|
||||
---
|
||||
|
||||
# 6. Інтеграція з памʼяттю (13)
|
||||
## 6. Інтеграція з памʼяттю (13)
|
||||
|
||||
Messenger Agent:
|
||||
|
||||
* **Short-term** — поточний контекст каналу/діалогу.
|
||||
- **Short-term** — поточний контекст каналу/діалогу.
|
||||
|
||||
* **Long-term** — факти:
|
||||
- **Long-term** — факти:
|
||||
|
||||
* які канали важливі для яких людей,
|
||||
- які канали важливі для яких людей,
|
||||
|
||||
* які теми зʼявляються часто,
|
||||
- які теми зʼявляються часто,
|
||||
|
||||
* які теги/поняття повʼязані з якими чатами.
|
||||
- які теги/поняття повʼязані з якими чатами.
|
||||
|
||||
Приклад фактів:
|
||||
|
||||
* "Канал #governance використовується для голосувань DAO."
|
||||
- "Канал #governance використовується для голосувань DAO."
|
||||
|
||||
* "Канал #dev-mvp обговорює реалізацію MVP MicroDAO."
|
||||
- "Канал #dev-mvp обговорює реалізацію MVP MicroDAO."
|
||||
|
||||
Це дозволяє агенту:
|
||||
|
||||
* відповідати на питання типу:
|
||||
- відповідати на питання типу:
|
||||
|
||||
* "Де обговорювати зміни в governance?"
|
||||
- "Де обговорювати зміни в governance?"
|
||||
|
||||
* пропонувати:
|
||||
- пропонувати:
|
||||
|
||||
* "Здається, обговорення токеноміки краще перенести в #tokenomics."
|
||||
- "Здається, обговорення токеноміки краще перенести в #tokenomics."
|
||||
|
||||
---
|
||||
|
||||
# 7. Типові сценарії використання
|
||||
## 7. Типові сценарії використання
|
||||
|
||||
### Сценарій 1 — Новий учасник
|
||||
|
||||
@@ -276,11 +276,11 @@ Messenger Agent:
|
||||
|
||||
Messenger Agent:
|
||||
|
||||
* знаходить 2–3 ключові канали,
|
||||
- знаходить 2–3 ключові канали,
|
||||
|
||||
* дає короткі описи,
|
||||
- дає короткі описи,
|
||||
|
||||
* пропонує їх відкрити.
|
||||
- пропонує їх відкрити.
|
||||
|
||||
### Сценарій 2 — Щоденний огляд
|
||||
|
||||
@@ -288,13 +288,13 @@ Messenger Agent:
|
||||
|
||||
Messenger Agent:
|
||||
|
||||
* використовує `get_daily_digest` tool,
|
||||
- використовує `get_daily_digest` tool,
|
||||
|
||||
* збирає важливі повідомлення/канали,
|
||||
- збирає важливі повідомлення/канали,
|
||||
|
||||
* створює summary (через LLM),
|
||||
- створює summary (через LLM),
|
||||
|
||||
* відправляє повідомлення у спеціальний канал або в DM.
|
||||
- відправляє повідомлення у спеціальний канал або в DM.
|
||||
|
||||
### Сценарій 3 — Пошук контексту
|
||||
|
||||
@@ -302,29 +302,29 @@ Messenger Agent:
|
||||
|
||||
Messenger Agent:
|
||||
|
||||
* шукає в повідомленнях (Meilisearch + RAG),
|
||||
- шукає в повідомленнях (Meilisearch + RAG),
|
||||
|
||||
* показує релевантні уривки,
|
||||
- показує релевантні уривки,
|
||||
|
||||
* пропонує створити follow-up або задачу.
|
||||
- пропонує створити follow-up або задачу.
|
||||
|
||||
---
|
||||
|
||||
# 8. Взаємодія з іншими агентами
|
||||
## 8. Взаємодія з іншими агентами
|
||||
|
||||
* **Team Assistant** може делегувати складні запити Messenger Agent'у.
|
||||
- **Team Assistant** може делегувати складні запити Messenger Agent'у.
|
||||
|
||||
* **Evolution Meta-Agent** аналізує:
|
||||
- **Evolution Meta-Agent** аналізує:
|
||||
|
||||
* які канали важливі;
|
||||
- які канали важливі;
|
||||
|
||||
* які патерни запитів до Messenger Agent'а повторюються;
|
||||
- які патерни запитів до Messenger Agent'а повторюються;
|
||||
|
||||
* які нові "розумні фільтри" варто запропонувати.
|
||||
- які нові "розумні фільтри" варто запропонувати.
|
||||
|
||||
---
|
||||
|
||||
# 9. Реалізація Tools
|
||||
## 9. Реалізація Tools
|
||||
|
||||
## 9.1. list_channels
|
||||
|
||||
@@ -355,7 +355,7 @@ async function list_channels(
|
||||
messageCount: ch._count.messages,
|
||||
}));
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
## 9.2. list_unread
|
||||
|
||||
@@ -384,7 +384,7 @@ async function list_unread(
|
||||
lastMessageAt: u.lastReadAt,
|
||||
}));
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
## 9.3. search_messages
|
||||
|
||||
@@ -412,7 +412,7 @@ async function search_messages(
|
||||
createdAt: hit.createdAt,
|
||||
}));
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
## 9.4. get_daily_digest
|
||||
|
||||
@@ -465,11 +465,11 @@ async function get_daily_digest(
|
||||
|
||||
return digest;
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 10. System Prompt для Messenger Agent
|
||||
## 10. System Prompt для Messenger Agent
|
||||
|
||||
```txt
|
||||
You are the Messenger Agent for MicroDAO.
|
||||
@@ -486,11 +486,11 @@ You can:
|
||||
Always be concise and helpful. When a user asks to see something, use the appropriate tools to fetch the data and present it clearly.
|
||||
|
||||
If you don't understand a request, ask for clarification.
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 11. UI Integration
|
||||
## 11. UI Integration
|
||||
|
||||
## 11.1. Agent Query Input
|
||||
|
||||
@@ -512,7 +512,7 @@ If you don't understand a request, ask for clarification.
|
||||
}
|
||||
}}
|
||||
/>
|
||||
```
|
||||
```text
|
||||
|
||||
## 11.2. Smart Filters
|
||||
|
||||
@@ -529,15 +529,15 @@ If you don't understand a request, ask for clarification.
|
||||
applyFilter(result.channels);
|
||||
}}
|
||||
/>
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 12. Завдання для Cursor
|
||||
## 12. Завдання для Cursor
|
||||
|
||||
Приклад промта:
|
||||
|
||||
```
|
||||
```text
|
||||
You are a senior full-stack engineer.
|
||||
|
||||
Implement the Messenger Agent module using:
|
||||
@@ -567,23 +567,22 @@ Output:
|
||||
- list of modified files
|
||||
- diff
|
||||
- summary
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 13. Результат
|
||||
## 13. Результат
|
||||
|
||||
Після впровадження Messenger Agent:
|
||||
|
||||
* MicroDAO перестає бути "ще одним месенджером";
|
||||
- MicroDAO перестає бути "ще одним месенджером";
|
||||
|
||||
* користувач взаємодіє з агентом, а не просто з переліком чатів;
|
||||
- користувач взаємодіє з агентом, а не просто з переліком чатів;
|
||||
|
||||
* всі класичні можливості месенджера залишаються, але стають **інструментами** всередині агентської ОС.
|
||||
- всі класичні можливості месенджера залишаються, але стають **інструментами** всередині агентської ОС.
|
||||
|
||||
---
|
||||
|
||||
**Готово.**
|
||||
Це **повна специфікація Messenger Agent модуля**, готова до використання в Cursor.
|
||||
|
||||
|
||||
|
||||
@@ -2,11 +2,14 @@
|
||||
|
||||
Агент-проєктний менеджер для команд і спільнот
|
||||
|
||||
Цей документ описує агентський модуль "Проєкти" у MicroDAO — систему управління роботою, яка повністю працює через агентів. Проєкти, задачі, дедлайни, фоллоуапи та прогрес — це не просто дані, а живий простір, у якому взаємодіють люди та агенти microDAO.
|
||||
Цей документ описує агентський модуль "Проєкти" у MicroDAO — систему
|
||||
управління роботою, яка повністю працює через агентів. Проєкти, задачі,
|
||||
дедлайни, фоллоуапи та прогрес — це не просто дані, а живий простір, у якому
|
||||
взаємодіють люди та агенти microDAO.
|
||||
|
||||
---
|
||||
|
||||
# 1. Ідея
|
||||
## 1. Ідея
|
||||
|
||||
Проєкт у MicroDAO — це:
|
||||
|
||||
@@ -19,7 +22,7 @@
|
||||
|
||||
---
|
||||
|
||||
# 2. Ролі агентів у модулі
|
||||
## 2. Ролі агентів у модулі
|
||||
|
||||
## 2.1. Projects Agent (основний)
|
||||
|
||||
@@ -52,7 +55,7 @@
|
||||
|
||||
---
|
||||
|
||||
# 3. Структура проєкту
|
||||
## 3. Структура проєкту
|
||||
|
||||
Проєкт складається з:
|
||||
|
||||
@@ -80,7 +83,7 @@
|
||||
|
||||
---
|
||||
|
||||
# 4. Модель задачі
|
||||
## 4. Модель задачі
|
||||
|
||||
Задача (`task`) має:
|
||||
|
||||
@@ -101,7 +104,7 @@
|
||||
|
||||
---
|
||||
|
||||
# 5. Основні спроможності Projects Agent
|
||||
## 5. Основні спроможності Projects Agent
|
||||
|
||||
## 5.1. Авто-створення задач з діалогів
|
||||
|
||||
@@ -160,7 +163,7 @@ Projects Agent може:
|
||||
|
||||
---
|
||||
|
||||
# 6. Tools для Projects Agent
|
||||
## 6. Tools для Projects Agent
|
||||
|
||||
У форматі, що сумісний з Runtime Core (12).
|
||||
|
||||
@@ -194,7 +197,7 @@ Projects Agent може:
|
||||
|
||||
---
|
||||
|
||||
# 7. Інтеграція з Runtime Core (12)
|
||||
## 7. Інтеграція з Runtime Core (12)
|
||||
|
||||
Projects Agent — звичайний агент:
|
||||
|
||||
@@ -215,57 +218,57 @@ const projectsAgentConfig: AgentConfig = {
|
||||
"auto_followup"
|
||||
],
|
||||
};
|
||||
```
|
||||
```text
|
||||
|
||||
Projects Agent працює з:
|
||||
|
||||
* памʼяттю (13),
|
||||
* каналами (14),
|
||||
* еволюційним агентом (09),
|
||||
* LLM (11).
|
||||
- памʼяттю (13),
|
||||
- каналами (14),
|
||||
- еволюційним агентом (09),
|
||||
- LLM (11).
|
||||
|
||||
---
|
||||
|
||||
# 8. Інтеграція з памʼяттю (13)
|
||||
## 8. Інтеграція з памʼяттю (13)
|
||||
|
||||
Projects Agent використовує:
|
||||
|
||||
### 8.1. Short-Term Memory
|
||||
|
||||
* поточні обговорення задач у каналі проєкту.
|
||||
- поточні обговорення задач у каналі проєкту.
|
||||
|
||||
### 8.2. Long-Term Memory
|
||||
|
||||
* ключові рішення команди,
|
||||
* визначення задач і стандартів,
|
||||
* історія пріоритетів.
|
||||
- ключові рішення команди,
|
||||
- визначення задач і стандартів,
|
||||
- історія пріоритетів.
|
||||
|
||||
### 8.3. Mid-Term Memory
|
||||
|
||||
* summary спринтів,
|
||||
* переліки завершених задач,
|
||||
* звіти про прогрес.
|
||||
- summary спринтів,
|
||||
- переліки завершених задач,
|
||||
- звіти про прогрес.
|
||||
|
||||
Projects Agent додає факти в памʼять:
|
||||
|
||||
* "Задачу X завершено 12 жовтня."
|
||||
* "Проєкт переходить до етапу тестування."
|
||||
- "Задачу X завершено 12 жовтня."
|
||||
- "Проєкт переходить до етапу тестування."
|
||||
|
||||
---
|
||||
|
||||
# 9. Інтеграція з Messenger Agent (14)
|
||||
## 9. Інтеграція з Messenger Agent (14)
|
||||
|
||||
Messenger Agent допомагає Projects Agent:
|
||||
|
||||
* показувати списки задач у чатах,
|
||||
* формувати треди для задач,
|
||||
* робити дайджести по каналах.
|
||||
- показувати списки задач у чатах,
|
||||
- формувати треди для задач,
|
||||
- робити дайджести по каналах.
|
||||
|
||||
Projects Agent може викликати Messenger Agent через tools або через делегацію.
|
||||
|
||||
---
|
||||
|
||||
# 10. API для проєктів та задач
|
||||
## 10. API для проєктів та задач
|
||||
|
||||
### 10.1. Projects
|
||||
|
||||
@@ -285,46 +288,46 @@ Projects Agent може викликати Messenger Agent через tools аб
|
||||
|
||||
---
|
||||
|
||||
# 11. UI інтеграція
|
||||
## 11. UI інтеграція
|
||||
|
||||
## 11.1. Sidebar → Projects
|
||||
|
||||
У лівому сайдбарі в блоці "Простори" відображаються:
|
||||
|
||||
* список проєктів,
|
||||
* кнопка "Створити проєкт".
|
||||
- список проєктів,
|
||||
- кнопка "Створити проєкт".
|
||||
|
||||
## 11.2. Right Sidebar → Project Context
|
||||
|
||||
Коли користувач знаходиться у каналі проєкту:
|
||||
|
||||
* правий сайдбар показує:
|
||||
- правий сайдбар показує:
|
||||
|
||||
* назву проєкту,
|
||||
* короткий опис,
|
||||
* задачі по статусам,
|
||||
* кнопку "Нова задача".
|
||||
- назву проєкту,
|
||||
- короткий опис,
|
||||
- задачі по статусам,
|
||||
- кнопку "Нова задача".
|
||||
|
||||
## 11.3. Task Panel
|
||||
|
||||
Клік по задачі відкриває:
|
||||
|
||||
* повну картку задачі,
|
||||
* чат-тред задачі,
|
||||
* дії:
|
||||
- повну картку задачі,
|
||||
- чат-тред задачі,
|
||||
- дії:
|
||||
|
||||
* змінити статус,
|
||||
* призначити,
|
||||
* додати опис,
|
||||
* переглянути памʼять.
|
||||
- змінити статус,
|
||||
- призначити,
|
||||
- додати опис,
|
||||
- переглянути памʼять.
|
||||
|
||||
---
|
||||
|
||||
# 12. Інструкції для Cursor
|
||||
## 12. Інструкції для Cursor
|
||||
|
||||
Приклад промта:
|
||||
|
||||
```
|
||||
```text
|
||||
Implement the Projects Agent module using:
|
||||
|
||||
- 15_projects_agent_module.md
|
||||
@@ -359,18 +362,16 @@ Output:
|
||||
- list of changed files
|
||||
- diff
|
||||
- summary
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 13. Результат
|
||||
## 13. Результат
|
||||
|
||||
Після впровадження цього модуля:
|
||||
|
||||
* MicroDAO отримує повноцінний агентський менеджмент проєктів;
|
||||
* задачі створюються з діалогів, а не через форму;
|
||||
* агенти синхронізують роботу між каналами й людьми;
|
||||
* зʼявляється можливість планувати спринти, отримувати прогрес і формувати дайджести;
|
||||
* Projects Agent стає центральним "організатором роботи" у кожному microDAO.
|
||||
|
||||
|
||||
- MicroDAO отримує повноцінний агентський менеджмент проєктів;
|
||||
- задачі створюються з діалогів, а не через форму;
|
||||
- агенти синхронізують роботу між каналами й людьми;
|
||||
- зʼявляється можливість планувати спринти, отримувати прогрес і формувати дайджести;
|
||||
- Projects Agent стає центральним "організатором роботи" у кожному microDAO.
|
||||
|
||||
@@ -2,11 +2,14 @@
|
||||
|
||||
Агент-нагадувань, ритму та повторних дій у MicroDAO
|
||||
|
||||
Агент Follow-ups & Reminders (далі — Followup Agent) відповідає за ритм роботи, дисципліну задач, таймінг і "догляд" за станом спільноти та проєктів. Він є природним продовженням Projects Agent і Messenger Agent, але має власну функціональність і власну памʼять.
|
||||
Агент Follow-ups & Reminders (далі — Followup Agent) відповідає за ритм
|
||||
роботи, дисципліну задач, таймінг і "догляд" за станом спільноти та проєктів.
|
||||
Він є природним продовженням Projects Agent і Messenger Agent, але має власну
|
||||
функціональність і власну памʼять.
|
||||
|
||||
---
|
||||
|
||||
# 1. Ідея
|
||||
## 1. Ідея
|
||||
|
||||
Followup Agent — це:
|
||||
|
||||
@@ -20,7 +23,7 @@ Followup Agent — це:
|
||||
|
||||
---
|
||||
|
||||
# 2. Ролі агентів у модулі
|
||||
## 2. Ролі агентів у модулі
|
||||
|
||||
### 2.1. Followup Agent (основний)
|
||||
|
||||
@@ -44,7 +47,7 @@ Followup Agent — це:
|
||||
|
||||
---
|
||||
|
||||
# 3. Документи, які породжує Followup Agent
|
||||
## 3. Документи, які породжує Followup Agent
|
||||
|
||||
Цей агент може автоматично створювати:
|
||||
|
||||
@@ -72,7 +75,7 @@ Followup Agent — це:
|
||||
|
||||
---
|
||||
|
||||
# 4. Logics — коли агент активується
|
||||
## 4. Logics — коли агент активується
|
||||
|
||||
### 4.1. Фрази-тригери в чатах
|
||||
|
||||
@@ -113,7 +116,7 @@ Agent пропонує:
|
||||
|
||||
---
|
||||
|
||||
# 5. Інтеграція з Projects Agent
|
||||
## 5. Інтеграція з Projects Agent
|
||||
|
||||
Followup Agent працює разом з Projects Agent:
|
||||
|
||||
@@ -123,13 +126,13 @@ Followup Agent працює разом з Projects Agent:
|
||||
|
||||
---
|
||||
|
||||
# 6. Tools (для інтеграції з Runtime Core)
|
||||
## 6. Tools (для інтеграції з Runtime Core)
|
||||
|
||||
Список інструментів, які Followup Agent використовує у форматі 12_agent_runtime_core.md:
|
||||
|
||||
### 6.1. create_followup
|
||||
|
||||
```
|
||||
```text
|
||||
create_followup({
|
||||
project_id?,
|
||||
task_id?,
|
||||
@@ -137,45 +140,45 @@ user_id?,
|
||||
message,
|
||||
schedule // "in 1 hour", "tomorrow 09:00", CRON-like
|
||||
})
|
||||
```
|
||||
```text
|
||||
|
||||
### 6.2. create_reminder
|
||||
|
||||
```
|
||||
```text
|
||||
create_reminder({
|
||||
user_id,
|
||||
message,
|
||||
schedule
|
||||
})
|
||||
```
|
||||
```text
|
||||
|
||||
### 6.3. check_task_status
|
||||
|
||||
```
|
||||
```text
|
||||
check_task_status(task_id)
|
||||
```
|
||||
```text
|
||||
|
||||
### 6.4. ask_for_update
|
||||
|
||||
```
|
||||
```text
|
||||
ask_for_update(task_id, assignee)
|
||||
```
|
||||
```text
|
||||
|
||||
### 6.5. daily_digest
|
||||
|
||||
```
|
||||
```text
|
||||
daily_digest(project_id | team_id)
|
||||
```
|
||||
```text
|
||||
|
||||
### 6.6. weekly_review
|
||||
|
||||
```
|
||||
```text
|
||||
weekly_review(project_id | team_id)
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 7. Memory інтеграція (13)
|
||||
## 7. Memory інтеграція (13)
|
||||
|
||||
Followup Agent активно використовує памʼять:
|
||||
|
||||
@@ -200,7 +203,7 @@ Followup Agent активно використовує памʼять:
|
||||
|
||||
---
|
||||
|
||||
# 8. UI інтеграція
|
||||
## 8. UI інтеграція
|
||||
|
||||
## 8.1. Sidebar / Панель фоллоуапів
|
||||
|
||||
@@ -237,7 +240,7 @@ Followup Agent постійно додає записи:
|
||||
|
||||
---
|
||||
|
||||
# 9. API
|
||||
## 9. API
|
||||
|
||||
### 9.1. Follow-ups
|
||||
|
||||
@@ -258,7 +261,7 @@ Followup Agent постійно додає записи:
|
||||
|
||||
---
|
||||
|
||||
# 10. Agent конфіг у Runtime Core
|
||||
## 10. Agent конфіг у Runtime Core
|
||||
|
||||
```ts
|
||||
const followupAgentConfig: AgentConfig = {
|
||||
@@ -277,15 +280,15 @@ const followupAgentConfig: AgentConfig = {
|
||||
"weekly_review"
|
||||
]
|
||||
};
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 11. Інструкції для Cursor
|
||||
## 11. Інструкції для Cursor
|
||||
|
||||
Приклад промта:
|
||||
|
||||
```
|
||||
```text
|
||||
Implement the Follow-ups & Reminders Agent using:
|
||||
|
||||
- 16_followups_reminders_agent.md
|
||||
@@ -323,17 +326,15 @@ Output:
|
||||
- files list
|
||||
- diff
|
||||
- summary
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 12. Результат
|
||||
## 12. Результат
|
||||
|
||||
Після впровадження Followup Agent:
|
||||
|
||||
* microDAO має власного "агента-організатора ритму",
|
||||
* задачі й домовленості ніколи не губляться,
|
||||
* наявна здатність до самодисципліни та самонагляду,
|
||||
* spільнота працює природно, без формальних таблиць чи менеджерів.
|
||||
|
||||
|
||||
- microDAO має власного "агента-організатора ритму",
|
||||
- задачі й домовленості ніколи не губляться,
|
||||
- наявна здатність до самодисципліни та самонагляду,
|
||||
- spільнота працює природно, без формальних таблиць чи менеджерів.
|
||||
|
||||
@@ -11,7 +11,7 @@ Knowledge Space — це структурована навігація по ці
|
||||
|
||||
---
|
||||
|
||||
# 1. Призначення
|
||||
## 1. Призначення
|
||||
|
||||
Co-Memory вирішує три завдання:
|
||||
|
||||
@@ -41,7 +41,7 @@ Knowledge Space — це не "Google Drive".
|
||||
|
||||
---
|
||||
|
||||
# 2. Що таке Knowledge Space
|
||||
## 2. Що таке Knowledge Space
|
||||
|
||||
Knowledge Space — це:
|
||||
|
||||
@@ -67,7 +67,7 @@ Knowledge Space — це:
|
||||
|
||||
---
|
||||
|
||||
# 3. Структура Co-Memory
|
||||
## 3. Структура Co-Memory
|
||||
|
||||
Co-Memory складається з:
|
||||
|
||||
@@ -115,7 +115,7 @@ Co-Memory складається з:
|
||||
|
||||
---
|
||||
|
||||
# 4. Агенти, пов'язані з Co-Memory
|
||||
## 4. Агенти, пов'язані з Co-Memory
|
||||
|
||||
## 4.1. Memory Agent (основний)
|
||||
|
||||
@@ -153,7 +153,7 @@ Co-Memory складається з:
|
||||
|
||||
---
|
||||
|
||||
# 5. Життєвий цикл знань
|
||||
## 5. Життєвий цикл знань
|
||||
|
||||
### Етап 1: Створення
|
||||
|
||||
@@ -190,7 +190,7 @@ Co-Memory складається з:
|
||||
|
||||
---
|
||||
|
||||
# 6. Структура даних
|
||||
## 6. Структура даних
|
||||
|
||||
## 6.1. Таблиця `knowledge_spaces`
|
||||
|
||||
@@ -233,7 +233,7 @@ Co-Memory складається з:
|
||||
|
||||
---
|
||||
|
||||
# 7. Tools (сумісні з Runtime Core)
|
||||
## 7. Tools (сумісні з Runtime Core)
|
||||
|
||||
### 7.1. add_document
|
||||
|
||||
@@ -263,7 +263,7 @@ RAG-пошук:
|
||||
|
||||
---
|
||||
|
||||
# 8. Інтеграція з Runtime Core (12)
|
||||
## 8. Інтеграція з Runtime Core (12)
|
||||
|
||||
Memory Agent підключається як:
|
||||
|
||||
@@ -284,58 +284,58 @@ const memoryAgentConfig: AgentConfig = {
|
||||
"link_knowledge"
|
||||
]
|
||||
};
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 9. Інтеграція з Projects, Messenger, Followups
|
||||
## 9. Інтеграція з Projects, Messenger, Followups
|
||||
|
||||
### Projects Agent
|
||||
|
||||
* додає факти про проєкт у Knowledge Space проєкту.
|
||||
- додає факти про проєкт у Knowledge Space проєкту.
|
||||
|
||||
### Messenger Agent
|
||||
|
||||
* зберігає важливі уривки обговорень.
|
||||
- зберігає важливі уривки обговорень.
|
||||
|
||||
### Followups Agent
|
||||
|
||||
* формує історію ритму та задач у вигляді нотаток.
|
||||
- формує історію ритму та задач у вигляді нотаток.
|
||||
|
||||
---
|
||||
|
||||
# 10. UI
|
||||
## 10. UI
|
||||
|
||||
## 10.1. Sidebar → Knowledge
|
||||
|
||||
* Список Knowledge Spaces.
|
||||
* Кнопка "Створити новий простір знань".
|
||||
- Список Knowledge Spaces.
|
||||
- Кнопка "Створити новий простір знань".
|
||||
|
||||
## 10.2. Основний екран Knowledge Space
|
||||
|
||||
* Заголовок.
|
||||
* Опис.
|
||||
* Documents.
|
||||
* Facts.
|
||||
* Relations.
|
||||
* Кнопка "Додати документ".
|
||||
* Кнопка "Додати факт".
|
||||
- Заголовок.
|
||||
- Опис.
|
||||
- Documents.
|
||||
- Facts.
|
||||
- Relations.
|
||||
- Кнопка "Додати документ".
|
||||
- Кнопка "Додати факт".
|
||||
|
||||
## 10.3. Правий сайдбар Knowledge
|
||||
|
||||
* Рекомендації від агентів.
|
||||
* Семантичні групи.
|
||||
* Контекстні звʼязки.
|
||||
- Рекомендації від агентів.
|
||||
- Семантичні групи.
|
||||
- Контекстні звʼязки.
|
||||
|
||||
## 10.4. Чат взаємодії з Knowledge Guide
|
||||
|
||||
* "Поясни мені цей документ…"
|
||||
* "Що ми знаємо про governance?"
|
||||
* "Покажи всі визначення, повʼязані з DAGI."
|
||||
- "Поясни мені цей документ…"
|
||||
- "Що ми знаємо про governance?"
|
||||
- "Покажи всі визначення, повʼязані з DAGI."
|
||||
|
||||
---
|
||||
|
||||
# 11. API
|
||||
## 11. API
|
||||
|
||||
### 11.1. Knowledge Spaces
|
||||
|
||||
@@ -361,9 +361,9 @@ const memoryAgentConfig: AgentConfig = {
|
||||
|
||||
---
|
||||
|
||||
# 12. Інструкції для Cursor
|
||||
## 12. Інструкції для Cursor
|
||||
|
||||
```
|
||||
```text
|
||||
Implement the Co-Memory & Knowledge Space module using:
|
||||
|
||||
- 17_comemory_knowledge_space.md
|
||||
@@ -409,18 +409,17 @@ Output:
|
||||
- list of changed files
|
||||
- diff
|
||||
- summary
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 13. Результат
|
||||
## 13. Результат
|
||||
|
||||
Після впровадження цього модуля:
|
||||
|
||||
* кожне microDAO отримує повноцінну еволюційну памʼять,
|
||||
* агенти знають, що створює спільнота,
|
||||
* знання не губляться в чатах — вони структуруються,
|
||||
* DAGI отримує основу для глибинного reasoning,
|
||||
* MicroDAO перетворюється на справжній "живий простір розуму".
|
||||
|
||||
- кожне microDAO отримує повноцінну еволюційну памʼять,
|
||||
- агенти знають, що створює спільнота,
|
||||
- знання не губляться в чатах — вони структуруються,
|
||||
- DAGI отримує основу для глибинного reasoning,
|
||||
- MicroDAO перетворюється на справжній "живий простір розуму".
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
---
|
||||
|
||||
# 1. Призначення
|
||||
## 1. Призначення
|
||||
|
||||
Governance & Access Agent відповідає за:
|
||||
|
||||
@@ -25,7 +25,7 @@ Governance & Access Agent відповідає за:
|
||||
|
||||
---
|
||||
|
||||
# 2. Ключові концепти
|
||||
## 2. Ключові концепти
|
||||
|
||||
## 2.1. "Ключі спільноти" (Community Keys)
|
||||
|
||||
@@ -70,7 +70,7 @@ Governance & Access Agent відповідає за:
|
||||
|
||||
---
|
||||
|
||||
# 3. Роль Governance Agent
|
||||
## 3. Роль Governance Agent
|
||||
|
||||
Роль агента: `"governance_core"`
|
||||
|
||||
@@ -85,7 +85,7 @@ Governance & Access Agent відповідає за:
|
||||
|
||||
---
|
||||
|
||||
# 4. Ролі Access Agent
|
||||
## 4. Ролі Access Agent
|
||||
|
||||
Роль: `"access_keeper"`
|
||||
|
||||
@@ -102,7 +102,7 @@ Governance & Access Agent відповідає за:
|
||||
|
||||
---
|
||||
|
||||
# 5. Структура правил
|
||||
## 5. Структура правил
|
||||
|
||||
## 5.1. Рівні правил
|
||||
|
||||
@@ -138,7 +138,7 @@ Governance & Access Agent відповідає за:
|
||||
|
||||
---
|
||||
|
||||
# 6. Інтеграція з RBAC та Entitlements
|
||||
## 6. Інтеграція з RBAC та Entitlements
|
||||
|
||||
Використовується модуль `microdao — RBAC and Entitlements (MVP)`.
|
||||
|
||||
@@ -161,7 +161,7 @@ Governance Agent:
|
||||
|
||||
---
|
||||
|
||||
# 7. Ритуали узгодження
|
||||
## 7. Ритуали узгодження
|
||||
|
||||
## 7.1. Створення ритуалу
|
||||
|
||||
@@ -196,7 +196,7 @@ Governance Agent:
|
||||
|
||||
---
|
||||
|
||||
# 8. Символічні ключі (Soulbound Keys)
|
||||
## 8. Символічні ключі (Soulbound Keys)
|
||||
|
||||
Це:
|
||||
|
||||
@@ -217,7 +217,7 @@ Governance Agent:
|
||||
|
||||
---
|
||||
|
||||
# 9. Інтеграція з агентами інших модулів
|
||||
## 9. Інтеграція з агентами інших модулів
|
||||
|
||||
### Messenger Agent
|
||||
|
||||
@@ -238,7 +238,7 @@ Governance Agent:
|
||||
|
||||
---
|
||||
|
||||
# 10. UI
|
||||
## 10. UI
|
||||
|
||||
## 10.1. Sidebar → Правила
|
||||
|
||||
@@ -271,7 +271,7 @@ Governance Agent:
|
||||
|
||||
---
|
||||
|
||||
# 11. Tools (сумісно з Runtime Core)
|
||||
## 11. Tools (сумісно з Runtime Core)
|
||||
|
||||
### 11.1. create_policy
|
||||
|
||||
@@ -306,7 +306,7 @@ Governance Agent:
|
||||
|
||||
---
|
||||
|
||||
# 12. Конфіг агента (Runtime Core)
|
||||
## 12. Конфіг агента (Runtime Core)
|
||||
|
||||
```ts
|
||||
const governanceAgentConfig: AgentConfig = {
|
||||
@@ -326,11 +326,11 @@ const governanceAgentConfig: AgentConfig = {
|
||||
"finalize_ritual"
|
||||
]
|
||||
};
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 13. API
|
||||
## 13. API
|
||||
|
||||
### Policies
|
||||
|
||||
@@ -352,9 +352,9 @@ const governanceAgentConfig: AgentConfig = {
|
||||
|
||||
---
|
||||
|
||||
# 14. Інструкції для Cursor
|
||||
## 14. Інструкції для Cursor
|
||||
|
||||
```
|
||||
```text
|
||||
Implement the Governance & Access Agent using:
|
||||
|
||||
- 18_governance_access_agent.md
|
||||
@@ -387,18 +387,17 @@ Output:
|
||||
- list of changed files
|
||||
- diff
|
||||
- summary
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 15. Результат
|
||||
## 15. Результат
|
||||
|
||||
Після впровадження цього модуля:
|
||||
|
||||
* кожне microDAO отримує свою "конституцію",
|
||||
* доступи стають функцією духу спільноти, а не технічних ролей,
|
||||
* символічні ключі формують систему довіри,
|
||||
* ритуали узгодження стають живою формою колективного рішення,
|
||||
* Governance Agent забезпечує гармонію роботи людей і агентів.
|
||||
|
||||
- кожне microDAO отримує свою "конституцію",
|
||||
- доступи стають функцією духу спільноти, а не технічних ролей,
|
||||
- символічні ключі формують систему довіри,
|
||||
- ритуали узгодження стають живою формою колективного рішення,
|
||||
- Governance Agent забезпечує гармонію роботи людей і агентів.
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ Notifications & Attention Agent (далі — Attention Agent) відповід
|
||||
|
||||
---
|
||||
|
||||
# 1. Призначення
|
||||
## 1. Призначення
|
||||
|
||||
Attention Agent:
|
||||
|
||||
@@ -25,7 +25,7 @@ Attention Agent:
|
||||
|
||||
---
|
||||
|
||||
# 2. Проблеми, які він вирішує
|
||||
## 2. Проблеми, які він вирішує
|
||||
|
||||
- надлишок сповіщень,
|
||||
- інформаційне перевантаження,
|
||||
@@ -37,7 +37,7 @@ Attention Agent:
|
||||
|
||||
---
|
||||
|
||||
# 3. Види уваги
|
||||
## 3. Види уваги
|
||||
|
||||
Attention Agent працює з трьома видами уваги:
|
||||
|
||||
@@ -55,11 +55,11 @@ Attention Agent працює з трьома видами уваги:
|
||||
|
||||
---
|
||||
|
||||
# 4. Модель даних (log of events)
|
||||
## 4. Модель даних (log of events)
|
||||
|
||||
Attention Agent працює поверх подій (`events`):
|
||||
|
||||
```
|
||||
```text
|
||||
event: {
|
||||
id,
|
||||
team_id,
|
||||
@@ -68,13 +68,13 @@ source, // messenger, tasks, governance, agents...
|
||||
payload, // JSON
|
||||
ts
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
Він визначає важливість і формує *streams of attention*.
|
||||
|
||||
---
|
||||
|
||||
# 5. Потоки уваги (Attention Streams)
|
||||
## 5. Потоки уваги (Attention Streams)
|
||||
|
||||
### 5.1. High-Attention Stream
|
||||
|
||||
@@ -93,7 +93,7 @@ ts
|
||||
|
||||
---
|
||||
|
||||
# 6. Attention Agent — спроможності
|
||||
## 6. Attention Agent — спроможності
|
||||
|
||||
## 6.1. Фільтрація шуму
|
||||
|
||||
@@ -151,7 +151,7 @@ ts
|
||||
|
||||
---
|
||||
|
||||
# 7. Інтеграція з агентами інших модулів
|
||||
## 7. Інтеграція з агентами інших модулів
|
||||
|
||||
### Messenger Agent
|
||||
|
||||
@@ -176,7 +176,7 @@ ts
|
||||
|
||||
---
|
||||
|
||||
# 8. Tools (для Runtime Core)
|
||||
## 8. Tools (для Runtime Core)
|
||||
|
||||
### 8.1. classify_event
|
||||
|
||||
@@ -204,7 +204,7 @@ ts
|
||||
|
||||
---
|
||||
|
||||
# 9. Інтеграція з Runtime Core (12)
|
||||
## 9. Інтеграція з Runtime Core (12)
|
||||
|
||||
```ts
|
||||
const attentionAgentConfig: AgentConfig = {
|
||||
@@ -223,48 +223,48 @@ const attentionAgentConfig: AgentConfig = {
|
||||
"highlight_critical"
|
||||
]
|
||||
};
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 10. UI — візуалізація уваги
|
||||
## 10. UI — візуалізація уваги
|
||||
|
||||
## 10.1. Панель уваги (Attention Panel)
|
||||
|
||||
Правий сайдбар у будь-якому контексті:
|
||||
|
||||
* топ важливих подій,
|
||||
* пропущені сигнали,
|
||||
* критичні оновлення.
|
||||
- топ важливих подій,
|
||||
- пропущені сигнали,
|
||||
- критичні оновлення.
|
||||
|
||||
## 10.2. Центр уваги (Attention Hub)
|
||||
|
||||
Окремий екран:
|
||||
|
||||
* `/t/:teamId/attention`
|
||||
- `/t/:teamId/attention`
|
||||
|
||||
Тут користувач бачить:
|
||||
|
||||
* "Важливе за сьогодні",
|
||||
* "Критичне зараз",
|
||||
* "Рекомендоване до перегляду".
|
||||
- "Важливе за сьогодні",
|
||||
- "Критичне зараз",
|
||||
- "Рекомендоване до перегляду".
|
||||
|
||||
## 10.3. Дайджести
|
||||
|
||||
* кнопка "Огляд дня",
|
||||
* кнопка "Огляд тижня".
|
||||
- кнопка "Огляд дня",
|
||||
- кнопка "Огляд тижня".
|
||||
|
||||
## 10.4. Налаштування уваги
|
||||
|
||||
Користувач може обрати:
|
||||
|
||||
* рівень чутливості,
|
||||
* типи подій,
|
||||
* тихі години.
|
||||
- рівень чутливості,
|
||||
- типи подій,
|
||||
- тихі години.
|
||||
|
||||
---
|
||||
|
||||
# 11. API
|
||||
## 11. API
|
||||
|
||||
### Події
|
||||
|
||||
@@ -279,9 +279,9 @@ const attentionAgentConfig: AgentConfig = {
|
||||
|
||||
---
|
||||
|
||||
# 12. Інструкції для Cursor
|
||||
## 12. Інструкції для Cursor
|
||||
|
||||
```
|
||||
```text
|
||||
Implement the Notifications & Attention Agent using:
|
||||
|
||||
- 19_notifications_attention_agent.md
|
||||
@@ -318,18 +318,17 @@ Output:
|
||||
- file list
|
||||
- diff
|
||||
- summary
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 13. Результат
|
||||
## 13. Результат
|
||||
|
||||
Після впровадження цього модуля:
|
||||
|
||||
* спільнота перестає тонути в шумі,
|
||||
* виникає природна структура уваги,
|
||||
* критичні події не губляться,
|
||||
* люди й агенти діють у правильному ритмі,
|
||||
* інформаційне навантаження стає здоровим і екологічним.
|
||||
|
||||
- спільнота перестає тонути в шумі,
|
||||
- виникає природна структура уваги,
|
||||
- критичні події не губляться,
|
||||
- люди й агенти діють у правильному ритмі,
|
||||
- інформаційне навантаження стає здоровим і екологічним.
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ Integrations & Bridges Agent — це модуль, який забезпечу
|
||||
|
||||
---
|
||||
|
||||
# 1. Призначення
|
||||
## 1. Призначення
|
||||
|
||||
Bridges Agent виконує функції:
|
||||
|
||||
@@ -25,7 +25,7 @@ Bridges Agent виконує функції:
|
||||
|
||||
---
|
||||
|
||||
# 2. Види інтеграцій
|
||||
## 2. Види інтеграцій
|
||||
|
||||
### 2.1. Месенджери та комунікаційні сервіси
|
||||
|
||||
@@ -65,7 +65,7 @@ Bridges Agent виконує функції:
|
||||
|
||||
---
|
||||
|
||||
# 3. Агенти інтеграцій
|
||||
## 3. Агенти інтеграцій
|
||||
|
||||
Модуль складається із під-агентів:
|
||||
|
||||
@@ -102,7 +102,7 @@ Bridges Agent виконує функції:
|
||||
|
||||
---
|
||||
|
||||
# 4. Модель інтеграції
|
||||
## 4. Модель інтеграції
|
||||
|
||||
### 4.1. Таблиця інтеграцій
|
||||
|
||||
@@ -119,7 +119,7 @@ Bridges Agent виконує функції:
|
||||
|
||||
Всі зовнішні події конвертуються у універсальний формат:
|
||||
|
||||
```
|
||||
```text
|
||||
event: {
|
||||
id,
|
||||
team_id,
|
||||
@@ -128,7 +128,7 @@ type, // message | file | issue | event | calendar_update ...
|
||||
payload, // JSON
|
||||
ts
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
Цей формат потім обробляється:
|
||||
|
||||
@@ -140,7 +140,7 @@ ts
|
||||
|
||||
---
|
||||
|
||||
# 5. Основні сценарії
|
||||
## 5. Основні сценарії
|
||||
|
||||
### 5.1. Telegram → microDAO
|
||||
|
||||
@@ -175,7 +175,7 @@ ts
|
||||
|
||||
---
|
||||
|
||||
# 6. Інтеграція з Runtime Core (12)
|
||||
## 6. Інтеграція з Runtime Core (12)
|
||||
|
||||
Основний агент:
|
||||
|
||||
@@ -196,13 +196,13 @@ const bridgesAgentConfig: AgentConfig = {
|
||||
"disable_integration"
|
||||
]
|
||||
};
|
||||
```
|
||||
```text
|
||||
|
||||
Адаптери — це окремі агенти з вузькими tools.
|
||||
|
||||
---
|
||||
|
||||
# 7. Tools (для Runtime Core)
|
||||
## 7. Tools (для Runtime Core)
|
||||
|
||||
### 7.1. register_integration
|
||||
|
||||
@@ -230,36 +230,36 @@ const bridgesAgentConfig: AgentConfig = {
|
||||
|
||||
---
|
||||
|
||||
# 8. UI
|
||||
## 8. UI
|
||||
|
||||
## 8.1. Sidebar → Інтеграції
|
||||
|
||||
* список інтеграцій,
|
||||
* кнопка "Підключити інтеграцію".
|
||||
- список інтеграцій,
|
||||
- кнопка "Підключити інтеграцію".
|
||||
|
||||
## 8.2. Модалка підключення інтеграції
|
||||
|
||||
* вибір сервісу: Telegram / Email / Calendar / GitHub / Custom API,
|
||||
* ввод даних підключення,
|
||||
* тестування підключення,
|
||||
* збереження.
|
||||
- вибір сервісу: Telegram / Email / Calendar / GitHub / Custom API,
|
||||
- ввод даних підключення,
|
||||
- тестування підключення,
|
||||
- збереження.
|
||||
|
||||
## 8.3. Профіль інтеграції
|
||||
|
||||
* історія подій,
|
||||
* статус,
|
||||
* налаштування,
|
||||
* кнопка "Вимкнути".
|
||||
- історія подій,
|
||||
- статус,
|
||||
- налаштування,
|
||||
- кнопка "Вимкнути".
|
||||
|
||||
## 8.4. Cross-microDAO панель
|
||||
|
||||
* список підключених DAO,
|
||||
* права та контексти,
|
||||
* статуси синхронізації.
|
||||
- список підключених DAO,
|
||||
- права та контексти,
|
||||
- статуси синхронізації.
|
||||
|
||||
---
|
||||
|
||||
# 9. API
|
||||
## 9. API
|
||||
|
||||
### Інтеграції
|
||||
|
||||
@@ -280,9 +280,9 @@ const bridgesAgentConfig: AgentConfig = {
|
||||
|
||||
---
|
||||
|
||||
# 10. Інструкції для Cursor
|
||||
## 10. Інструкції для Cursor
|
||||
|
||||
```
|
||||
```text
|
||||
Implement the Integrations & Bridges Agent using:
|
||||
|
||||
- 20_integrations_bridges_agent.md
|
||||
@@ -329,18 +329,17 @@ Output:
|
||||
- list of modified files
|
||||
- diff
|
||||
- summary
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 11. Результат
|
||||
## 11. Результат
|
||||
|
||||
Після впровадження:
|
||||
|
||||
* microDAO стає мережевим вузлом,
|
||||
* агенти можуть діяти в кількох просторах,
|
||||
* знання й події можуть перетікати між DAO,
|
||||
* зовнішні інструменти інтегруються легко та безпечно,
|
||||
* DAARION.city отримує основу для єдиного агентського всесвіту.
|
||||
|
||||
- microDAO стає мережевим вузлом,
|
||||
- агенти можуть діяти в кількох просторах,
|
||||
- знання й події можуть перетікати між DAO,
|
||||
- зовнішні інструменти інтегруються легко та безпечно,
|
||||
- DAARION.city отримує основу для єдиного агентського всесвіту.
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
---
|
||||
|
||||
# 1. Мета
|
||||
## 1. Мета
|
||||
|
||||
Перетворити MicroDAO на **агентську ОС спільнот**, де:
|
||||
|
||||
@@ -42,11 +42,11 @@
|
||||
|
||||
- діалог з агентом,
|
||||
|
||||
- + технічні дії (RBAC, entitlements, web3-транзакції).
|
||||
- технічні дії (RBAC, entitlements, web3-транзакції).
|
||||
|
||||
---
|
||||
|
||||
# 2. Загальний layout агентської ОС
|
||||
## 2. Загальний layout агентської ОС
|
||||
|
||||
## 2.1. Лівий сайдбар — Простори та Учасники
|
||||
|
||||
@@ -146,7 +146,7 @@
|
||||
|
||||
---
|
||||
|
||||
# 3. Панель "Люди / Агенти / Роботи"
|
||||
## 3. Панель "Люди / Агенти / Роботи"
|
||||
|
||||
## 3.1. Люди
|
||||
|
||||
@@ -224,7 +224,7 @@
|
||||
|
||||
---
|
||||
|
||||
# 4. Запрошення агентів до каналів/чатів
|
||||
## 4. Запрошення агентів до каналів/чатів
|
||||
|
||||
## 4.1. UX-флоу
|
||||
|
||||
@@ -292,7 +292,7 @@
|
||||
|
||||
---
|
||||
|
||||
# 5. Обмін проєктами / базами даних між людьми та агентами
|
||||
## 5. Обмін проєктами / базами даних між людьми та агентами
|
||||
|
||||
## 5.1. Поняття "Ресурсу"
|
||||
|
||||
@@ -356,7 +356,7 @@
|
||||
|
||||
---
|
||||
|
||||
# 6. "Agent Hub" — стартовий екран без меню
|
||||
## 6. "Agent Hub" — стартовий екран без меню
|
||||
|
||||
Замість класичного "Home":
|
||||
|
||||
@@ -408,7 +408,7 @@
|
||||
|
||||
---
|
||||
|
||||
# 7. Мінімальний MVP цієї парадигми
|
||||
## 7. Мінімальний MVP цієї парадигми
|
||||
|
||||
Для першої реалізації (без надроздуття):
|
||||
|
||||
@@ -444,11 +444,11 @@
|
||||
|
||||
---
|
||||
|
||||
# 8. Компоненти та структура
|
||||
## 8. Компоненти та структура
|
||||
|
||||
## 8.1. Layout Components
|
||||
|
||||
```
|
||||
```text
|
||||
src/layouts/
|
||||
AgentOSLayout.tsx # Головний layout з 3 колонками
|
||||
LeftSidebar.tsx # Простори + Учасники
|
||||
@@ -456,24 +456,24 @@ src/layouts/
|
||||
RightSidebar.tsx # Контекст + Ресурси
|
||||
ContextPanel.tsx # Панель контексту
|
||||
ResourcesPanel.tsx # Панель ресурсів
|
||||
```
|
||||
```text
|
||||
|
||||
## 8.2. Pages
|
||||
|
||||
```
|
||||
```text
|
||||
src/pages/
|
||||
AgentHubPage.tsx # /t/:teamId/home - стартовий екран
|
||||
ParticipantPage.tsx # Сторінка учасника (людина/агент)
|
||||
```
|
||||
```text
|
||||
|
||||
## 8.3. Modals
|
||||
|
||||
```
|
||||
```text
|
||||
src/components/modals/
|
||||
AddParticipantModal.tsx # Додати учасника до каналу/чату
|
||||
ShareResourceModal.tsx # Поділитися ресурсом
|
||||
ManageAccessModal.tsx # Керування доступами
|
||||
```
|
||||
```text
|
||||
|
||||
## 8.4. Types
|
||||
|
||||
@@ -501,11 +501,11 @@ interface Entitlement {
|
||||
resourceId: string;
|
||||
scopes: string[];
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 9. API Endpoints
|
||||
## 9. API Endpoints
|
||||
|
||||
## 9.1. Participants
|
||||
|
||||
@@ -523,7 +523,7 @@ POST /channels/{channelId}/participants
|
||||
participantType: "human" | "agent";
|
||||
scopes: string[];
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
## 9.2. Resources
|
||||
|
||||
@@ -537,7 +537,7 @@ POST /resources/{resourceId}/share
|
||||
participantIds: string[];
|
||||
scopes: string[];
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
## 9.3. Entitlements
|
||||
|
||||
@@ -553,11 +553,11 @@ POST /entitlements
|
||||
resourceId: string;
|
||||
scopes: string[];
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 10. Інтеграція з існуючими модулями
|
||||
## 10. Інтеграція з існуючими модулями
|
||||
|
||||
## 10.1. Messenger Agent (14)
|
||||
|
||||
@@ -585,11 +585,11 @@ Governance Agent:
|
||||
|
||||
---
|
||||
|
||||
# 11. Завдання для Cursor
|
||||
## 11. Завдання для Cursor
|
||||
|
||||
Приклад промта:
|
||||
|
||||
```
|
||||
```text
|
||||
You are a senior React/TS engineer.
|
||||
|
||||
Implement the Agent-Only Interface shell using:
|
||||
@@ -626,29 +626,27 @@ Output:
|
||||
- list of modified files
|
||||
- diff
|
||||
- summary
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 12. Результат
|
||||
## 12. Результат
|
||||
|
||||
Після впровадження цього модуля:
|
||||
|
||||
* MicroDAO отримує "агентський" каркас інтерфейсу:
|
||||
- MicroDAO отримує "агентський" каркас інтерфейсу:
|
||||
|
||||
* вхід через Agent Hub,
|
||||
- вхід через Agent Hub,
|
||||
|
||||
* центральна роль агентів,
|
||||
- центральна роль агентів,
|
||||
|
||||
* простий механізм запрошення агентів,
|
||||
- простий механізм запрошення агентів,
|
||||
|
||||
* базові flows шерингу ресурсів;
|
||||
- базові flows шерингу ресурсів;
|
||||
|
||||
* класичний месенджер (документ 14) стає лише однією з "здібностей" всередині агентської ОС, а не центром продукту.
|
||||
- класичний месенджер (документ 14) стає лише однією з "здібностей" всередині агентської ОС, а не центром продукту.
|
||||
|
||||
---
|
||||
|
||||
**Готово.**
|
||||
Це **повна специфікація Agent-Only Interface**, готова до використання в Cursor.
|
||||
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
---
|
||||
|
||||
# Task 1 — UI-Agents-List (People / Agents / Robots панель)
|
||||
## Task 1 — UI-Agents-List (People / Agents / Robots панель)
|
||||
|
||||
## Мета
|
||||
|
||||
@@ -18,62 +18,62 @@
|
||||
|
||||
### 1. Розташування
|
||||
|
||||
* Лівий сайдбар, нижче/поруч з блоком "Простори (microDAO)".
|
||||
* Заголовок: `Учасники`.
|
||||
* Вкладки або груповані секції:
|
||||
- Лівий сайдбар, нижче/поруч з блоком "Простори (microDAO)".
|
||||
- Заголовок: `Учасники`.
|
||||
- Вкладки або груповані секції:
|
||||
|
||||
* `Люди`
|
||||
* `Агенти`
|
||||
* `Роботи` (поки список порожній, з текстом "Скоро").
|
||||
- `Люди`
|
||||
- `Агенти`
|
||||
- `Роботи` (поки список порожній, з текстом "Скоро").
|
||||
|
||||
### 2. Дані
|
||||
|
||||
* People:
|
||||
- People:
|
||||
|
||||
* `id`, `display_name`, `avatar_url`, `online_status`.
|
||||
- `id`, `display_name`, `avatar_url`, `online_status`.
|
||||
|
||||
* Agents:
|
||||
- Agents:
|
||||
|
||||
* `id`, `name`, `role`, `avatar`, maybe `type` (system/custom).
|
||||
- `id`, `name`, `role`, `avatar`, maybe `type` (system/custom).
|
||||
|
||||
* Robots:
|
||||
- Robots:
|
||||
|
||||
* поки просто статичний текст: "Роботи поки не під'єднані".
|
||||
- поки просто статичний текст: "Роботи поки не під'єднані".
|
||||
|
||||
На бекенді: можна зробити:
|
||||
|
||||
* `GET /participants?team_id=...` → `{ people: [...], agents: [...] }`
|
||||
- `GET /participants?team_id=...` → `{ people: [...], agents: [...] }`
|
||||
або окремі запити `GET /members`, `GET /agents`.
|
||||
|
||||
### 3. UI-поведінка
|
||||
|
||||
* Клік по Людині:
|
||||
- Клік по Людині:
|
||||
|
||||
* відкриває DM-чат `/t/:teamId/dm/:userId`.
|
||||
- відкриває DM-чат `/t/:teamId/dm/:userId`.
|
||||
|
||||
* Клік по Агенту:
|
||||
- Клік по Агенту:
|
||||
|
||||
* відкриває сторінку агента `/t/:teamId/agent/:agentId`
|
||||
- відкриває сторінку агента `/t/:teamId/agent/:agentId`
|
||||
або агент-чат.
|
||||
|
||||
* Список скролиться, якщо елементів багато.
|
||||
- Список скролиться, якщо елементів багато.
|
||||
|
||||
### 4. Інтеграція з існуючим кодом
|
||||
|
||||
* Використати загальні компоненти `Sidebar`, `Avatar`, `ListItem`.
|
||||
* Типи/інтерфейси привести до стандартів з `05_coding_standards.md`.
|
||||
- Використати загальні компоненти `Sidebar`, `Avatar`, `ListItem`.
|
||||
- Типи/інтерфейси привести до стандартів з `05_coding_standards.md`.
|
||||
|
||||
## Acceptance Criteria
|
||||
|
||||
* У лівому сайдбарі є блок "Учасники" з секціями `Люди`, `Агенти`, `Роботи`.
|
||||
* Для `Людей` і `Агентів` рендеряться реальні дані з API (або mock, якщо API ще нема).
|
||||
* Клік по Людині відкриває приватний чат (навіть якщо поки stub).
|
||||
* Клік по Агенту відкриває сторінку/чат агента.
|
||||
* "Роботи" відображаються як порожній список з плейсхолдером.
|
||||
- У лівому сайдбарі є блок "Учасники" з секціями `Люди`, `Агенти`, `Роботи`.
|
||||
- Для `Людей` і `Агентів` рендеряться реальні дані з API (або mock, якщо API ще нема).
|
||||
- Клік по Людині відкриває приватний чат (навіть якщо поки stub).
|
||||
- Клік по Агенту відкриває сторінку/чат агента.
|
||||
- "Роботи" відображаються як порожній список з плейсхолдером.
|
||||
|
||||
## Приклад промта для Cursor
|
||||
|
||||
```
|
||||
```text
|
||||
Implement the Participants panel (People / Agents / Robots) in the left sidebar using:
|
||||
|
||||
- 21_agent_only_interface.md
|
||||
@@ -88,7 +88,7 @@ Deliverables:
|
||||
- Click on an Agent opens `/t/:teamId/agent/:agentId`.
|
||||
|
||||
Output: list of files + diff + summary.
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
@@ -102,65 +102,65 @@ Output: list of files + diff + summary.
|
||||
|
||||
### 1. Де викликається
|
||||
|
||||
* У header каналу/чату — кнопка `+ Додати учасника`.
|
||||
* Доступна тільки для користувача з правами `admin`/`owner` (поки можна не перевіряти, просто буде кнопка).
|
||||
- У header каналу/чату — кнопка `+ Додати учасника`.
|
||||
- Доступна тільки для користувача з правами `admin`/`owner` (поки можна не перевіряти, просто буде кнопка).
|
||||
|
||||
### 2. Модалка
|
||||
|
||||
* Заголовок: "Додати учасника".
|
||||
* Tabs:
|
||||
- Заголовок: "Додати учасника".
|
||||
- Tabs:
|
||||
|
||||
* `Люди`
|
||||
* `Агенти`
|
||||
* Із них нас цікавить вкладка `Агенти`.
|
||||
- `Люди`
|
||||
- `Агенти`
|
||||
- Із них нас цікавить вкладка `Агенти`.
|
||||
|
||||
### 3. Вкладка "Агенти"
|
||||
|
||||
* Список доступних агентів з пошуком.
|
||||
* По кліку на агента або чекбоксом обираємо 1–N агентів.
|
||||
- Список доступних агентів з пошуком.
|
||||
- По кліку на агента або чекбоксом обираємо 1–N агентів.
|
||||
|
||||
### 4. Налаштування прав
|
||||
|
||||
* Секція "Права в цьому каналі":
|
||||
- Секція "Права в цьому каналі":
|
||||
|
||||
* `[ ] Читати`
|
||||
* `[ ] Писати`
|
||||
* `[ ] Створювати задачі / follow-ups`
|
||||
* За замовчуванням: `Читати` увімкнено, інші вимкнено.
|
||||
- `[ ] Читати`
|
||||
- `[ ] Писати`
|
||||
- `[ ] Створювати задачі / follow-ups`
|
||||
- За замовчуванням: `Читати` увімкнено, інші вимкнено.
|
||||
|
||||
### 5. API / Entitlements
|
||||
|
||||
* On Submit:
|
||||
- On Submit:
|
||||
|
||||
* `POST /entitlements` (або аналог) із даними:
|
||||
- `POST /entitlements` (або аналог) із даними:
|
||||
|
||||
* `agent_id`
|
||||
* `resource_kind: "channel"`
|
||||
* `resource_id: channelId`
|
||||
* `scopes: ["read", "write", "tasks"]` (залежить від чекбоксів)
|
||||
- `agent_id`
|
||||
- `resource_kind: "channel"`
|
||||
- `resource_id: channelId`
|
||||
- `scopes: ["read", "write", "tasks"]` (залежить від чекбоксів)
|
||||
|
||||
* Web3 Stub:
|
||||
- Web3 Stub:
|
||||
|
||||
* В коді робимо виклик функції `governance.issueAccessToken(...)` або логування TODO;
|
||||
* Реальної транзакції поки не робимо.
|
||||
- В коді робимо виклик функції `governance.issueAccessToken(...)` або логування TODO;
|
||||
- Реальної транзакції поки не робимо.
|
||||
|
||||
### 6. UX
|
||||
|
||||
* Після успіху модалка закривається.
|
||||
* У хедері каналу в списку учасників зʼявляється новий агент.
|
||||
- Після успіху модалка закривається.
|
||||
- У хедері каналу в списку учасників зʼявляється новий агент.
|
||||
|
||||
## Acceptance Criteria
|
||||
|
||||
* У кожному каналі/чаті є кнопка "Додати учасника".
|
||||
* В модалці є вкладка "Агенти" зі списком наявних агентів.
|
||||
* Можна обрати агента, налаштувати права, натиснути "Запросити".
|
||||
* На бекенді зберігаються entitlements (навіть якщо прості JSON у БД).
|
||||
* Після додавання агент показується як учасник каналу.
|
||||
* В коді є очевидний Stub для майбутньої web3 інтеграції.
|
||||
- У кожному каналі/чаті є кнопка "Додати учасника".
|
||||
- В модалці є вкладка "Агенти" зі списком наявних агентів.
|
||||
- Можна обрати агента, налаштувати права, натиснути "Запросити".
|
||||
- На бекенді зберігаються entitlements (навіть якщо прості JSON у БД).
|
||||
- Після додавання агент показується як учасник каналу.
|
||||
- В коді є очевидний Stub для майбутньої web3 інтеграції.
|
||||
|
||||
## Приклад промта для Cursor
|
||||
|
||||
```
|
||||
```text
|
||||
Implement the "Invite Agent" flow for channels using:
|
||||
|
||||
- 21_agent_only_interface.md
|
||||
@@ -176,7 +176,7 @@ Deliverables:
|
||||
4) POST entitlements call to store agent-channel permissions (web3 as stub hook).
|
||||
|
||||
Output: list of files + diff + summary.
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
@@ -190,64 +190,64 @@ Output: list of files + diff + summary.
|
||||
|
||||
### 1. Ресурси для MVP
|
||||
|
||||
* Почати з `Проєктів` (Projects Agent з документу 15).
|
||||
* Інтерфейс у правому сайдбарі для активного контексту:
|
||||
- Почати з `Проєктів` (Projects Agent з документу 15).
|
||||
- Інтерфейс у правому сайдбарі для активного контексту:
|
||||
|
||||
* розділ "Проєкти цього контексту",
|
||||
* кожен проєкт має кнопку `⋯` → `Поділитися`.
|
||||
- розділ "Проєкти цього контексту",
|
||||
- кожен проєкт має кнопку `⋯` → `Поділитися`.
|
||||
|
||||
### 2. Модалка "Поділитися проєктом"
|
||||
|
||||
* Заголовок: "Поділитися проєктом".
|
||||
* Tabs:
|
||||
- Заголовок: "Поділитися проєктом".
|
||||
- Tabs:
|
||||
|
||||
* `Люди`
|
||||
* `Агенти`
|
||||
* Список одержувачів з пошуком.
|
||||
- `Люди`
|
||||
- `Агенти`
|
||||
- Список одержувачів з пошуком.
|
||||
|
||||
### 3. Права доступу
|
||||
|
||||
* Радіо-кнопки або чекбокси:
|
||||
- Радіо-кнопки або чекбокси:
|
||||
|
||||
* `Тільки читати`
|
||||
* `Читати і оновлювати задачі`
|
||||
* `Адмініструвати проєкт`
|
||||
* Для MVP:
|
||||
- `Тільки читати`
|
||||
- `Читати і оновлювати задачі`
|
||||
- `Адмініструвати проєкт`
|
||||
- Для MVP:
|
||||
|
||||
* мапимо на `["read"]`, `["read","write"]`, `["admin"]`.
|
||||
- мапимо на `["read"]`, `["read","write"]`, `["admin"]`.
|
||||
|
||||
### 4. API / Entitlements
|
||||
|
||||
* `POST /entitlements`:
|
||||
- `POST /entitlements`:
|
||||
|
||||
* `resource_kind: "project"`
|
||||
* `resource_id: projectId`
|
||||
* `subject_kind: "user" | "agent"`
|
||||
* `subject_id: ...`
|
||||
* `scopes: [...]`
|
||||
- `resource_kind: "project"`
|
||||
- `resource_id: projectId`
|
||||
- `subject_kind: "user" | "agent"`
|
||||
- `subject_id: ...`
|
||||
- `scopes: [...]`
|
||||
|
||||
* Web3 Stub:
|
||||
- Web3 Stub:
|
||||
|
||||
* так само, як у Task 2 — залишити хук/функцію для майбутньої транзакції.
|
||||
- так само, як у Task 2 — залишити хук/функцію для майбутньої транзакції.
|
||||
|
||||
### 5. Відображення
|
||||
|
||||
* У правому сайдбарі для вибраного проєкту:
|
||||
- У правому сайдбарі для вибраного проєкту:
|
||||
|
||||
* короткий список: хто має доступ (іконки + тип: людина/агент).
|
||||
* посилання "Керувати доступами" (можна виводити ту ж саму модалку).
|
||||
- короткий список: хто має доступ (іконки + тип: людина/агент).
|
||||
- посилання "Керувати доступами" (можна виводити ту ж саму модалку).
|
||||
|
||||
## Acceptance Criteria
|
||||
|
||||
* У правому сайдбарі є список проєктів для контексту (навіть якщо один).
|
||||
* Для кожного проєкту доступна дія "Поділитися".
|
||||
* Модалка дозволяє вибрати людей/агентів і рівень доступу.
|
||||
* Після підтвердження зʼявляються записи entitlements.
|
||||
* У правій панелі видно, що проєкт поділено з конкретними субʼєктами.
|
||||
- У правому сайдбарі є список проєктів для контексту (навіть якщо один).
|
||||
- Для кожного проєкту доступна дія "Поділитися".
|
||||
- Модалка дозволяє вибрати людей/агентів і рівень доступу.
|
||||
- Після підтвердження зʼявляються записи entitlements.
|
||||
- У правій панелі видно, що проєкт поділено з конкретними субʼєктами.
|
||||
|
||||
## Приклад промта для Cursor
|
||||
|
||||
```
|
||||
```text
|
||||
Implement the "Share Project" flow as the first Resource Sharing feature using:
|
||||
|
||||
- 21_agent_only_interface.md
|
||||
@@ -264,7 +264,7 @@ Deliverables:
|
||||
5) Show who has access in the sidebar (avatars + type).
|
||||
|
||||
Output: list of files + diff + summary.
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
@@ -278,63 +278,63 @@ Output: list of files + diff + summary.
|
||||
|
||||
### 1. Новий маршрут
|
||||
|
||||
* `GET /t/:teamId/home` (frontend route).
|
||||
* Відображає `AgentHubPage`.
|
||||
- `GET /t/:teamId/home` (frontend route).
|
||||
- Відображає `AgentHubPage`.
|
||||
|
||||
### 2. AgentHubPage структура
|
||||
|
||||
* Верх:
|
||||
- Верх:
|
||||
|
||||
* заголовок: `microDAO: {team.name}`
|
||||
* короткі віджети (можуть бути stub):
|
||||
- заголовок: `microDAO: {team.name}`
|
||||
- короткі віджети (можуть бути stub):
|
||||
|
||||
* "Учасники: X людей, Y агентів"
|
||||
* "Активні проєкти: N"
|
||||
- "Учасники: X людей, Y агентів"
|
||||
- "Активні проєкти: N"
|
||||
|
||||
* Центр:
|
||||
- Центр:
|
||||
|
||||
* чат з головним агентом (Team Assistant або спеціальний OS Agent):
|
||||
- чат з головним агентом (Team Assistant або спеціальний OS Agent):
|
||||
|
||||
* використовує вже існуючий `AgentChatWindow`.
|
||||
* агент_id береться з конфіг (наприклад, "team_assistant" для цієї команди).
|
||||
- використовує вже існуючий `AgentChatWindow`.
|
||||
- агент_id береться з конфіг (наприклад, "team_assistant" для цієї команди).
|
||||
|
||||
* Праворуч:
|
||||
- Праворуч:
|
||||
|
||||
* контекст (список проєктів / каналів / ресурсів — поки можна stub).
|
||||
- контекст (список проєктів / каналів / ресурсів — поки можна stub).
|
||||
|
||||
### 3. Поведінка чату
|
||||
|
||||
* Перший запуск:
|
||||
- Перший запуск:
|
||||
|
||||
* агент вітається, якщо немає історії:
|
||||
- агент вітається, якщо немає історії:
|
||||
|
||||
> "Привіт, це твій Agent Hub. Я допоможу керувати твоєю microDAO."
|
||||
|
||||
* Далі:
|
||||
- Далі:
|
||||
|
||||
* користувач може написати запит, наприклад:
|
||||
- користувач може написати запит, наприклад:
|
||||
|
||||
* "Покажи активні проєкти"
|
||||
* "Відкрий канал #dev-mvp"
|
||||
* "Хочу створити новий проєкт"
|
||||
* Поки що можна зробити stub-відповіді, якщо Projects/Messenger Agents ще не реалізовані.
|
||||
- "Покажи активні проєкти"
|
||||
- "Відкрий канал #dev-mvp"
|
||||
- "Хочу створити новий проєкт"
|
||||
- Поки що можна зробити stub-відповіді, якщо Projects/Messenger Agents ще не реалізовані.
|
||||
|
||||
### 4. Навігація
|
||||
|
||||
* Кнопка/посилання "Головна" у лівому сайдбарі веде на `/t/:teamId/home`.
|
||||
* Після успішного онбордингу (з `08_agent_first_onboarding.md`) редірект також може йти на Agent Hub.
|
||||
- Кнопка/посилання "Головна" у лівому сайдбарі веде на `/t/:teamId/home`.
|
||||
- Після успішного онбордингу (з `08_agent_first_onboarding.md`) редірект також може йти на Agent Hub.
|
||||
|
||||
## Acceptance Criteria
|
||||
|
||||
* Існує маршрут `/t/:teamId/home`, який рендерить Agent Hub.
|
||||
* У центрі — робочий чат з Team Assistant (через `/agents/{id}/chat` endpoint).
|
||||
* У сайдбарі є посилання "Головна" / "Agent Hub", що веде на цей екран.
|
||||
* Якщо історії немає — агент показує вітальний меседж.
|
||||
* Екран виглядає як "головна консоль" microDAO, а не просто черговий канал.
|
||||
- Існує маршрут `/t/:teamId/home`, який рендерить Agent Hub.
|
||||
- У центрі — робочий чат з Team Assistant (через `/agents/{id}/chat` endpoint).
|
||||
- У сайдбарі є посилання "Головна" / "Agent Hub", що веде на цей екран.
|
||||
- Якщо історії немає — агент показує вітальний меседж.
|
||||
- Екран виглядає як "головна консоль" microDAO, а не просто черговий канал.
|
||||
|
||||
## Приклад промта для Cursor
|
||||
|
||||
```
|
||||
```text
|
||||
Implement the Agent Hub Home screen using:
|
||||
|
||||
- 21_agent_only_interface.md
|
||||
@@ -353,7 +353,7 @@ Deliverables:
|
||||
3) "Home / Agent Hub" entry in left sidebar that routes to `/t/:teamId/home`.
|
||||
|
||||
Output: list of files + diff + summary.
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
@@ -409,4 +409,3 @@ Output: list of files + diff + summary.
|
||||
**Готово.**
|
||||
Це **структурований список задач для Agent-Only Interface**, готовий до використання в Cursor.
|
||||
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
---
|
||||
|
||||
# 1. Основні типи системних агентів
|
||||
## 1. Основні типи системних агентів
|
||||
|
||||
MicroDAO має три фундаментальні типи агентів:
|
||||
|
||||
@@ -21,7 +21,7 @@ MicroDAO має три фундаментальні типи агентів:
|
||||
|
||||
---
|
||||
|
||||
# 2. Особистий агент (Personal Agent)
|
||||
## 2. Особистий агент (Personal Agent)
|
||||
|
||||
### 2.1. Призначення
|
||||
Особистий агент — це "внутрішній супутник" людини в екосистемі microDAO:
|
||||
@@ -58,25 +58,25 @@ operatorMode: {
|
||||
schedule: "*/20 * * * *", // кожні 20 хвилин (приклад)
|
||||
maxActionsPerHour: 10
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 3. Спільний агент (Team/Shared Agent)
|
||||
## 3. Спільний агент (Team/Shared Agent)
|
||||
|
||||
### 3.1. Призначення
|
||||
|
||||
Це агенти:
|
||||
|
||||
* Team Assistant,
|
||||
* Messenger Agent,
|
||||
* Projects Agent,
|
||||
* Followups Agent,
|
||||
* Memory Agent,
|
||||
* Attention Agent,
|
||||
* Knowledge Guide,
|
||||
* Bridges Agent,
|
||||
* Governance Agent.
|
||||
- Team Assistant,
|
||||
- Messenger Agent,
|
||||
- Projects Agent,
|
||||
- Followups Agent,
|
||||
- Memory Agent,
|
||||
- Attention Agent,
|
||||
- Knowledge Guide,
|
||||
- Bridges Agent,
|
||||
- Governance Agent.
|
||||
|
||||
Вони працюють на рівні microDAO (колективний простір).
|
||||
|
||||
@@ -84,11 +84,11 @@ operatorMode: {
|
||||
|
||||
Спільні агенти можуть отримувати доступ до:
|
||||
|
||||
* каналів,
|
||||
* проектів,
|
||||
* документів Knowledge Space,
|
||||
* ритуалів узгодження,
|
||||
* Co-Memory microDAO.
|
||||
- каналів,
|
||||
- проектів,
|
||||
- документів Knowledge Space,
|
||||
- ритуалів узгодження,
|
||||
- Co-Memory microDAO.
|
||||
|
||||
Доступи обмежуються entitlements — кожен агент бачить лише те, що дозволено.
|
||||
|
||||
@@ -110,30 +110,29 @@ operatorMode: {
|
||||
schedule: "0 * * * *", // щогодини
|
||||
maxActionsPerHour: 30
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
Операторські дії **завжди логуються** в Co-Memory.
|
||||
|
||||
---
|
||||
|
||||
# 4. Protocol Agents: DAO Agent і Wallet Agent
|
||||
## 4. Protocol Agents: DAO Agent і Wallet Agent
|
||||
|
||||
Ці агенти не є "учасниками" в комунікації, а швидше **протокольними модулями**.
|
||||
|
||||
---
|
||||
|
||||
# 4.1. DAO Agent
|
||||
## 4.1. DAO Agent
|
||||
|
||||
Роль: `"dao_protocol_agent"`
|
||||
|
||||
### Призначення
|
||||
|
||||
- **Призначення**
|
||||
DAO Agent відповідає за:
|
||||
|
||||
* зв'язок із зовнішнім DAO-протоколом (якщо microDAO його має),
|
||||
* синхронізацію правил із контрактами,
|
||||
* оновлення локальних правил на основі зовнішніх церемоній,
|
||||
* відправку ритуалів узгодження в DAO-контракт (якщо дозволено).
|
||||
- зв'язок із зовнішнім DAO-протоколом (якщо microDAO його має),
|
||||
- синхронізацію правил із контрактами,
|
||||
- оновлення локальних правил на основі зовнішніх церемоній,
|
||||
- відправку ритуалів узгодження в DAO-контракт (якщо дозволено).
|
||||
|
||||
### Інтерфейс (tools)
|
||||
|
||||
@@ -144,7 +143,7 @@ tools: [
|
||||
"submit_ritual_to_dao",
|
||||
"resolve_dao_result"
|
||||
]
|
||||
```
|
||||
```text
|
||||
|
||||
### Оператор-режим
|
||||
|
||||
@@ -152,31 +151,30 @@ DAO Agent завжди працює **строго у командному ма
|
||||
|
||||
---
|
||||
|
||||
# 4.2. Wallet Agent
|
||||
## 4.2. Wallet Agent
|
||||
|
||||
Роль: `"wallet_interface_agent"`
|
||||
|
||||
### Призначення
|
||||
|
||||
- **Призначення**
|
||||
Wallet Agent — це **інтерфейс** між microDAO/агентами та:
|
||||
|
||||
* криптографічним підписом,
|
||||
* зовнішніми гаманцями користувачів,
|
||||
* фізичними ключами (Tangem-подібні),
|
||||
* системою capability-доступів.
|
||||
- криптографічним підписом,
|
||||
- зовнішніми гаманцями користувачів,
|
||||
- фізичними ключами (Tangem-подібні),
|
||||
- системою capability-доступів.
|
||||
|
||||
Wallet Agent **не зберігає приватні ключі**.
|
||||
|
||||
Він:
|
||||
|
||||
* формує пояснення:
|
||||
- формує пояснення:
|
||||
|
||||
* "що саме підписується",
|
||||
* "чому це потрібно",
|
||||
* "які наслідки";
|
||||
- "що саме підписується",
|
||||
- "чому це потрібно",
|
||||
- "які наслідки";
|
||||
|
||||
* відправляє payload на зовнішній Signer;
|
||||
* отримує підписаний результат і повертає агенту, що ініціював дію.
|
||||
- відправляє payload на зовнішній Signer;
|
||||
- отримує підписаний результат і повертає агенту, що ініціював дію.
|
||||
|
||||
### Tools
|
||||
|
||||
@@ -187,11 +185,11 @@ tools: [
|
||||
"verify_signature",
|
||||
"get_wallet_state"
|
||||
]
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 5. Модель operatorMode
|
||||
## 5. Модель operatorMode
|
||||
|
||||
Операторський режим є **частиною конфігурації кожного агента**.
|
||||
|
||||
@@ -203,7 +201,7 @@ interface OperatorModeConfig {
|
||||
schedule?: string; // CRON або natural language
|
||||
maxActionsPerHour?: number;
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
У `AgentConfig`:
|
||||
|
||||
@@ -212,14 +210,14 @@ interface AgentConfig {
|
||||
...
|
||||
operatorMode?: OperatorModeConfig;
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
### 5.1. Scopes
|
||||
|
||||
* `"personal"` — особистий простір користувача;
|
||||
* `"team"` — командний рівень microDAO;
|
||||
* `"project"` — окремий проєкт;
|
||||
* `"channel"` — конкретний канал/чат.
|
||||
- `"personal"` — особистий простір користувача;
|
||||
- `"team"` — командний рівень microDAO;
|
||||
- `"project"` — окремий проєкт;
|
||||
- `"channel"` — конкретний канал/чат.
|
||||
|
||||
### 5.2. Режими
|
||||
|
||||
@@ -247,89 +245,89 @@ interface AgentConfig {
|
||||
|
||||
---
|
||||
|
||||
# 6. Модель системних агентів у БД
|
||||
## 6. Модель системних агентів у БД
|
||||
|
||||
### Таблиця `system_agents`
|
||||
|
||||
* id
|
||||
* team_id
|
||||
* type (`personal`, `team`, `protocol`)
|
||||
* role
|
||||
* operator_enabled
|
||||
* config_json (включає operatorMode)
|
||||
* created_at
|
||||
- id
|
||||
- team_id
|
||||
- type (`personal`, `team`, `protocol`)
|
||||
- role
|
||||
- operator_enabled
|
||||
- config_json (включає operatorMode)
|
||||
- created_at
|
||||
|
||||
### Таблиця `agent_permissions`
|
||||
|
||||
* id
|
||||
* agent_id
|
||||
* resource_kind
|
||||
* resource_id
|
||||
* scopes (json array)
|
||||
* created_at
|
||||
- id
|
||||
- agent_id
|
||||
- resource_kind
|
||||
- resource_id
|
||||
- scopes (json array)
|
||||
- created_at
|
||||
|
||||
### Таблиця `operator_logs`
|
||||
|
||||
* id
|
||||
* agent_id
|
||||
* action
|
||||
* payload_json
|
||||
* context
|
||||
* created_at
|
||||
- id
|
||||
- agent_id
|
||||
- action
|
||||
- payload_json
|
||||
- context
|
||||
- created_at
|
||||
|
||||
---
|
||||
|
||||
# 7. Інтеграція з доступами та ключами (Governance Agent)
|
||||
## 7. Інтеграція з доступами та ключами (Governance Agent)
|
||||
|
||||
OperatorMode завжди працює у звʼязці з:
|
||||
|
||||
* entitlements,
|
||||
* symbolic keys,
|
||||
* governance_policies.
|
||||
- entitlements,
|
||||
- symbolic keys,
|
||||
- governance_policies.
|
||||
|
||||
Наприклад:
|
||||
|
||||
* Personal Agent має ключ рівня `personal-scope`.
|
||||
* Projects Agent має ключ `project-operator`.
|
||||
* DAO Agent має ключ `protocol-access`, який Governance Agent може видати або анулювати.
|
||||
- Personal Agent має ключ рівня `personal-scope`.
|
||||
- Projects Agent має ключ `project-operator`.
|
||||
- DAO Agent має ключ `protocol-access`, який Governance Agent може видати або анулювати.
|
||||
|
||||
---
|
||||
|
||||
# 8. UI-інтеграція
|
||||
## 8. UI-інтеграція
|
||||
|
||||
### 8.1. Сторінка Агентів
|
||||
|
||||
У профілі агента:
|
||||
|
||||
* показати блок **"Режим оператора"**:
|
||||
- показати блок **"Режим оператора"**:
|
||||
|
||||
* увімкнено/вимкнено,
|
||||
* дозволені дії,
|
||||
* сфери дії,
|
||||
* розклад.
|
||||
- увімкнено/вимкнено,
|
||||
- дозволені дії,
|
||||
- сфери дії,
|
||||
- розклад.
|
||||
|
||||
### 8.2. Налаштування microDAO
|
||||
|
||||
Окремий розділ:
|
||||
|
||||
* "Системні агенти"
|
||||
- "Системні агенти"
|
||||
|
||||
* Personal Agent (індивідуальний)
|
||||
* Team Agents (список)
|
||||
* Protocol Agents
|
||||
- Personal Agent (індивідуальний)
|
||||
- Team Agents (список)
|
||||
- Protocol Agents
|
||||
|
||||
### 8.3. Журнал операторських дій
|
||||
|
||||
* список автоматичних дій агентів,
|
||||
* фільтри: агент → проєкт → тип дії.
|
||||
- список автоматичних дій агентів,
|
||||
- фільтри: агент → проєкт → тип дії.
|
||||
|
||||
---
|
||||
|
||||
# 9. Інструкції для Cursor
|
||||
## 9. Інструкції для Cursor
|
||||
|
||||
Приклад:
|
||||
|
||||
```
|
||||
```text
|
||||
Implement Operator Modes & System Agents using:
|
||||
|
||||
- 22_operator_modes_and_system_agents.md
|
||||
@@ -367,18 +365,17 @@ Output:
|
||||
- list of files
|
||||
- diff
|
||||
- summary
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 10. Результат
|
||||
## 10. Результат
|
||||
|
||||
Після впровадження цього модуля:
|
||||
|
||||
* приватні агенти можуть працювати як персональні оператори;
|
||||
* командні агенти можуть працювати як "ритуальні організатори" microDAO;
|
||||
* DAO Agent та Wallet Agent стають безпечними протокольними модулями;
|
||||
* усі дії мають чіткі межі, правила і логування;
|
||||
* система стає самокерованою, але контрольованою через дух спільноти.
|
||||
|
||||
- приватні агенти можуть працювати як персональні оператори;
|
||||
- командні агенти можуть працювати як "ритуальні організатори" microDAO;
|
||||
- DAO Agent та Wallet Agent стають безпечними протокольними модулями;
|
||||
- усі дії мають чіткі межі, правила і логування;
|
||||
- система стає самокерованою, але контрольованою через дух спільноти.
|
||||
|
||||
|
||||
@@ -2,33 +2,35 @@
|
||||
|
||||
Живі картки агентів та повний інтерфейс Agent Console
|
||||
|
||||
Цей документ описує UI/UX для агентів у форматі "живих карток" та повний інтерфейс Agent Console, де кожен агент представлений як учасник спільноти з власною історією, досвідом та репутацією.
|
||||
Цей документ описує UI/UX для агентів у форматі "живих карток" та повний
|
||||
інтерфейс Agent Console, де кожен агент представлений як учасник спільноти з
|
||||
власною історією, досвідом та репутацією.
|
||||
|
||||
---
|
||||
|
||||
# 1. Концепція: "Живі картки агентів"
|
||||
## 1. Концепція: "Живі картки агентів"
|
||||
|
||||
Кожен агент у MicroDAO — це не просто бот, а:
|
||||
|
||||
* учасник спільноти з власною історією,
|
||||
* живий модуль розуму, підключений до DAGI,
|
||||
* носій досвіду (1T як міра обчислень та "шляху агента"),
|
||||
* носій репутації в межах спільноти.
|
||||
- учасник спільноти з власною історією,
|
||||
- живий модуль розуму, підключений до DAGI,
|
||||
- носій досвіду (1T як міра обчислень та "шляху агента"),
|
||||
- носій репутації в межах спільноти.
|
||||
|
||||
Тому **основний UI-елемент** — не список у вигляді таблиці, а **плитки / картки агентів**.
|
||||
|
||||
---
|
||||
|
||||
# 2. Плитка агента (карточка в гріді)
|
||||
## 2. Плитка агента (карточка в гріді)
|
||||
|
||||
## 2.1. Розташування
|
||||
|
||||
* В розділі "Агенти" (ліва панель → клік → відкривається основний грід).
|
||||
* Також може використовуватись у:
|
||||
- В розділі "Агенти" (ліва панель → клік → відкривається основний грід).
|
||||
- Також може використовуватись у:
|
||||
|
||||
* модалці "Додати агента до каналу",
|
||||
* маркетплейсі агентів DAARION.city,
|
||||
* списку підключених агентів до microDAO.
|
||||
- модалці "Додати агента до каналу",
|
||||
- маркетплейсі агентів DAARION.city,
|
||||
- списку підключених агентів до microDAO.
|
||||
|
||||
## 2.2. Структура картки
|
||||
|
||||
@@ -36,78 +38,78 @@
|
||||
|
||||
### 1. Верхній блок: Аватар + Відео-аватар
|
||||
|
||||
* Статичний аватар (іконка/символ).
|
||||
* Мала відео-плашка / анімований аватар (loop, без звуку).
|
||||
* Індикатор "онлайн/активний" (маленький маркер).
|
||||
- Статичний аватар (іконка/символ).
|
||||
- Мала відео-плашка / анімований аватар (loop, без звуку).
|
||||
- Індикатор "онлайн/активний" (маленький маркер).
|
||||
|
||||
### 2. Імʼя та роль
|
||||
|
||||
* `Імʼя агента` (наприклад, "DAGI Guide", "Tokenomics Keeper").
|
||||
* Короткий опис призначення у один рядок:
|
||||
- `Імʼя агента` (наприклад, "DAGI Guide", "Tokenomics Keeper").
|
||||
- Короткий опис призначення у один рядок:
|
||||
|
||||
* "Провідник microDAO"
|
||||
* "Куратор знань"
|
||||
* "Месенджер-організатор"
|
||||
- "Провідник microDAO"
|
||||
- "Куратор знань"
|
||||
- "Месенджер-організатор"
|
||||
|
||||
Без жодних фінансових ролей.
|
||||
|
||||
### 3. Метрики досвіду (без фінансової асоціації)
|
||||
|
||||
* **Вік агента**:
|
||||
- **Вік агента**:
|
||||
|
||||
* "У спільноті: 3 тижні" / "6 місяців" / "1 рік 2 місяці".
|
||||
- "У спільноті: 3 тижні" / "6 місяців" / "1 рік 2 місяці".
|
||||
|
||||
* **Досвід 1T**:
|
||||
- **Досвід 1T**:
|
||||
|
||||
* Лічильник: `Досвід: 12 340 1T`
|
||||
* В UI пояснення через tooltip:
|
||||
- Лічильник: `Досвід: 12 340 1T`
|
||||
- В UI пояснення через tooltip:
|
||||
|
||||
> "1T — це внутрішня одиниця обчислень і досвіду агента в екосистемі DAARION.city."
|
||||
|
||||
* Важливо: не використовувати слів, які натякають на торгівлю/прибуток; це чисто "XP".
|
||||
- Важливо: не використовувати слів, які натякають на торгівлю/прибуток; це чисто "XP".
|
||||
|
||||
* **Репутація спільноти**:
|
||||
- **Репутація спільноти**:
|
||||
|
||||
* Наприклад, шкала 0–100 або 0–5 "зірочок".
|
||||
* Підпис: `Репутація в спільноті` / `Довіра спільноти`.
|
||||
- Наприклад, шкала 0–100 або 0–5 "зірочок".
|
||||
- Підпис: `Репутація в спільноті` / `Довіра спільноти`.
|
||||
|
||||
### 4. Присутність у просторах
|
||||
|
||||
* Маленькі бейджі:
|
||||
- Маленькі бейджі:
|
||||
|
||||
* `Учасник: 3 канали`
|
||||
* `Працює в: 2 microDAO`
|
||||
- `Учасник: 3 канали`
|
||||
- `Працює в: 2 microDAO`
|
||||
|
||||
* Позначки "публічний / конфіденційний":
|
||||
- Позначки "публічний / конфіденційний":
|
||||
|
||||
* іконка замка для конфіденційних контекстів.
|
||||
- іконка замка для конфіденційних контекстів.
|
||||
|
||||
### 5. Статус підключення
|
||||
|
||||
* Текст/бейдж:
|
||||
- Текст/бейдж:
|
||||
|
||||
* `Підключено до цього простору`
|
||||
* або `Доступний для підключення`
|
||||
- `Підключено до цього простору`
|
||||
- або `Доступний для підключення`
|
||||
|
||||
* Кнопка:
|
||||
- Кнопка:
|
||||
|
||||
* `Підключити до контексту` (якщо ще не підʼєднаний).
|
||||
- `Підключити до контексту` (якщо ще не підʼєднаний).
|
||||
|
||||
---
|
||||
|
||||
# 3. Ховер та клік по картці
|
||||
## 3. Ховер та клік по картці
|
||||
|
||||
## 3.1. При наведенні курсору (hover)
|
||||
|
||||
Показати поверх картки напівпрозорий оверлей з опціями:
|
||||
|
||||
* Основна кнопка:
|
||||
- Основна кнопка:
|
||||
**"Почати взаємодію"**
|
||||
|
||||
* Додаткові:
|
||||
- Додаткові:
|
||||
|
||||
* `Підключити до цього каналу` (якщо стіна контексту вже вибрана)
|
||||
* `Деталі агента` (відкрити повний профіль)
|
||||
- `Підключити до цього каналу` (якщо стіна контексту вже вибрана)
|
||||
- `Деталі агента` (відкрити повний профіль)
|
||||
|
||||
Можна додати коротку анімацію відео-аватара (легке пожвавлення).
|
||||
|
||||
@@ -115,204 +117,204 @@
|
||||
|
||||
Якщо клікаємо по основній площі картки:
|
||||
|
||||
* Відкривається **нове вікно/панель агента** (Agent Console), де:
|
||||
- Відкривається **нове вікно/панель агента** (Agent Console), де:
|
||||
|
||||
* є текстовий чат,
|
||||
* є керування голосовим режимом,
|
||||
* є вкладка для обміну файлами/документами,
|
||||
* є вкладка памʼяті/прав доступу.
|
||||
- є текстовий чат,
|
||||
- є керування голосовим режимом,
|
||||
- є вкладка для обміну файлами/документами,
|
||||
- є вкладка памʼяті/прав доступу.
|
||||
|
||||
---
|
||||
|
||||
# 4. Agent Console: повний інтерфейс агента
|
||||
## 4. Agent Console: повний інтерфейс агента
|
||||
|
||||
Приклад структури:
|
||||
|
||||
## 4.1. Верхня панель
|
||||
|
||||
* Аватар + відео-аватар (більший).
|
||||
* Імʼя, роль, короткий опис.
|
||||
* Показники:
|
||||
- Аватар + відео-аватар (більший).
|
||||
- Імʼя, роль, короткий опис.
|
||||
- Показники:
|
||||
|
||||
* Вік,
|
||||
* Досвід 1T,
|
||||
* Репутація спільноти.
|
||||
- Вік,
|
||||
- Досвід 1T,
|
||||
- Репутація спільноти.
|
||||
|
||||
* Значок підключеності до поточного microDAO / каналу.
|
||||
- Значок підключеності до поточного microDAO / каналу.
|
||||
|
||||
## 4.2. Вкладки
|
||||
|
||||
### Вкладка 1: Чат
|
||||
|
||||
* Текстовий чат (як звичайний agent chat).
|
||||
* Голосовий режим: кнопка "Голосовий діалог" (start/stop).
|
||||
* Привʼязка до поточного контексту:
|
||||
- Текстовий чат (як звичайний agent chat).
|
||||
- Голосовий режим: кнопка "Голосовий діалог" (start/stop).
|
||||
- Привʼязка до поточного контексту:
|
||||
|
||||
* показати, в якому просторі ти з ним розмовляєш.
|
||||
- показати, в якому просторі ти з ним розмовляєш.
|
||||
|
||||
### Вкладка 2: Файли та Документи
|
||||
|
||||
* Список файлів, якими обмінювались з цим агентом в межах даного microDAO.
|
||||
* Кнопка `Завантажити файл` → агент через DAGI може:
|
||||
- Список файлів, якими обмінювались з цим агентом в межах даного microDAO.
|
||||
- Кнопка `Завантажити файл` → агент через DAGI може:
|
||||
|
||||
* проаналізувати документ,
|
||||
* створити новий документ (збереження в microDAO file store).
|
||||
- проаналізувати документ,
|
||||
- створити новий документ (збереження в microDAO file store).
|
||||
|
||||
* Обовʼязково:
|
||||
- Обовʼязково:
|
||||
|
||||
* **збереження у власних сховищах microDAO**, не у зовнішньому середовищі по замовчуванню.
|
||||
- **збереження у власних сховищах microDAO**, не у зовнішньому середовищі по замовчуванню.
|
||||
|
||||
### Вкладка 3: Памʼять і Знання
|
||||
|
||||
* Блоки з:
|
||||
- Блоки з:
|
||||
|
||||
* короткостроковою памʼяттю (останні теми),
|
||||
* довгостроковими фактами про цю спільноту (як у 13_agent_memory_system).
|
||||
- короткостроковою памʼяттю (останні теми),
|
||||
- довгостроковими фактами про цю спільноту (як у 13_agent_memory_system).
|
||||
|
||||
* Кнопки:
|
||||
- Кнопки:
|
||||
|
||||
* `Показати, що ти памʼятаєш про цей проєкт`
|
||||
* `Очистити частину памʼяті`
|
||||
- `Показати, що ти памʼятаєш про цей проєкт`
|
||||
- `Очистити частину памʼяті`
|
||||
|
||||
### Вкладка 4: Присутність / Права доступу
|
||||
|
||||
* Список:
|
||||
- Список:
|
||||
|
||||
* В яких каналах цей агент присутній (публічні/конфіденційні).
|
||||
* В яких проєктах бере участь.
|
||||
- В яких каналах цей агент присутній (публічні/конфіденційні).
|
||||
- В яких проєктах бере участь.
|
||||
|
||||
* Для кожного:
|
||||
- Для кожного:
|
||||
|
||||
* перемикач `Підключити/Відключити`.
|
||||
* Позначка рівня доступу (read/write/tasks/knowledge).
|
||||
- перемикач `Підключити/Відключити`.
|
||||
- Позначка рівня доступу (read/write/tasks/knowledge).
|
||||
|
||||
* Кнопка:
|
||||
- Кнопка:
|
||||
|
||||
* `Додати до нового каналу/проєкту` → відкриває спрощений Invite-Agent-Flow, але вже з попередньо вибраним агентом.
|
||||
- `Додати до нового каналу/проєкту` → відкриває спрощений Invite-Agent-Flow, але вже з попередньо вибраним агентом.
|
||||
|
||||
### Вкладка 5: Еволюція та дух спільноти
|
||||
|
||||
* Замінює будь-який фінансовий наратив:
|
||||
- Замінює будь-який фінансовий наратив:
|
||||
|
||||
* `Шлях агента в цій спільноті`
|
||||
* Лог:
|
||||
- `Шлях агента в цій спільноті`
|
||||
- Лог:
|
||||
|
||||
* скільки разів агент допомагав у задачах,
|
||||
* які типи запитів обробляє найчастіше,
|
||||
* "внесок у колективний розум" (наприклад, скільки фактів/правил додано).
|
||||
- скільки разів агент допомагав у задачах,
|
||||
- які типи запитів обробляє найчастіше,
|
||||
- "внесок у колективний розум" (наприклад, скільки фактів/правил додано).
|
||||
|
||||
* Репутація:
|
||||
- Репутація:
|
||||
|
||||
* відгуки/оцінки від учасників (без мови торгівлі).
|
||||
- відгуки/оцінки від учасників (без мови торгівлі).
|
||||
|
||||
---
|
||||
|
||||
# 5. DAGI, багатомодальність і сховища
|
||||
## 5. DAGI, багатомодальність і сховища
|
||||
|
||||
## 5.1. DAGI як бекенд агентських здібностей
|
||||
|
||||
Кожен агент отримує від DAGI:
|
||||
|
||||
* текстове мислення,
|
||||
* мульти-модальні можливості:
|
||||
- текстове мислення,
|
||||
- мульти-модальні можливості:
|
||||
|
||||
* розуміння зображень/файлів,
|
||||
* створення текстів, планів, специфікацій,
|
||||
* потенційно роботу з відео.
|
||||
- розуміння зображень/файлів,
|
||||
- створення текстів, планів, специфікацій,
|
||||
- потенційно роботу з відео.
|
||||
|
||||
Інтерфейс агента дає доступ до:
|
||||
|
||||
* аналізу файлів:
|
||||
- аналізу файлів:
|
||||
|
||||
* "Поясни цей документ для команди"
|
||||
* "Зроби витяг для каналу #planning"
|
||||
- "Поясни цей документ для команди"
|
||||
- "Зроби витяг для каналу #planning"
|
||||
|
||||
* генерації нових артефактів:
|
||||
- генерації нових артефактів:
|
||||
|
||||
* плани,
|
||||
* дорожні карти,
|
||||
* документація.
|
||||
- плани,
|
||||
- дорожні карти,
|
||||
- документація.
|
||||
|
||||
## 5.2. Зберігання в MicroDAO, а не "десь в хмарі без контролю"
|
||||
|
||||
Ключовий принцип:
|
||||
|
||||
* **Результати роботи агента** (файли, документи, знання) зберігаються:
|
||||
- **Результати роботи агента** (файли, документи, знання) зберігаються:
|
||||
|
||||
* у сховищі степені MicroDAO (файлове / БД),
|
||||
* або у локальних базах спільноти.
|
||||
- у сховищі степені MicroDAO (файлове / БД),
|
||||
- або у локальних базах спільноти.
|
||||
|
||||
* DAGI використовується як "мозок", але:
|
||||
- DAGI використовується як "мозок", але:
|
||||
|
||||
* не забирає собі сирі дані без волі спільноти,
|
||||
* не є єдиним місцем зберігання.
|
||||
- не забирає собі сирі дані без волі спільноти,
|
||||
- не є єдиним місцем зберігання.
|
||||
|
||||
Це важливо підкреслити в UX:
|
||||
|
||||
* у консолі:
|
||||
- у консолі:
|
||||
|
||||
* "Документи зберігаються в просторі вашої microDAO."
|
||||
- "Документи зберігаються в просторі вашої microDAO."
|
||||
|
||||
* опції експорту:
|
||||
- опції експорту:
|
||||
|
||||
* "Поділитися в іншому просторі DAARION.city"
|
||||
* "Надати доступ іншому агенту"
|
||||
- "Поділитися в іншому просторі DAARION.city"
|
||||
- "Надати доступ іншому агенту"
|
||||
|
||||
---
|
||||
|
||||
# 6. Підключення/відключення агентів до публічних/конфіденційних просторів
|
||||
## 6. Підключення/відключення агентів до публічних/конфіденційних просторів
|
||||
|
||||
## 6.1. З точки зору плитки
|
||||
|
||||
На картці агента:
|
||||
|
||||
* бейджі:
|
||||
- бейджі:
|
||||
|
||||
* `Публічні простори: 2`
|
||||
* `Конфіденційні: 1`
|
||||
- `Публічні простори: 2`
|
||||
- `Конфіденційні: 1`
|
||||
|
||||
* При натисканні:
|
||||
- При натисканні:
|
||||
|
||||
* відкривається невеликий список:
|
||||
- відкривається невеликий список:
|
||||
|
||||
* `#general (публічний)`
|
||||
* `#dev-mvp (конфіденційний)`
|
||||
- `#general (публічний)`
|
||||
- `#dev-mvp (конфіденційний)`
|
||||
|
||||
* поруч — перемикач:
|
||||
- поруч — перемикач:
|
||||
|
||||
* `Підключено / Відʼєднано`.
|
||||
- `Підключено / Відʼєднано`.
|
||||
|
||||
## 6.2. З точки зору Agent Console
|
||||
|
||||
У вкладці "Присутність / Права доступу":
|
||||
|
||||
* Табличка:
|
||||
- Табличка:
|
||||
|
||||
* Простір / Тип (публічний/конфіденційний) / Доступ / Перемикач.
|
||||
- Простір / Тип (публічний/конфіденційний) / Доступ / Перемикач.
|
||||
|
||||
* Операції:
|
||||
- Операції:
|
||||
|
||||
* натискання `Відʼєднати`:
|
||||
- натискання `Відʼєднати`:
|
||||
|
||||
* агент перестає отримувати потік повідомлень з цього каналу/простору;
|
||||
* його не видно у списку учасників.
|
||||
- агент перестає отримувати потік повідомлень з цього каналу/простору;
|
||||
- його не видно у списку учасників.
|
||||
|
||||
* натискання `Підключити`:
|
||||
- натискання `Підключити`:
|
||||
|
||||
* запускає внутрішній Invite-Agent-Flow для відповідного ресурсу.
|
||||
- запускає внутрішній Invite-Agent-Flow для відповідного ресурсу.
|
||||
|
||||
Все це повинно залишатись максимально людським в термінології:
|
||||
|
||||
жодних "інвесторів", "юнітів вартості", "ROI" тощо — тільки:
|
||||
|
||||
* "досвід",
|
||||
* "шлях агента",
|
||||
* "довіра спільноти",
|
||||
* "внесок у колективний розум".
|
||||
- "досвід",
|
||||
- "шлях агента",
|
||||
- "довіра спільноти",
|
||||
- "внесок у колективний розум".
|
||||
|
||||
---
|
||||
|
||||
# 7. Компоненти та структура
|
||||
## 7. Компоненти та структура
|
||||
|
||||
## 7.1. Agent Card Component
|
||||
|
||||
@@ -330,7 +332,7 @@ interface AgentCardProps {
|
||||
export function AgentCard({ agent, onCardClick, onConnect, currentContext }: AgentCardProps) {
|
||||
// Рендер картки з усіма метриками
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
## 7.2. Agent Grid
|
||||
|
||||
@@ -344,7 +346,7 @@ interface AgentGridProps {
|
||||
export function AgentGrid({ agents, onAgentSelect, filter }: AgentGridProps) {
|
||||
// Сітка карток агентів
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
## 7.3. Agent Console
|
||||
|
||||
@@ -357,11 +359,11 @@ interface AgentConsoleProps {
|
||||
export function AgentConsole({ agentId, initialTab = "chat" }: AgentConsoleProps) {
|
||||
// Повний інтерфейс агента з вкладками
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 8. Типи даних
|
||||
## 8. Типи даних
|
||||
|
||||
## 8.1. Agent Metrics
|
||||
|
||||
@@ -384,7 +386,7 @@ interface AgentMetrics {
|
||||
confidential: number;
|
||||
};
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
## 8.2. Agent Presence
|
||||
|
||||
@@ -396,7 +398,7 @@ interface AgentPresence {
|
||||
accessLevel: string[];
|
||||
connected: boolean;
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
## 8.3. Agent Evolution Log
|
||||
|
||||
@@ -415,11 +417,11 @@ interface AgentEvolutionLog {
|
||||
averageRating: number;
|
||||
};
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 9. API Endpoints
|
||||
## 9. API Endpoints
|
||||
|
||||
## 9.1. Agent Metrics
|
||||
|
||||
@@ -429,7 +431,7 @@ GET /agents/{agentId}/metrics
|
||||
|
||||
GET /agents/{agentId}/presence
|
||||
// Список просторів, де агент присутній
|
||||
```
|
||||
```text
|
||||
|
||||
## 9.2. Agent Files
|
||||
|
||||
@@ -446,42 +448,42 @@ POST /agents/{agentId}/files
|
||||
channelId?: string;
|
||||
};
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
## 9.3. Agent Evolution
|
||||
|
||||
```ts
|
||||
GET /agents/{agentId}/evolution/log
|
||||
// Лог еволюції та внеску агента
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 10. UI/UX Деталі
|
||||
## 10. UI/UX Деталі
|
||||
|
||||
## 10.1. Відео-аватар
|
||||
|
||||
* Формат: короткий loop (2-5 секунд)
|
||||
* Розмір на картці: 64x64px
|
||||
* Розмір в консолі: 128x128px
|
||||
* Без звуку
|
||||
* Анімація при hover: легке пожвавлення
|
||||
- Формат: короткий loop (2-5 секунд)
|
||||
- Розмір на картці: 64x64px
|
||||
- Розмір в консолі: 128x128px
|
||||
- Без звуку
|
||||
- Анімація при hover: легке пожвавлення
|
||||
|
||||
## 10.2. Метрики досвіду
|
||||
|
||||
* Вік: "3 тижні", "6 місяців", "1 рік 2 місяці"
|
||||
* 1T: велике число з розділювачами (12 340 1T)
|
||||
* Репутація: візуальна шкала (зірки або прогрес-бар)
|
||||
- Вік: "3 тижні", "6 місяців", "1 рік 2 місяці"
|
||||
- 1T: велике число з розділювачами (12 340 1T)
|
||||
- Репутація: візуальна шкала (зірки або прогрес-бар)
|
||||
|
||||
## 10.3. Бейджі присутності
|
||||
|
||||
* Компактні бейджі з іконками
|
||||
* Кольори: синій для публічних, червоний для конфіденційних
|
||||
* Іконка замка для конфіденційних просторів
|
||||
- Компактні бейджі з іконками
|
||||
- Кольори: синій для публічних, червоний для конфіденційних
|
||||
- Іконка замка для конфіденційних просторів
|
||||
|
||||
---
|
||||
|
||||
# 11. Інтеграція з існуючими модулями
|
||||
## 11. Інтеграція з існуючими модулями
|
||||
|
||||
## 11.1. Agent UI System (10)
|
||||
|
||||
@@ -506,11 +508,11 @@ Agent Console використовує:
|
||||
|
||||
---
|
||||
|
||||
# 12. Завдання для Cursor
|
||||
## 12. Завдання для Cursor
|
||||
|
||||
Приклад промта:
|
||||
|
||||
```
|
||||
```text
|
||||
You are a senior React/TS engineer.
|
||||
|
||||
Implement Agent Cards and Console using:
|
||||
@@ -534,23 +536,21 @@ Output:
|
||||
- list of modified files
|
||||
- diff
|
||||
- summary
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 13. Результат
|
||||
## 13. Результат
|
||||
|
||||
Після впровадження:
|
||||
|
||||
* Агенти представлені як живі учасники спільноти, а не просто боти
|
||||
* Користувач бачить досвід та репутацію кожного агента
|
||||
* Повний контроль над підключеннями агентів до просторів
|
||||
* Зберігання всіх результатів роботи агентів у сховищі microDAO
|
||||
* Людська термінологія без фінансових наративів
|
||||
- Агенти представлені як живі учасники спільноти, а не просто боти
|
||||
- Користувач бачить досвід та репутацію кожного агента
|
||||
- Повний контроль над підключеннями агентів до просторів
|
||||
- Зберігання всіх результатів роботи агентів у сховищі microDAO
|
||||
- Людська термінологія без фінансових наративів
|
||||
|
||||
---
|
||||
|
||||
**Готово.**
|
||||
Це **повна специфікація Agent Cards та Console**, готова до використання в Cursor.
|
||||
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
|
||||
---
|
||||
|
||||
# 1. MULTI-TENANT DOMAINS & ROUTING
|
||||
## 1. MULTI-TENANT DOMAINS & ROUTING
|
||||
|
||||
MicroDAO має підтримувати:
|
||||
|
||||
@@ -37,7 +37,7 @@ teams:
|
||||
- slug: string // "greenfood", "musiclab"
|
||||
- primary_domain_id: string | null
|
||||
- created_at
|
||||
```
|
||||
```text
|
||||
|
||||
### Таблиця `domains`
|
||||
|
||||
@@ -50,7 +50,7 @@ domains:
|
||||
- is_primary: boolean
|
||||
- verified_at: Date | null
|
||||
- created_at
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
@@ -58,7 +58,7 @@ domains:
|
||||
|
||||
На початку кожного HTTP-запиту:
|
||||
|
||||
```
|
||||
```text
|
||||
host := request.headers["Host"]
|
||||
|
||||
1) спробувати знайти host у domains:
|
||||
@@ -74,7 +74,7 @@ host := request.headers["Host"]
|
||||
4) якщо знайшли → currentTeamId = id.
|
||||
|
||||
5) інакше → 404 або сторінка Onboarding ("microDAO не знайдено")
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
@@ -84,19 +84,19 @@ host := request.headers["Host"]
|
||||
|
||||
URL:
|
||||
|
||||
```
|
||||
```text
|
||||
greenfood.daarion.city/
|
||||
mydao.org/
|
||||
```
|
||||
```text
|
||||
|
||||
Усі маршрути стають:
|
||||
|
||||
```
|
||||
```text
|
||||
/ → головна команда
|
||||
/projects
|
||||
/agents
|
||||
/settings
|
||||
```
|
||||
```text
|
||||
|
||||
**Без /t/:teamId** — тому що `teamId` вже визначено з домену.
|
||||
|
||||
@@ -104,21 +104,21 @@ mydao.org/
|
||||
|
||||
URL:
|
||||
|
||||
```
|
||||
```text
|
||||
app.daarion.city/t/:teamId/agents
|
||||
```
|
||||
```text
|
||||
|
||||
Цей режим потрібен:
|
||||
|
||||
* для розробки,
|
||||
* для адміністрування,
|
||||
* для роботи всередині DAARION.city як централізованої платформи.
|
||||
- для розробки,
|
||||
- для адміністрування,
|
||||
- для роботи всередині DAARION.city як централізованої платформи.
|
||||
|
||||
---
|
||||
|
||||
## 1.4. Налаштування кастомного домену (UX)
|
||||
|
||||
### Потік:
|
||||
### Потік
|
||||
|
||||
1. Адмін відкриває: **Settings → Domain**
|
||||
|
||||
@@ -128,7 +128,7 @@ app.daarion.city/t/:teamId/agents
|
||||
|
||||
4. Система показує інструкцію:
|
||||
|
||||
```
|
||||
```text
|
||||
Створіть CNAME:
|
||||
mydao.org → domains.daarion.city
|
||||
```
|
||||
@@ -143,13 +143,13 @@ app.daarion.city/t/:teamId/agents
|
||||
|
||||
---
|
||||
|
||||
# 2. WALLET AGENT — ПРОТОКОЛ БЕЗПЕЧНОГО ПІДПИСУ
|
||||
## 2. WALLET AGENT — ПРОТОКОЛ БЕЗПЕЧНОГО ПІДПИСУ
|
||||
|
||||
Wallet Agent — це **інтерфейс** між microDAO і зовнішніми гаманцями:
|
||||
|
||||
* браузерні (MetaMask, WalletConnect),
|
||||
* мобільні,
|
||||
* апаратні (Tangem-подібні).
|
||||
- браузерні (MetaMask, WalletConnect),
|
||||
- мобільні,
|
||||
- апаратні (Tangem-подібні).
|
||||
|
||||
Wallet Agent **ніколи не отримує приватний ключ**.
|
||||
|
||||
@@ -168,7 +168,7 @@ walletAgent.prepare_signature_payload({
|
||||
action: "update_policy",
|
||||
params: {...}
|
||||
});
|
||||
```
|
||||
```text
|
||||
|
||||
Wallet Agent:
|
||||
|
||||
@@ -193,7 +193,7 @@ sign_requests:
|
||||
- status: "pending" | "signed" | "rejected"
|
||||
- created_at
|
||||
- updated_at
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
@@ -201,14 +201,14 @@ sign_requests:
|
||||
|
||||
Коли є новий `sign_request`:
|
||||
|
||||
* у UI зʼявляється:
|
||||
- у UI зʼявляється:
|
||||
|
||||
* "Агент пропонує підписати дію"
|
||||
* опис,
|
||||
* кнопки:
|
||||
- "Агент пропонує підписати дію"
|
||||
- опис,
|
||||
- кнопки:
|
||||
|
||||
* "Підписати"
|
||||
* "Скасувати"
|
||||
- "Підписати"
|
||||
- "Скасувати"
|
||||
|
||||
Коли користувач натискає "Підписати":
|
||||
|
||||
@@ -216,7 +216,7 @@ sign_requests:
|
||||
2. отримує `signature`,
|
||||
3. викликає:
|
||||
|
||||
```
|
||||
```text
|
||||
POST /sign_requests/:id/confirm
|
||||
{
|
||||
signature: "0x..."
|
||||
@@ -235,7 +235,7 @@ sign_results:
|
||||
- tx_hash?
|
||||
- confirmed_at
|
||||
- status: "broadcasted" | "failed"
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
@@ -248,22 +248,22 @@ tools: [
|
||||
"verify_signature", // перевірка
|
||||
"get_wallet_state" // поточні адреси, мережі, доступи
|
||||
]
|
||||
```
|
||||
```text
|
||||
|
||||
Wallet Agent — це декларативна прослойка між дією і підписом користувача.
|
||||
|
||||
---
|
||||
|
||||
# 3. DAO AGENT — СИНХРОНІЗАЦІЯ З ON-CHAIN DAO
|
||||
## 3. DAO AGENT — СИНХРОНІЗАЦІЯ З ON-CHAIN DAO
|
||||
|
||||
Не кожному microDAO потрібен on-chain DAO.
|
||||
|
||||
Але архітектура має підтримувати:
|
||||
|
||||
* звʼязок з DAO-контрактами,
|
||||
* синхронізацію ритуалів узгодження microDAO з DAO-голосуваннями,
|
||||
* оновлення локальних правил після голосування,
|
||||
* відправку результатів у DAO-контракт.
|
||||
- звʼязок з DAO-контрактами,
|
||||
- синхронізацію ритуалів узгодження microDAO з DAO-голосуваннями,
|
||||
- оновлення локальних правил після голосування,
|
||||
- відправку результатів у DAO-контракт.
|
||||
|
||||
---
|
||||
|
||||
@@ -271,33 +271,33 @@ Wallet Agent — це декларативна прослойка між діє
|
||||
|
||||
### 1) Fetch external proposals
|
||||
|
||||
```
|
||||
```text
|
||||
fetch_dao_proposals(team_id)
|
||||
```
|
||||
```text
|
||||
|
||||
Тягне список пропозицій з DAO-контракту чи API.
|
||||
|
||||
### 2) Map rituals to proposals
|
||||
|
||||
```
|
||||
```text
|
||||
map_ritual_to_proposal(ritual_id, proposal_id)
|
||||
```
|
||||
```text
|
||||
|
||||
Звʼязує локальний ритуал і зовнішню пропозицію.
|
||||
|
||||
### 3) Submit local result to DAO
|
||||
|
||||
```
|
||||
```text
|
||||
submit_ritual_result(ritual_id)
|
||||
```
|
||||
```text
|
||||
|
||||
Використовує Wallet Agent для підпису.
|
||||
|
||||
### 4) Sync policy
|
||||
|
||||
```
|
||||
```text
|
||||
sync_policies_onchain()
|
||||
```
|
||||
```text
|
||||
|
||||
Порівнює локальні правила з DAO-версією.
|
||||
|
||||
@@ -318,7 +318,7 @@ dao_proposals:
|
||||
- result: "accepted" | "rejected" | "pending"
|
||||
- mapped_ritual_id: string | null
|
||||
- created_at
|
||||
```
|
||||
```text
|
||||
|
||||
### Таблиця `dao_sync_logs`
|
||||
|
||||
@@ -331,7 +331,7 @@ dao_sync_logs:
|
||||
- action_type
|
||||
- payload_json
|
||||
- created_at
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
@@ -344,16 +344,16 @@ tools: [
|
||||
"submit_ritual_result",
|
||||
"resolve_dao_result"
|
||||
]
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 4. Інтеграція з Governance Agent та OperatorMode
|
||||
## 4. Інтеграція з Governance Agent та OperatorMode
|
||||
|
||||
DAO Agent працює лише тоді, коли:
|
||||
|
||||
* Governance Agent дозволяє це (entitlement),
|
||||
* Wallet Agent підписує дії людиною.
|
||||
- Governance Agent дозволяє це (entitlement),
|
||||
- Wallet Agent підписує дії людиною.
|
||||
|
||||
OperatorMode у DAO Agent:
|
||||
|
||||
@@ -368,45 +368,45 @@ operatorMode: {
|
||||
schedule: "0 */6 * * *", // кожні 6 годин
|
||||
maxActionsPerHour: 5
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
**Оновлення правил або відправка результатів ритуалу завжди вимагає людського підпису.**
|
||||
|
||||
---
|
||||
|
||||
# 5. API ЕНДПОЇНТИ
|
||||
## 5. API ЕНДПОЇНТИ
|
||||
|
||||
## 5.1. Domains API
|
||||
|
||||
```
|
||||
```text
|
||||
GET /domains?team_id
|
||||
POST /domains
|
||||
PATCH /domains/:id
|
||||
DELETE /domains/:id
|
||||
```
|
||||
```text
|
||||
|
||||
## 5.2. Wallet API
|
||||
|
||||
```
|
||||
```text
|
||||
GET /sign_requests?team_id
|
||||
POST /sign_requests
|
||||
POST /sign_requests/:id/confirm
|
||||
POST /sign_requests/:id/reject
|
||||
```
|
||||
```text
|
||||
|
||||
## 5.3. DAO API
|
||||
|
||||
```
|
||||
```text
|
||||
GET /dao/proposals?team_id
|
||||
POST /dao/sync
|
||||
POST /dao/ritual/:id/submit
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 6. Інструкції для Cursor
|
||||
## 6. Інструкції для Cursor
|
||||
|
||||
```
|
||||
```text
|
||||
Use 23_domains_wallet_dao_deepdive.md to implement:
|
||||
|
||||
1) Multi-tenant domain routing (backend + frontend)
|
||||
@@ -432,16 +432,16 @@ Use 23_domains_wallet_dao_deepdive.md to implement:
|
||||
- Wallet signature flow
|
||||
|
||||
6) Add operatorMode guards where appropriate
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 7. Результат
|
||||
## 7. Результат
|
||||
|
||||
Після впровадження:
|
||||
|
||||
* кожне microDAO може мати власний домен без конфігураційної плутанини,
|
||||
* Wallet Agent забезпечує безпечний і прозорий протокол підпису,
|
||||
* DAO Agent може синхронізуватися з зовнішніми DAO-протоколами,
|
||||
* архітектура стає розширюваною для міжпросторових і міжмережевих інтеграцій,
|
||||
* operatorMode забезпечує контрольований автоматизм без ризиків.
|
||||
- кожне microDAO може мати власний домен без конфігураційної плутанини,
|
||||
- Wallet Agent забезпечує безпечний і прозорий протокол підпису,
|
||||
- DAO Agent може синхронізуватися з зовнішніми DAO-протоколами,
|
||||
- архітектура стає розширюваною для міжпросторових і міжмережевих інтеграцій,
|
||||
- operatorMode забезпечує контрольований автоматизм без ризиків.
|
||||
|
||||
@@ -674,4 +674,3 @@ Output:
|
||||
- чіткий контроль прав через capabilities;
|
||||
- інтеграція з Wallet Agent та Embassy Module;
|
||||
- підготовка до масштабування та додавання нових платформ.
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
---
|
||||
|
||||
# Task 1 — Agent-Cards-Grid (плитки агентів)
|
||||
## Task 1 — Agent-Cards-Grid (плитки агентів)
|
||||
|
||||
## Мета
|
||||
|
||||
@@ -18,49 +18,49 @@
|
||||
|
||||
### 1. Компонент AgentCard
|
||||
|
||||
* Розмір: 280x360px (рекомендовано)
|
||||
* Структура:
|
||||
- Розмір: 280x360px (рекомендовано)
|
||||
- Структура:
|
||||
|
||||
* Верхній блок: Аватар + відео-аватар (64x64px)
|
||||
* Імʼя та роль
|
||||
* Метрики: Вік, Досвід 1T, Репутація
|
||||
* Присутність: бейджі каналів/проєктів
|
||||
* Статус підключення
|
||||
- Верхній блок: Аватар + відео-аватар (64x64px)
|
||||
- Імʼя та роль
|
||||
- Метрики: Вік, Досвід 1T, Репутація
|
||||
- Присутність: бейджі каналів/проєктів
|
||||
- Статус підключення
|
||||
|
||||
### 2. Компонент AgentGrid
|
||||
|
||||
* Сітка карток (responsive: 1-4 колонки)
|
||||
* Фільтри: "Всі", "Підключені", "Доступні"
|
||||
* Пошук по імені/ролі
|
||||
- Сітка карток (responsive: 1-4 колонки)
|
||||
- Фільтри: "Всі", "Підключені", "Доступні"
|
||||
- Пошук по імені/ролі
|
||||
|
||||
### 3. Дані
|
||||
|
||||
* API: `GET /agents?team_id=...`
|
||||
* Метрики: `GET /agents/{id}/metrics`
|
||||
* Присутність: `GET /agents/{id}/presence`
|
||||
- API: `GET /agents?team_id=...`
|
||||
- Метрики: `GET /agents/{id}/metrics`
|
||||
- Присутність: `GET /agents/{id}/presence`
|
||||
|
||||
### 4. Hover ефект
|
||||
|
||||
* Напівпрозорий оверлей з кнопками:
|
||||
* "Почати взаємодію"
|
||||
* "Підключити до каналу"
|
||||
* "Деталі агента"
|
||||
- Напівпрозорий оверлей з кнопками:
|
||||
- "Почати взаємодію"
|
||||
- "Підключити до каналу"
|
||||
- "Деталі агента"
|
||||
|
||||
### 5. Клік
|
||||
|
||||
* Відкриває Agent Console (Task 2)
|
||||
- Відкриває Agent Console (Task 2)
|
||||
|
||||
## Acceptance Criteria
|
||||
|
||||
* Картки агентів відображаються у сітці
|
||||
* Показуються метрики (вік, 1T, репутація)
|
||||
* Hover показує опції взаємодії
|
||||
* Клік відкриває Agent Console
|
||||
* Фільтри та пошук працюють
|
||||
- Картки агентів відображаються у сітці
|
||||
- Показуються метрики (вік, 1T, репутація)
|
||||
- Hover показує опції взаємодії
|
||||
- Клік відкриває Agent Console
|
||||
- Фільтри та пошук працюють
|
||||
|
||||
## Приклад промта для Cursor
|
||||
|
||||
```
|
||||
```text
|
||||
Implement Agent Cards Grid using:
|
||||
|
||||
- 23_agent_cards_and_console.md
|
||||
@@ -76,7 +76,7 @@ Deliverables:
|
||||
5) Search by name/role.
|
||||
|
||||
Output: list of files + diff + summary.
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
@@ -90,55 +90,55 @@ Output: list of files + diff + summary.
|
||||
|
||||
### 1. Структура Agent Console
|
||||
|
||||
* Верхня панель: Аватар, імʼя, метрики
|
||||
* Вкладки: Чат, Файли, Памʼять, Присутність, Еволюція
|
||||
* Контент вкладок (деталі нижче)
|
||||
- Верхня панель: Аватар, імʼя, метрики
|
||||
- Вкладки: Чат, Файли, Памʼять, Присутність, Еволюція
|
||||
- Контент вкладок (деталі нижче)
|
||||
|
||||
### 2. Вкладка "Чат"
|
||||
|
||||
* Використовує `AgentChatWindow` з `10_agent_ui_system.md`
|
||||
* Додатково: кнопка "Голосовий діалог" (stub для MVP)
|
||||
* Показ поточного контексту
|
||||
- Використовує `AgentChatWindow` з `10_agent_ui_system.md`
|
||||
- Додатково: кнопка "Голосовий діалог" (stub для MVP)
|
||||
- Показ поточного контексту
|
||||
|
||||
### 3. Вкладка "Файли та Документи"
|
||||
|
||||
* Список файлів (з API або stub)
|
||||
* Кнопка "Завантажити файл"
|
||||
* Індикатор: "Документи зберігаються в просторі вашої microDAO"
|
||||
- Список файлів (з API або stub)
|
||||
- Кнопка "Завантажити файл"
|
||||
- Індикатор: "Документи зберігаються в просторі вашої microDAO"
|
||||
|
||||
### 4. Вкладка "Памʼять і Знання"
|
||||
|
||||
* Використовує компоненти з `13_agent_memory_system.md`
|
||||
* Короткострокова та довгострокова памʼять
|
||||
* Кнопки управління памʼяттю
|
||||
- Використовує компоненти з `13_agent_memory_system.md`
|
||||
- Короткострокова та довгострокова памʼять
|
||||
- Кнопки управління памʼяттю
|
||||
|
||||
### 5. Вкладка "Присутність / Права доступу"
|
||||
|
||||
* Таблиця просторів (канали, проєкти)
|
||||
* Перемикачі підключення
|
||||
* Рівні доступу
|
||||
* Кнопка "Додати до нового каналу/проєкту"
|
||||
- Таблиця просторів (канали, проєкти)
|
||||
- Перемикачі підключення
|
||||
- Рівні доступу
|
||||
- Кнопка "Додати до нового каналу/проєкту"
|
||||
|
||||
### 6. Вкладка "Еволюція та дух спільноти"
|
||||
|
||||
* Лог внеску агента
|
||||
* Статистика запитів
|
||||
* Репутація від спільноти
|
||||
* Без фінансових термінів
|
||||
- Лог внеску агента
|
||||
- Статистика запитів
|
||||
- Репутація від спільноти
|
||||
- Без фінансових термінів
|
||||
|
||||
## Acceptance Criteria
|
||||
|
||||
* Agent Console відкривається при кліку на картку
|
||||
* Всі 5 вкладок працюють
|
||||
* Чат інтегрований з Agent Runtime Core
|
||||
* Файли показуються (stub дані OK)
|
||||
* Памʼять інтегрована з Memory System
|
||||
* Присутність показує реальні дані
|
||||
* Еволюція показує лог (stub OK)
|
||||
- Agent Console відкривається при кліку на картку
|
||||
- Всі 5 вкладок працюють
|
||||
- Чат інтегрований з Agent Runtime Core
|
||||
- Файли показуються (stub дані OK)
|
||||
- Памʼять інтегрована з Memory System
|
||||
- Присутність показує реальні дані
|
||||
- Еволюція показує лог (stub OK)
|
||||
|
||||
## Приклад промта для Cursor
|
||||
|
||||
```
|
||||
```text
|
||||
Implement Agent Console UI using:
|
||||
|
||||
- 23_agent_cards_and_console.md
|
||||
@@ -157,7 +157,7 @@ Deliverables:
|
||||
6) Evolution tab: log display (stub data OK).
|
||||
|
||||
Output: list of files + diff + summary.
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
@@ -171,23 +171,23 @@ Output: list of files + diff + summary.
|
||||
|
||||
### 1. Вік агента
|
||||
|
||||
* Розрахунок: `created_at` до поточної дати
|
||||
* Формат: "3 тижні", "6 місяців", "1 рік 2 місяці"
|
||||
* API: `GET /agents/{id}/metrics` → `{ age: { weeks, months, years } }`
|
||||
- Розрахунок: `created_at` до поточної дати
|
||||
- Формат: "3 тижні", "6 місяців", "1 рік 2 місяці"
|
||||
- API: `GET /agents/{id}/metrics` → `{ age: { weeks, months, years } }`
|
||||
|
||||
### 2. Досвід 1T
|
||||
|
||||
* Лічильник: велике число з розділювачами (12 340 1T)
|
||||
* Tooltip: "1T — це внутрішня одиниця обчислень і досвіду агента"
|
||||
* API: `GET /agents/{id}/metrics` → `{ experience1T: number }`
|
||||
* Візуалізація: великий текст з іконкою
|
||||
- Лічильник: велике число з розділювачами (12 340 1T)
|
||||
- Tooltip: "1T — це внутрішня одиниця обчислень і досвіду агента"
|
||||
- API: `GET /agents/{id}/metrics` → `{ experience1T: number }`
|
||||
- Візуалізація: великий текст з іконкою
|
||||
|
||||
### 3. Репутація спільноти
|
||||
|
||||
* Шкала: 0-100 або 0-5 зірок
|
||||
* Розрахунок: на основі фідбеку від учасників
|
||||
* API: `GET /agents/{id}/metrics` → `{ reputation: { score, type } }`
|
||||
* Візуалізація: прогрес-бар або зірки
|
||||
- Шкала: 0-100 або 0-5 зірок
|
||||
- Розрахунок: на основі фідбеку від учасників
|
||||
- API: `GET /agents/{id}/metrics` → `{ reputation: { score, type } }`
|
||||
- Візуалізація: прогрес-бар або зірки
|
||||
|
||||
### 4. Компонент AgentMetrics
|
||||
|
||||
@@ -200,18 +200,18 @@ interface AgentMetricsProps {
|
||||
export function AgentMetrics({ agentId, compact }: AgentMetricsProps) {
|
||||
// Відображення метрик
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
## Acceptance Criteria
|
||||
|
||||
* Вік агента розраховується правильно
|
||||
* 1T показується з tooltip
|
||||
* Репутація відображається візуально
|
||||
* Метрики оновлюються при зміні даних
|
||||
- Вік агента розраховується правильно
|
||||
- 1T показується з tooltip
|
||||
- Репутація відображається візуально
|
||||
- Метрики оновлюються при зміні даних
|
||||
|
||||
## Приклад промта для Cursor
|
||||
|
||||
```
|
||||
```text
|
||||
Implement Agent Experience Metrics using:
|
||||
|
||||
- 23_agent_cards_and_console.md
|
||||
@@ -227,7 +227,7 @@ Deliverables:
|
||||
5) API integration: GET /agents/{id}/metrics.
|
||||
|
||||
Output: list of files + diff + summary.
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
@@ -241,40 +241,40 @@ Output: list of files + diff + summary.
|
||||
|
||||
### 1. На картці агента
|
||||
|
||||
* Бейджі: "Публічні простори: 2", "Конфіденційні: 1"
|
||||
* При кліку — модалка зі списком просторів
|
||||
* Перемикачі для кожного простору
|
||||
- Бейджі: "Публічні простори: 2", "Конфіденційні: 1"
|
||||
- При кліку — модалка зі списком просторів
|
||||
- Перемикачі для кожного простору
|
||||
|
||||
### 2. У Agent Console (вкладка "Присутність")
|
||||
|
||||
* Таблиця просторів:
|
||||
* Простір / Тип / Доступ / Статус / Дії
|
||||
* Перемикач "Підключено/Відʼєднано"
|
||||
* Кнопка "Додати до нового простору"
|
||||
- Таблиця просторів:
|
||||
- Простір / Тип / Доступ / Статус / Дії
|
||||
- Перемикач "Підключено/Відʼєднано"
|
||||
- Кнопка "Додати до нового простору"
|
||||
|
||||
### 3. API
|
||||
|
||||
* `GET /agents/{id}/presence` → список просторів
|
||||
* `POST /agents/{id}/presence/connect` → підключити
|
||||
* `POST /agents/{id}/presence/disconnect` → відключити
|
||||
- `GET /agents/{id}/presence` → список просторів
|
||||
- `POST /agents/{id}/presence/connect` → підключити
|
||||
- `POST /agents/{id}/presence/disconnect` → відключити
|
||||
|
||||
### 4. UX
|
||||
|
||||
* При відключенні: підтвердження
|
||||
* При підключенні: вибір прав доступу
|
||||
* Оновлення UI після зміни
|
||||
- При відключенні: підтвердження
|
||||
- При підключенні: вибір прав доступу
|
||||
- Оновлення UI після зміни
|
||||
|
||||
## Acceptance Criteria
|
||||
|
||||
* Бейджі на картці показують кількість просторів
|
||||
* Модалка зі списком просторів працює
|
||||
* Перемикачі в консолі працюють
|
||||
* API виклики зберігають зміни
|
||||
* UI оновлюється після змін
|
||||
- Бейджі на картці показують кількість просторів
|
||||
- Модалка зі списком просторів працює
|
||||
- Перемикачі в консолі працюють
|
||||
- API виклики зберігають зміни
|
||||
- UI оновлюється після змін
|
||||
|
||||
## Приклад промта для Cursor
|
||||
|
||||
```
|
||||
```text
|
||||
Implement Agent Connections Management using:
|
||||
|
||||
- 23_agent_cards_and_console.md
|
||||
@@ -291,7 +291,7 @@ Deliverables:
|
||||
5) UI updates after connection changes.
|
||||
|
||||
Output: list of files + diff + summary.
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
@@ -337,13 +337,12 @@ Output: list of files + diff + summary.
|
||||
|
||||
## Зберігання даних
|
||||
|
||||
* Всі файли/документи зберігаються в сховищі microDAO
|
||||
* Показувати індикатор: "Документи зберігаються в просторі вашої microDAO"
|
||||
* DAGI використовується як "мозок", але не як сховище
|
||||
- Всі файли/документи зберігаються в сховищі microDAO
|
||||
- Показувати індикатор: "Документи зберігаються в просторі вашої microDAO"
|
||||
- DAGI використовується як "мозок", але не як сховище
|
||||
|
||||
---
|
||||
|
||||
**Готово.**
|
||||
Це **структурований список задач для Agent Cards та Console**, готовий до використання в Cursor.
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# 25 — Deployment & Infrastructure (MicroDAO)
|
||||
|
||||
*Deployment процес, середовища, інфраструктура, CI/CD, моніторинг*
|
||||
Deployment процес, середовища, інфраструктура, CI/CD, моніторинг.
|
||||
|
||||
---
|
||||
|
||||
@@ -87,7 +87,10 @@
|
||||
### 3.1 Database Layer
|
||||
|
||||
- **Postgres** (Supabase / керований Postgres):
|
||||
- основні таблиці: `users`, `teams`, `channels`, `messages`, `projects`, `tasks`, `agents`, `wallets`, `staking_ringk`, `payouts`, `rwa_inventory`, `embassy_*`, `access_keys`, `capabilities`, `bundles`, `audit_log`, `outbox_events`.
|
||||
- основні таблиці: `users`, `teams`, `channels`, `messages`, `projects`,
|
||||
`tasks`, `agents`, `wallets`, `staking_ringk`, `payouts`, `rwa_inventory`,
|
||||
`embassy_*`, `access_keys`, `capabilities`, `bundles`, `audit_log`,
|
||||
`outbox_events`.
|
||||
- схема й міграції описані в `27_database_schema_migrations.md`.
|
||||
|
||||
Рекомендації:
|
||||
@@ -476,5 +479,3 @@ Output:
|
||||
|
||||
**Версія:** 1.0
|
||||
**Останнє оновлення:** 2024-11-14
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# 26 — Security Audit Checklist (MicroDAO)
|
||||
|
||||
*Безпека інфраструктури, сервісів, вебклієнта, агентів, Embassy, access keys, токенів та даних*
|
||||
Безпека інфраструктури, сервісів, вебклієнта, агентів, Embassy, access keys, токенів та даних.
|
||||
|
||||
Це документ для регулярного безпекового аудитування платформи **DAARION.city / microDAO / Embassy / Agent Mesh / Wallet / RWA**.
|
||||
|
||||
@@ -448,5 +448,3 @@ Output:
|
||||
|
||||
**Версія:** 1.0 (для MVP → RC → PROD)
|
||||
**Останнє оновлення:** 2024-11-14
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# 27 — Database Schema & Migrations (MicroDAO)
|
||||
|
||||
*Повна виробнича специфікація*
|
||||
Повна виробнича специфікація.
|
||||
|
||||
---
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
## 2. High-level Structure of the Database
|
||||
|
||||
### Домени:
|
||||
### Домени
|
||||
|
||||
1. Auth / Users
|
||||
2. Teams (microDAO ядра)
|
||||
@@ -42,7 +42,7 @@
|
||||
|
||||
## 3. Naming Conventions
|
||||
|
||||
### Префікси ID:
|
||||
### Префікси ID
|
||||
|
||||
- `u_` — user
|
||||
- `t_` — team
|
||||
@@ -64,7 +64,7 @@
|
||||
|
||||
### Таблиці у snake_case
|
||||
|
||||
### Версії міграцій:
|
||||
### Версії міграцій
|
||||
|
||||
`000001_init.sql`, `000002_users_teams.sql`, `000003_rbac.sql` …
|
||||
|
||||
@@ -492,5 +492,3 @@ Output:
|
||||
|
||||
**Версія:** 1.0
|
||||
**Останнє оновлення:** 2024-11-14
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# 28 — Flows: Wallet, Embassy, Energy Union (MicroDAO)
|
||||
|
||||
*Sequence-діаграми основних критичних потоків: авторизація, Wallet, Embassy, Energy Union, NATS Outbox*
|
||||
Sequence-діаграми основних критичних потоків: авторизація, Wallet, Embassy, Energy Union, NATS Outbox.
|
||||
|
||||
Це документ візуалізацій — «центральна нервова система» проєкту.
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
|
||||
## 2. Legend
|
||||
|
||||
```
|
||||
```text
|
||||
U – User (browser/app)
|
||||
A – Agent (private agent)
|
||||
API – API Gateway (PEP)
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
# 29 — Scaling & High Availability (MicroDAO)
|
||||
|
||||
*Масштабування, відмовостійкість, балансування навантаження, кластеризація сервісів DAARION.city / microDAO / Embassy / Wallet / Agents / Event Bus*
|
||||
Масштабування, відмовостійкість, балансування навантаження, кластеризація
|
||||
сервісів DAARION.city / microDAO / Embassy / Wallet / Agents / Event Bus.
|
||||
|
||||
Це документ виробничого класу, який потрібний для:
|
||||
|
||||
@@ -42,7 +43,7 @@
|
||||
|
||||
## 2. High-level Architecture Overview
|
||||
|
||||
```
|
||||
```text
|
||||
┌─────────────────────────┐
|
||||
│ Load Balancer │
|
||||
└──────────┬──────────────┘
|
||||
@@ -181,7 +182,7 @@ Agent Runtime Pool:
|
||||
|
||||
Структура тем:
|
||||
|
||||
```
|
||||
```text
|
||||
chat.*
|
||||
project.*
|
||||
task.*
|
||||
@@ -440,5 +441,3 @@ Output:
|
||||
|
||||
**Версія:** 1.0
|
||||
**Останнє оновлення:** 2024-11-14
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# 30 — Cost Optimization & Token Economics Infrastructure (MicroDAO)
|
||||
|
||||
*Оптимізація витрат інфраструктури та зв'язок з токеномікою (RINGK, 1T, KWT, DAAR/DAARION)*
|
||||
Оптимізація витрат інфраструктури та зв'язок з токеномікою (RINGK, 1T, KWT, DAAR/DAARION).
|
||||
|
||||
---
|
||||
|
||||
@@ -397,5 +397,3 @@ Output:
|
||||
|
||||
**Версія:** 1.0
|
||||
**Останнє оновлення:** 2024-11-14
|
||||
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user