-
Notifications
You must be signed in to change notification settings - Fork 5
Mobile App
shaerware edited this page Mar 20, 2026
·
1 revision
Нативное Android-приложение для чата с ИИ-ассистентом. Подключается к серверу ai-sekretar24.ru, предоставляет ролевой UX: админы получают полный контроль, обычные пользователи — предварительно настроенный опыт.

Мобильное приложение — это отдельный Android-клиент (Vue 3 + Capacitor), не PWA-обёртка админ-панели:
-
Hardcoded сервер —
https://ai-sekretar24.ru, без настройки URL - JWT-аутентификация — токен хранится в Capacitor Preferences (не localStorage)
- Ролевой интерфейс — админ видит все чаты и контролы, обычный пользователь — только расшаренные чаты
- Mobile Instances — админ создаёт предварительно настроенные экземпляры (LLM, голос, промпт, RAG), назначает пользователям через ResourceShare
- Стриминг — SSE-потоковая генерация ответов
- TTS — озвучка сообщений для всех ролей
- Тема — Night-eyes (тёплый коричневый/янтарный/золотой), без переключения
- Поля: имя пользователя + пароль
- Нет настройки URL сервера
- При входе автоматически загружается конфиг назначенного Mobile Instance (
GET /admin/mobile/my-config) - При успехе — редирект на
/chats
Для админа:
| Элемент | Описание |
|---|---|
| Список сессий | Карточки: название, последнее сообщение, количество, дата |
| FAB (Floating Action Button) | Создание нового чата |
| Удаление | Кнопка удаления на каждой карточке (с подтверждением) |
| Настройки | Кнопка перехода в Settings |
Для обычного пользователя:
| Элемент | Описание |
|---|---|
| Приветствие | Центрированное «Привет, {username}» в стиле Claude |
| Поле ввода | Отправка первого сообщения сразу с экрана |
| Расшаренные чаты | Карточки только расшаренных сессий (is_shared_with_me) |
| Авто-маршрутизация | 1) Дефолтная мобильная сессия → 2) Первый расшаренный чат → 3) Создание нового |
Основной экран стриминговой беседы с ИИ-ассистентом.
| Кнопка | Доступ | Описание |
|---|---|---|
| Назад | Админ | Возврат к списку чатов |
| LLM-провайдер | Админ | Выпадающий список: Default / vLLM (Local) / ☁️ Cloud providers |
| RAG-коллекции | Админ | Мультиселект коллекций базы знаний |
| Экспорт | Админ | Копировать / Скачать .md / Скачать .json |
| Новая ветка | Все | Создание новой ветки разговора |
| Настройки чата | Все | Панель с контекстными файлами и системным промптом |
| Ветки | Все | Дерево веток разговора |
| Действие | Админ | Обычный |
|---|---|---|
| TTS (озвучка) | ✓ | ✓ |
| Копировать | ✓ | ✓ |
| Редактировать | ✓ | — |
| Регенерировать (user msg) | ✓ | — |
| Сохранить в контекст (assistant msg) | ✓ | — |
| Суммаризация ветки | ✓ | — |
| Удалить от этого сообщения | ✓ | — |
| Панель | Описание |
|---|---|
| Ветки | Дерево сообщений с навигацией, переключение между ветками |
| Контекстные файлы | Загрузка файлов (.txt, .md, .json, .csv, .py, .js, .ts и др.), прикрепление к контексту |
| Промпт | Текстовое поле для кастомного системного промпта |
- В портретном режиме панели появляются внизу (горизонтальный ресайз)
- В ландшафтном — сбоку (вертикальный ресайз)
- Автоматически растягивающийся textarea (макс. 120px)
- Enter = отправить, Shift+Enter = перенос строки
- Вставка кода — определяется автоматически, показывается как chip с языком и количеством строк
- Кнопка Stop при стриминге
- Имя пользователя и роль (read-only)
- Кнопка выхода
- Информация о версии (v1.0.0)
Администратор создаёт и настраивает экземпляры мобильного приложения через страницу Mobile App в админ-панели (MobileAppView).
| Элемент | Описание |
|---|---|
| Индикатор | Зелёный = включён, серый = отключён |
| Название | Имя инстанса |
| Описание | Краткое описание |
| Шаринг | Иконка Users + количество назначенных пользователей |
| Параметр | Описание | По умолчанию |
|---|---|---|
| Название* | Имя инстанса | — |
| Описание | Описание | — |
| LLM Backend | Выпадающий список: Local vLLM / ☁️ Cloud providers | vllm |
| Персона | Имя персоны (anna, marina и др.) | anna |
| Системный промпт | Кастомный промпт для ассистента | — |
| TTS Engine | Движок синтеза речи (xtts, piper, openvoice) | xtts |
| TTS Voice | Голос для озвучки | anna |
| RAG Mode | Режим RAG: all / selected / off | all |
| Коллекции знаний | Мультиселект коллекций (при mode=selected) | — |
| Rate Limit | Ограничение запросов (кол-во / часов) | Без ограничений |
| Вкладка | Содержимое |
|---|---|
| Settings | ID, название, описание, TTS, rate limit |
| AI | LLM backend, персона, системный промпт |
| RAG | Режим RAG, список коллекций (бейджи) |
Кнопка "Поделиться" открывает диалог ResourceShareDialog:
- Выбор пользователя из списка
- Уровень доступа:
view(только чтение) илиedit(редактирование) - Назначенный пользователь видит инстанс через
GET /admin/mobile/my-config - Один пользователь может быть назначен только одному инстансу
LoginView → POST /admin/auth/login → JWT
→ Capacitor Preferences.set("token", jwt)
→ Decode JWT → {user_id, role, workspace_id}
→ GET /admin/mobile/my-config → MobileInstanceConfig
→ router.push("/chats")
ChatInput → sendMessage(content)
→ overrides: {llm_backend: "cloud:123", rag_mode: "selected", knowledge_collection_ids: [1,2]}
→ POST /admin/chat/sessions/{id}/stream (SSE)
body: {content, mobile_instance_id, ...overrides}
→ SSE chunks: "chunk" → streamingContent accumulates
→ SSE "assistant_message" → commit to messages array
Admin: POST /admin/mobile/instances → создание инстанса
Admin: POST /admin/mobile/instances/{id}/shares → {user_id, permission: "edit"}
User: GET /admin/mobile/my-config → {id, name, llm_backend, system_prompt, ...}
User: Defaults applied to all new chat sessions (source="mobile", source_id=instanceId)
| Метод | Путь | Описание | Доступ |
|---|---|---|---|
GET |
/admin/mobile/instances |
Список инстансов | channels:view |
POST |
/admin/mobile/instances |
Создание инстанса | channels:edit |
GET |
/admin/mobile/instances/{id} |
Получить инстанс | channels:view |
PUT |
/admin/mobile/instances/{id} |
Обновить инстанс | channels:edit |
DELETE |
/admin/mobile/instances/{id} |
Удалить инстанс (каскадно удаляет shares) | channels:edit |
| Метод | Путь | Описание | Доступ |
|---|---|---|---|
GET |
/admin/mobile/my-config |
Конфиг назначенного инстанса для текущего юзера | chat:view |
| Метод | Путь | Описание | Доступ |
|---|---|---|---|
GET |
/admin/mobile/instances/{id}/shares |
Список назначений | channels:view |
POST |
/admin/mobile/instances/{id}/shares |
Назначить пользователя | channels:edit |
PUT |
/admin/mobile/instances/{id}/shares/{user_id} |
Изменить уровень доступа | channels:edit |
DELETE |
/admin/mobile/instances/{id}/shares/{user_id} |
Снять назначение | channels:edit |
| Компонент | Технология |
|---|---|
| Framework | Vue 3 + Composition API + TypeScript |
| Build | Vite 7 |
| Native | Capacitor 8 (Android) |
| CSS | TailwindCSS 4 |
| State | Pinia |
| Router | Vue Router (hash history) |
| Markdown | marked + DOMPurify |
cd mobile && npm install # Установка зависимостей
cd mobile && npm run build # Сборка (vue-tsc + vite)
cd mobile && npx cap sync android # Синхронизация с Android-проектом
cd mobile && npx cap open android # Открыть в Android Studio → Build APKApp ID: com.shaerware.aisecretary
Размер: ~77KB gzipped (vs ~2MB админ-панель)
| Характеристика | Админ-панель | Мобильное приложение |
|---|---|---|
| Платформа | PWA (браузер) | Нативный Android (Capacitor) |
| URL сервера | Настраивается | Hardcoded (ai-sekretar24.ru) |
| Хранение JWT | localStorage | Capacitor Preferences |
| Функции | Полное управление системой | Только чат |
| Демо-режим | Есть (VITE_DEMO_MODE) | Нет |
| Темы | Светлая/тёмная | Только Night-eyes |
| i18n | ru/en/kk | Только ru |
| Размер | ~2MB gzipped | ~77KB gzipped |
См. также: Chat, Chat-Sharing, RBAC, Cloud-LLM-Providers, Wiki-RAG