docs: expand lint scope batch50 (2 files)
This commit is contained in:
@@ -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.
|
||||
|
||||
|
||||
|
||||
@@ -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 забезпечує контрольований автоматизм без ризиків.
|
||||
|
||||
Reference in New Issue
Block a user