feat(logs): раздел «Логи» — хвост и свой grep (#16)
CI / ruff · mypy · pytest (pull_request) Successful in 9m40s

- app/logs/grep.py: подмножество grep (шаблон, -i -v -E -c -C N), разбор
  shlex без исполнения, BRE → regex, таймаут на строку и бюджет на поиск,
  лимиты 200 символов / 500 строк вывода
- app/logs/journal.py: каждый поиск в log_queries (L-6)
- бот: выбор контейнера, хвост 50/200 строк или 5 мин/1 ч/24 ч, свой grep
  по 24 ч, длинный результат — файлом .log (L-5)
- логи Docker: не больше 50 000 строк и 5 МБ, сохраняются новейшие
- fix: кнопки меню и /menu, /help больше не проглатываются шагами ввода
  (имя файла, содержимое, сообщение коммита, grep) — фильтр free_input

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-17 14:49:02 +03:00
co-authored by Claude Opus 5.5
parent 86ca3a67e0
commit f89338e015
18 changed files with 884 additions and 29 deletions
+32 -1
View File
@@ -33,7 +33,6 @@ class HelpTexts(_Strict):
class SectionTexts(_Strict):
commit: str
logs: str
alerts: str
members: str
cancelled: str
@@ -152,6 +151,37 @@ class StatusTexts(_Strict):
seconds: str
class LogsTexts(_Strict):
title: str
empty: str
unavailable: str
container: str
tail: str
since: str
minutes: str
hours: str
grep_button: str
agent_button: str
agent_soon: str
to_list: str
to_container: str
ask_grep: str
head_tail: str
head_grep: str
nothing: str
truncated: str
partial: str
skipped: str
sent_as_file: str
err_empty: str
err_quotes: str
err_flag: str
err_context: str
err_extra: str
err_too_long: str
err_regex: str
class Texts(_Strict):
menu: MenuTexts
start: StartTexts
@@ -160,6 +190,7 @@ class Texts(_Strict):
members: MembersTexts
commit: CommitTexts
status: StatusTexts
logs: LogsTexts
def load_texts(config_dir: Path) -> Texts: