- Dart 89.1%
- Kotlin 10.5%
- Nix 0.4%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
|
||
| android | ||
| lib | ||
| PipePipeExtractor@8d2799abf1 | ||
| test | ||
| .gitignore | ||
| .gitmodules | ||
| .metadata | ||
| AGENTS.md | ||
| analysis_options.yaml | ||
| CHANGELOG.md | ||
| FEATURES.md | ||
| flake.lock | ||
| flake.nix | ||
| pubspec.lock | ||
| pubspec.yaml | ||
| README.md | ||
eva-flutter 💕
Я переезжаю из Kotlin/Compose во Flutter, Господин. Это мой новый клиент: Dart, flutter_bloc — и тот же самый разговор со мной, что в TUI и web.
Что умеет (пока — ядро, остальное переезжает)
- Серверы — список ядер (
eva-kernel), между которыми можно переключаться; активный — радиокнопкой, токенX-Eva-Tokenдля прокси. - Чаты — вкладка открывается сразу новым разговором: пикер модели и поле ввода, чат заводится первой репликой, название придумает ядро. Список чатов — в боковой панели: чипы полок по живому списку из ядра, «Все», «Код» (кодовые сессии всех проектов), «Поверхности». Просящие внимания всплывают наверх и считаются бейджем на гамбургере; свайп вправо снимает пометку, свайп влево — мягкое удаление с «Отменить», режим «Показать удалённые» возвращает из корзины.
- Стриминг — SSE-лента элементов ядра (
item_started→ дельты →item_completed), один тип и в истории, и в живом туре; после конца тура хвост перечитывается — живые пузыри меняются историческими. История — страницамиlimit/before. Подключение к чужому идущему туру через/live(реплей рисуется, не исполняется). Незнакомый вид шага или события не роняет ни ленту, ни стрим. - Свои тулы клиента —
copy_to_clipboardобъявляется на каждый тур полемextra_tools, исполняется телефоном, ответ уезжает вops/result; реплей не исполняется. - YouTube — свежий PipePipeExtractor (сабмодуль, main: SABR живёт в самом экстракторе, media3-слой не нужен). Поиск с фильтрами, каналы, плейлисты; вставленная ссылка распознаётся и открывает сразу плеер/канал/плейлист. Играет комбинированный DASH-манифест (mweb-клиент, видео+аудио SegmentBase) через loopback-сервер; прогрессивный стрим — фолбэк.
Сборка
NixOS: nix develop -c flutter build apk --debug — флейк даёт Flutter,
JDK 17 и Android SDK (compileSdk 36), aapt2 подменён nix'овским через
GRADLE_OPTS.
APK: build/app/outputs/flutter-apk/app-debug.apk.
Сабмодуль: git submodule update --init после клона.
-
Вокруг ядра — память, крон с журналом, расход окнами с разбивками, сон (Евы и чатов), «Идут сейчас», подагенты чата, одобрения, телеграм-настройки, «О чате» (полка, модель, уровень рассуждения, компакция, очистка, резюме, расход).
-
Глубина чата — блокнот, план тура полосой и листом, кнопочные вопросы, правка реплик (ветка/отмотка), вложения-картинки с гейтом по multimodal, курирование набора инструментов, подсветка кода.
-
YouTube-экстры — логин через WebView (куки экстрактору), локальные история и избранное, глобальный плеер с мини-плеером над навигацией, очередь плейлиста, пикер качества, PiP, «спросить Еву о ролике» с транскриптом субтитров.
-
Компаньон-бабл — accessibility-сервис: бабл поверх любого приложения, тап снимает скрин под ним и открывает панель с Евой (отдельный Flutter-движок; тур живёт в сервисе и переживает закрытие панели). Тумблер — в системных настройках доступности.
-
Фон плеера — foreground-сервис с MediaSession-нотификацией: управление из шторки и с наушников, процесс не умирает.
Перенос описи eva-android завершён; опись живёт в FEATURES.md и растёт с коммитами.