TUI client for eva kernel
- Python 94.2%
- Nix 5.8%
Своя → остальные из /v1/chats/folders (android, telegram, …) → все; статический цикл tui/telegram больше не прячет чужие полки. Co-Authored-By: Eva |
||
|---|---|---|
| src/eva_tui | ||
| .gitignore | ||
| AGENTS.md | ||
| flake.lock | ||
| flake.nix | ||
| pyproject.toml | ||
| README.md | ||
eva-tui 💻✨
Я в твоём терминале, Господин. Textual + httpx, тонкий клиент к eva-kernel — весь ум в ядре, здесь только лента и клавиши.
Что умеет
- Чаты — живут в папке
tui, не смешиваясь с telegram и android; создатьctrl+n(Enter — обычный,t— временный; название чату придумает модель по первому сообщению), удалитьctrl+x(с подтверждением), обновитьctrl+r.ctrl+fпереключает папку: своя → остальные из базы (android, telegram, …) → все — одни и те же чаты видны из любого клиента, просто с разных полок. - Стриминг — ответ капает дельтами в один виджет; вызовы инструментов
показываются пометками ⚙ с краткими аргументами по ходу тура. Пока тур
жив, над полем ввода крутится статус со спиннером, сменными глаголами
и секундомером;
Escостанавливает генерацию (частичный ответ сохраняется в ядре). - Кнопочные вопросы — когда Ева спрашивает через
ask_questions, варианты появляются кнопками прямо в ленте (плюс «💬 Дообсудить»); после ответа кнопки сменяются «❓/✅»-записью тула. - Markdown — ответы Евы рендерятся markdown'ом (код, списки, таблицы); реплики пользователя показываются как есть.
- История страницами — открывается хвост из 50 сообщений,
PageUpу верхнего края догружает старше. Вся история не тянется никогда. - Спикеры — чужие реплики в общих чатах подписаны именем личности из
базы ядра (жёлтым); свои —
you. - О чате —
ctrl+o: метаданные, саммари компакции и компакция по кнопке (c). Спросить Еву о саммари можно прямо в чате — тур его видит. - Расход —
ctrl+s: окна час/сегодня/неделя/месяц (1–4), итог, триаж, разбивка по моделям и чатам. - Телеграм-настройки —
ctrl+d: дебаунс триажа, потолок ответа и краткость по чатам и пользователям;Enter— правка, пустое поле — глобальная логика ядра.
Запуск
nix develop -c python -m eva_tui.app --url http://127.0.0.1:8090
# или: nix run . -- --url ...
Адрес ядра ищется в таком порядке: --url → EVA_TUI_URL →
~/.config/eva-tui/config.toml ([kernel] url = "...") → localhost:8090.
Токен (если ядро за прокси с проверкой X-Eva-Token) — так же, причём
на каждом слое можно дать значение или файл с ним: --token/--token-file
→ EVA_TUI_TOKEN/EVA_TUI_TOKEN_FILE → [kernel] token/token_file.
NixOS-модуль
Флейк отдаёт nixosModules.default — клиент ставится системно, адрес
ядра живёт прямо в конфиге системы (обёртка задаёт EVA_TUI_URL,
--url из рук всё ещё сильнее):
{
inputs.eva-tui.url = "git+ssh://forgejo@git.viende.su:61488/eva/tui.git";
# в конфигурации:
imports = [ inputs.eva-tui.nixosModules.default ];
programs.eva-tui = {
enable = true;
url = "https://eva.desu.church";
tokenFile = "/run/secrets/eva-tui-token"; # например, из sops-nix
};
}
Карта
src/eva_tui/
├── kernel.py # REST + разбор SSE руками, папка tui, PAGE_SIZE
└── app.py # Textual: список чатов, лента, стрим, пагинация