Files
microdao-daarion/docs/cursor/08_agent_first_onboarding.md
2026-02-16 07:43:55 -08:00

474 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 08 — Agent-First Onboarding Specification (MicroDAO)
Цей документ описує нову модель онбордингу MicroDAO:
**користувач входить у чат з агентом-провідником, який крок за кроком створює спільноту, канал і налаштовує агента.**
Весь процес — діалоговий.
Усі API-виклики — ті самі, що в 03_api_core_snapshot.md.
---
## 1. Мета
Замінити класичні форми/кроки онбордингу повністю **агентським інтерфейсом**.
Увесь onboarding виконується через `AgentOnboardingChat`, який:
- говорить з користувачем живою мовою,
- ставить запитання,
- парсить відповіді,
- викликає API,
- підтверджує успішні кроки,
- веде користувача до створення першої microDAO,
- налаштовує приватного агента,
- завершує онбординг фразою та редіректом.
---
## 2. Загальна архітектура
Усі дії будуються на:
- **state-machine** (опис нижче),
- **Chat UI** (аналог звичайного чату),
- **репліках агента** (скрипт),
- **розпізнаванні наміру користувача** (regex / LLM / кнопки),
- **викликах API** (з 03_api_core_snapshot.md).
Компоненти:
```text
src/features/onboarding-agent/
AgentOnboardingChat.tsx
useOnboardingState.ts
scripts/
script.json
parser.ts
transitions.ts
```text
---
## 3. State Machine
```ts
type OnboardingStep =
| "greet"
| "ask_profile"
| "ask_team_name"
| "ask_team_desc"
| "ask_mode"
| "ask_channel_name"
| "ask_channel_type"
| "ask_agent_enable"
| "ask_agent_prefs"
| "ask_invites"
| "done";
```text
Перехід між кроками базується на:
- відповіді користувача,
- успішності API-виклику.
---
## 4. Повний сценарій діалогу (репліки агента)
Нижче — готовий сценарій, який можна покласти в JSON або хардкод.
## 4.1. greet
**Агент:**
> Привіт! Я — агент-провідник MicroDAO.
> Зараз ми разом створимо твою першу спільноту та особистого помічника.
> Як до тебе звертатися?
Після відповіді → `ask_profile`.
---
## 4.2. ask_profile
**Агент:**
> Приємно познайомитися, {name}.
> Якою мовою хочеш працювати — українською чи англійською?
Після відповіді — зберегти `locale` → `ask_team_name`.
---
## 4.3. ask_team_name
**Агент:**
> Як назвемо твою майбутню microDAO?
> Наприклад: "Креативна Майстерня", "AI-Команда Альфа", "Моя Спільнота".
Читаємо будь-який текст → `POST /teams` → `ask_team_desc`.
---
## 4.4. ask_team_desc
**Агент:**
> Класно. А як би ти описав спільноту одним реченням?
> (Не обов'язково, можеш написати "пропустити".)
Зберегти опис → `ask_mode`.
---
## 4.5. ask_mode
**Агент:**
> Обери режим для твоєї microDAO:
> **1)** Відкрита — є публічний канал, гості можуть читати.
> **2)** Приватна — тільки запрошені, чати зашифровані.
> Напиши `1` або `2`.
Після відповіді:
- map → `"public"` / `"confidential"`
- `PATCH /teams/{teamId}`
→ `ask_channel_name`.
---
## 4.6. ask_channel_name
**Агент:**
> Давай створимо перший канал.
> Як би ти хотів його назвати? (`general`, `core`, `support`)
Після відповіді → `ask_channel_type`.
---
## 4.7. ask_channel_type
**Агент:**
> Це буде публічний канал чи приватна кімната?
> Напиши: **public** або **private**.
Mapping:
- `public` → `type: "public"`
- `private` → `type: "group"`
API:
`POST /channels`
Після успіху → `ask_agent_enable`.
---
## 4.8. ask_agent_enable
**Агент:**
> У MicroDAO кожна спільнота має власного ШІ-агента, який памʼятає контекст і самонавчається.
> Хочеш одразу створити командного агента?
Очікувані відповіді: так / ні.
- Якщо «ні» → `ask_invites`
- Якщо «так» → `ask_agent_prefs`
---
## 4.9. ask_agent_prefs
**Агент:**
> Добре. Налаштуємо агента.
> Якою мовою він має відповідати?
Після відповіді →
**Агент:**
> Який у нього фокус?
> Вибери одне: **general**, **business**, **technical**, **creative**.
Після відповіді →
**Агент:**
> Що він має памʼятати?
>
> 1. Лише цей канал
> 2. Усі канали спільноти
Після відповіді:
Викликаємо:
`POST /agents`
Потім → `ask_invites`.
---
## 4.10. ask_invites
**Агент:**
> Все готово!
> Хочеш зараз запросити людей до своєї microDAO?
> Я підготую посилання, яке можна надіслати будь-кому.
Після відповіді — показати UI-елемент з інвайт-лінком.
→ `done`.
---
## 4.11. done
**Агент:**
> Вітаю!
> Твоя microDAO **{team.name}** створена.
> Я створив канал **#{channel.title}** і готовий допомагати.
> Можеш почати працювати або поставити мені питання:
> "Що ти вмієш?" / "Як користуватися каналами?" / "Як запросити команду?"
redirect → `/t/:teamId/c/:channelId`.
---
## 5. Intent Parser (як агент розуміє відповіді)
Мінімальний підхід (regex):
```ts
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:
*"Чи відповідь користувача означає Так/Ні/Інше?"*
---
## 6. Компонент `AgentOnboardingChat.tsx`
### Мінімальна структура
```tsx
export function AgentOnboardingChat() {
const { step, setStep, state, updateState } = useOnboardingState();
const handleUserMessage = async (text: string) => {
addMessage({ author: "user", text });
switch (step) {
case "greet":
updateState({ name: text });
addAgent("Приємно познайомитися, " + text + "...");
setStep("ask_profile");
break;
case "ask_profile":
updateState({ locale: detectLocale(text) });
addAgent("Як назвемо твою microDAO?");
setStep("ask_team_name");
break;
case "ask_team_name":
const team = await api.post("/teams", { name: text });
updateState({ teamId: team.id });
addAgent("А як би ти описав спільноту?");
setStep("ask_team_desc");
break;
// ... і так далі для кожного step.
}
};
return (
<ChatUI
messages={messages}
onSend={handleUserMessage}
agentAvatar="guide"
/>
);
}
```text
---
## 7. Acceptance Criteria (як перевіряти)
- `/onboarding` відкривається як чат.
- Користувач спілкується з агентом.
- На кожному кроці агент відповідає правильно.
- Усі API виклики працюють:
- `/teams`
- `/teams/{id}`
- `/channels`
- `/agents`
- Після завершення → redirect.
- UX: користувач не бачить жодної форми. Все — діалог.
---
## 8. Для Cursor
Коли ти даси йому задачу, використовуй цей формат:
```text
You are a senior React/TS engineer.
Implement the Agent-first onboarding at `/onboarding` using the specification in:
- 08_agent_first_onboarding.md
- 03_api_core_snapshot.md
- 05_coding_standards.md
Create the component `AgentOnboardingChat.tsx` and supporting files.
Output:
- list of modified files
- diff
- summary
```text
---
## 9. Інтеграція з існуючим кодом
## 9.1. Заміна класичного онбордингу
Існуючий `OnboardingPage.tsx` можна:
- залишити як fallback для користувачів, які не хочуть агентський онбординг,
- або повністю замінити на `AgentOnboardingChat`.
## 9.2. Використання API клієнтів
Використовувати існуючі API клієнти з `src/api/`:
- `teams.ts` — для створення команди
- `channels.ts` — для створення каналу
- `agents.ts` — для створення агента
- `auth.ts` — для автентифікації
## 9.3. State Management
Використовувати `useOnboardingState` hook або розширити існуючий `useOnboarding.ts` для агентського онбордингу.
---
## 10. UI/UX Вимоги
## 10.1. Chat Interface
- Повідомлення агента з аватаром
- Повідомлення користувача справа
- Індикатор набору тексту (typing indicator) під час обробки
- Кнопки швидких відповідей (опціонально)
- Плавні анімації появи повідомлень
## 10.2. Візуальні елементи
- Аватар агента (іконка або зображення)
- Індикатор прогресу онбордингу (опціонально)
- Підказки для користувача
- Обробка помилок з дружніми повідомленнями
## 10.3. Мобільна адаптація
- Адаптивний дизайн для мобільних пристроїв
- Зручний ввід тексту на мобільних
- Оптимізація для маленьких екранів
---
## 11. Обробка помилок
## 11.1. Помилки API
Якщо API виклик не вдався:
- Показати дружнє повідомлення від агента
- Запропонувати спробувати ще раз
- Зберегти стан, щоб не втратити прогрес
## 11.2. Незрозумілі відповіді
Якщо агент не розуміє відповідь:
- Задати уточнююче питання
- Показати приклади правильних відповідей
- Запропонувати кнопки з варіантами
## 11.3. Таймаути
- Обробка повільних API викликів
- Показ індикатора завантаження
- Повідомлення про затримку
---
## 12. Тестування
## 12.1. Unit Tests
- Тести для `parser.ts` (розпізнавання намірів)
- Тести для `transitions.ts` (переходи між станами)
- Тести для компонента `AgentOnboardingChat`
## 12.2. Integration Tests
- Тестування повного flow онбордингу
- Тестування API інтеграції
- Тестування обробки помилок
## 12.3. E2E Tests
- Повний сценарій онбордингу від початку до кінця
- Різні варіанти відповідей користувача
- Перевірка редіректу після завершення
---
## 13. Майбутні покращення
## 13.1. LLM Integration
- Використання LLM для розпізнавання намірів
- Більш природна мова агента
- Контекстне розуміння відповідей
## 13.2. Персоналізація
- Адаптація мови агента під користувача
- Запам'ятовування попередніх відповідей
- Рекомендації на основі профілю
## 13.3. Мультимовність
- Підтримка багатьох мов
- Автоматичне визначення мови
- Перемикання мови під час онбордингу
---
**Готово.**
Це **повна специфікація агентського онбордингу**, готова до використання в Cursor.