-
Notifications
You must be signed in to change notification settings - Fork 7
Mobile App
Нативное Android-приложение для чата с ИИ-ассистентом. Подключается к серверу ai-sekretar24.ru, предоставляет ролевой UX: админы получают полный контроль, обычные пользователи — предварительно настроенный опыт.
| Параметр | Значение |
|---|---|
| versionName | 2.2 |
| versionCode | 25 |
| Дата релиза | 2026-05-03 |
| GitHub Release | mobile-v2.2 |
📲 Скачать ai-secretary-2.2.apk
Версии 2.0/2.1 устарели — push-уведомления на них не показывались в трее из-за бага с Android notification channel. Обновитесь до 2.2 чтобы новости о релизах и сообщения от системы реально приходили.
-
Fix: пуш-уведомления теперь реально доходят до пользователя. На v2.0/v2.1 сервер слал FCM-сообщение, Firebase его принимал (всё «200 OK» в логах), но Android тихо отбрасывал — потому что приложение не создавало канал уведомлений с id
default, а сервер отправлялchannel_id="default". На Android 8+ это означает мгновенный drop без следов. - В
usePush.tsтеперьPushNotifications.createChannel({id: "default", importance: 5, sound, lights, vibration})вызывается передregister(), после grant permission. Канал создаётся явно, с приоритетом HIGH (heads-up). - В
AndroidManifest.xmlдобавлен fallback meta-datacom.google.firebase.messaging.default_notification_channel_id="default"— если сервер пришлёт payload безchannel_id, Firebase SDK не свалится на низкоприоритетный «Miscellaneous». - После установки система спросит permission на уведомления (Android 13+) — обязательно разреши, без этого push'ей не будет.
-
Панель «Аккаунт» в списке чатов — кнопка-шестерёнка в шапке
ChatListView(а также в welcome-экране для не-админов и в footer-кнопке) теперь открывает ту же account-панель, что в чате, прямо поверх списка. Не нужно уходить на отдельный/settingsэкран. - Тот же resize-механизм, что в
ChatView: portrait — bottom sheet с ручкой, landscape — правая панель. - В меню чата убрана дублирующаяся кнопка-шестерёнка — она вела на
/settings, перекрывалась с уже работающей account-панелью рядом. - Иконка кнопки «Аккаунт» в шапке чата стала шестерёнкой (раньше человечек) — для визуальной согласованности с кнопкой-шестерёнкой в списке.
- В шапке чата справа от кнопки настроек сессии появилась кнопка-«человечек» — тап открывает пятую panel с настройками аккаунта, не покидая чата.
- В панели «Аккаунт» — никнейм (display_name), смена пароля, Google (Drive/Docs/Sheets/Gmail) с подключением через
_systemбраузер и отключением, и выход из аккаунта. - Тот же resize-механизм, что у других четырёх панелей: portrait — сверху во всю ширину, landscape — справа во всю высоту, размер тянется пальцем (100–90% экрана).
- Профиль и google-статус подгружаются автоматически при каждом открытии панели — не нужно нажимать «обновить».
- Chevron-↓ справа от названия чата → открывает resizable-панель ассистентов
- Кнопка «Создать нового ассистента» в той же панели
- В портрете — сверху во всю ширину, в ландшафте — справа во всю высоту
- Кнопка «+» (новая ветка) слева от названия ассистента
- LoginView показывает реальную причину ошибки логина
Установка через APK поверх 1.9 проходит без ручного удаления; при INSTALL_FAILED_UPDATE_INCOMPATIBLE — adb uninstall com.shaerware.aisecretary.

Мобильное приложение — это отдельный 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 и др.), прикрепление к контексту |
| Промпт | Несколько именованных промптов («ролей») с переключением: чипы сверху + текстовое поле, кнопка + создаёт новый, активный промпт меняет поведение ассистента без потери истории. Доступно всем пользователям, включая не-админов с write-share на чат. |
- В портретном режиме панели появляются внизу (горизонтальный ресайз)
- В ландшафтном — сбоку (вертикальный ресайз)
Под полем ввода — два индикатора потребления:
- Контекст (полоска с градиентом): сколько токенов в текущем диалоге занято от лимита окна модели. Зелёный → жёлтый → красный по мере приближения к лимиту.
-
Период Claude (тонкая оранжево-красная полоска снизу): общее число токенов которое юзер потратил за текущий период тарифа Anthropic (с 30-го по 30-е числа). Чисто информативно, без лимитов и блокировок. Источник:
GET /admin/usage/me.
- Автоматически растягивающийся textarea (макс. 120px)
- Enter = отправить, Shift+Enter = перенос строки
- Вставка кода — определяется автоматически, показывается как chip с языком и количеством строк
- Кнопка Stop при стриминге
Кнопка-скрепка расположена между полем ввода и кнопкой отправки (как в веб-версии).
| Формат | Обработка |
|---|---|
| Изображения (JPEG, PNG, WebP, GIF) | OCR (pytesseract, ru+en) |
| Извлечение текста (pdfplumber, до 50 стр.) | |
| Excel (.xlsx, .xls) | Извлечение данных (openpyxl, до 10 листов × 500 строк) |
| Word (.docx, .doc) | Извлечение текста (python-docx) |
| Текстовые (.txt, .csv, .md, .json, .xml, .html, .log, .yaml, .yml) | Чтение как UTF-8 |
- Максимальный размер файла: 10 МБ
- Несколько файлов одновременно
- Прикреплённые файлы отображаются как chips с именем и миниатюрой
- При отправке сообщения бэкенд подставляет извлечённый текст в контекст LLM
- Используется тот же endpoint что и в веб-версии:
POST /admin/chat/sessions/{id}/upload-image
- Имя пользователя и роль (read-only)
- Кнопка выхода
- Информация о версии
Администратор создаёт и настраивает экземпляры мобильного приложения через страницу 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
ChatInput (📎) → выбор файлов → chatApi.uploadImage(sessionId, file)
→ POST /admin/chat/sessions/{id}/upload-image (FormData)
→ Бэкенд: сохранение + извлечение текста (OCR/PDF/Word/Excel)
→ Ответ: {image: {id, url, ocr_text, original_name, ...}}
→ Отображение chip-а с именем файла
→ sendMessage(content) → streamMessage({content, image_ids: [...]})
→ Бэкенд: текст файлов инжектится в контекст LLM
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