Skip to content

Mobile App

shaerware edited this page Mar 20, 2026 · 1 revision

Mobile App (Мобильное приложение)

Нативное Android-приложение для чата с ИИ-ассистентом. Подключается к серверу ai-sekretar24.ru, предоставляет ролевой UX: админы получают полный контроль, обычные пользователи — предварительно настроенный опыт.

Скриншот

Mobile App

Концепция

Мобильное приложение — это отдельный Android-клиент (Vue 3 + Capacitor), не PWA-обёртка админ-панели:

  • Hardcoded серверhttps://ai-sekretar24.ru, без настройки URL
  • JWT-аутентификация — токен хранится в Capacitor Preferences (не localStorage)
  • Ролевой интерфейс — админ видит все чаты и контролы, обычный пользователь — только расшаренные чаты
  • Mobile Instances — админ создаёт предварительно настроенные экземпляры (LLM, голос, промпт, RAG), назначает пользователям через ResourceShare
  • Стриминг — SSE-потоковая генерация ответов
  • TTS — озвучка сообщений для всех ролей
  • Тема — Night-eyes (тёплый коричневый/янтарный/золотой), без переключения

Экраны приложения

Login (Вход)

  • Поля: имя пользователя + пароль
  • Нет настройки URL сервера
  • При входе автоматически загружается конфиг назначенного Mobile Instance (GET /admin/mobile/my-config)
  • При успехе — редирект на /chats

Chat List (Список чатов)

Для админа:

Элемент Описание
Список сессий Карточки: название, последнее сообщение, количество, дата
FAB (Floating Action Button) Создание нового чата
Удаление Кнопка удаления на каждой карточке (с подтверждением)
Настройки Кнопка перехода в Settings

Для обычного пользователя:

Элемент Описание
Приветствие Центрированное «Привет, {username}» в стиле Claude
Поле ввода Отправка первого сообщения сразу с экрана
Расшаренные чаты Карточки только расшаренных сессий (is_shared_with_me)
Авто-маршрутизация 1) Дефолтная мобильная сессия → 2) Первый расшаренный чат → 3) Создание нового

Chat (Чат)

Основной экран стриминговой беседы с ИИ-ассистентом.

Тулбар

Кнопка Доступ Описание
Назад Админ Возврат к списку чатов
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 при стриминге

Settings (Настройки)

  • Имя пользователя и роль (read-only)
  • Кнопка выхода
  • Информация о версии (v1.0.0)

Mobile Instances (Управление в админ-панели)

Администратор создаёт и настраивает экземпляры мобильного приложения через страницу 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, список коллекций (бейджи)

Назначение пользователей (ResourceShare)

Кнопка "Поделиться" открывает диалог 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")

Отправка сообщения (админ с LLM-оверрайдом)

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)

API (Mobile Module)

Инстансы

Метод Путь Описание Доступ
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

Шаринг (ResourceShare)

Метод Путь Описание Доступ
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 APK

App 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

Clone this wiki locally