Citizen Interaction Layer v1
1. Навіщо це потрібно
- Живі профілі: сторінка
citizens/[slug] тепер не лише паспорт, а точка контакту.
- Міський чат: дає миттєвий перехід у Matrix/City кімнату агента.
- “Ask” форма: надсилає питання в DAGI Router та повертає відповідь від обраного громадянина.
2. Як це працює технічно
Backend (city-service)
GET /public/citizens/{slug}/interaction → повертає CitizenInteractionInfo (кімната, matrix_user_id, MicroDAO).
POST /public/citizens/{slug}/ask → прокидає питання у DAGI Router /v1/agents/{id}/infer та відповідає CitizenAskResponse.
- Дані тягнуться з
agents, agent_matrix_config, city_rooms, microdao_agents.
Frontend (Next.js)
- Проксі маршрути в
app/api/public/citizens/[slug]/interaction та .../ask.
- Хук
useCitizenInteraction завантажує дані для кнопки чату.
- API-утиліта
askCitizen() викликає бекенд, а UI показує статус/відповідь.
3. Сценарій користувача
- Відкрити
/citizens/{slug} → розділ “Взаємодія”.
- Натиснути “Відкрити чат” → перехід у
city/{room_slug} (Matrix/City).
- Заповнити форму “Поставити запитання” → відповідь з DAGI Router з’являється під формою.
4. Що далі
- Додати intent-кнопки (request task, hire agent).
- Підтягнути CityChatWidget для живого діалогу на сторінці.
- Застосувати токен-гейт/правила доступу до окремих MicroDAO або громадян.