docs: README по требованиям к оформлению и демо-сервисы examples/ #48

Merged
Eleboba merged 1 commits from docs/19-readme into dev 2026-10-17 16:04:46 +03:00
Owner

Closes #19 · мержить последним из стопки: #45 → #46 → #47 → этот (ветка от feat/15-alerts)

Что сделано

  • README по «Требованиям к оформлению»:

    1. цели и задачи;
    2. что реализовано — таблица по разделам со ссылками на требования ТЗ;
    3. развёртывание — локально за 5 минут (make demo-repo + make run), полный стек в Docker, сервер, переменные окружения, проверки;
    4. входные и выходные данные — команды и кнопки, что пишется в репозиторий и БД, используемые API;
    5. ограничения — безопасность, лимиты, что пока не сделано.

    Плюс структура репозитория.

  • examples/ — демо-сервисы в том же Compose-проекте, что и бот (make demo-up / make demo-down):

    • hello — 🟢, проверки ✅, в логе материал для grep и агента;
    • crash — 💥, затем 🔁;
    • cpu_hog — 🔥;
    • unhealthy — 🩺.

    Ещё syntax_error.py и lint_fail.py для демонстрации коммита и agent_prompts.md — обычные вопросы агенту и атаки с ожидаемой реакцией.

  • make local-proxy — read-only Docker API для make run.

Как проверено

  • Инструкция «Вариант А» на чистом клоне: make install, make demo-repo, .env → бот поднимается до Start polling; миграции применяются на пустой SQLite.
  • Демо-сервисы на локальном Docker с настоящим монитором алертов: 🩺 сразу, 💥 краш через ~15 с со счётчиком (обновляется не чаще раза в минуту), 🔥 через минуту, 🔁 после трёх рестартов. Этот смоук нашёл две проблемы в алертах, исправлены в #47 (79ea5ce).
  • ruff (сломанные нарочно syntax_error.py / lint_fail.py исключены), 296 тестов.

🤖 Generated with Claude Code

Closes #19 · **мержить последним из стопки:** #45 → #46 → #47 → этот (ветка от `feat/15-alerts`) ## Что сделано - **README** по «Требованиям к оформлению»: 1. цели и задачи; 2. что реализовано — таблица по разделам со ссылками на требования ТЗ; 3. развёртывание — локально за 5 минут (`make demo-repo` + `make run`), полный стек в Docker, сервер, переменные окружения, проверки; 4. входные и выходные данные — команды и кнопки, что пишется в репозиторий и БД, используемые API; 5. ограничения — безопасность, лимиты, что пока не сделано. Плюс структура репозитория. - **`examples/`** — демо-сервисы в том же Compose-проекте, что и бот (`make demo-up` / `make demo-down`): - `hello` — 🟢, проверки ✅, в логе материал для grep и агента; - `crash` — 💥, затем 🔁; - `cpu_hog` — 🔥; - `unhealthy` — 🩺. Ещё `syntax_error.py` и `lint_fail.py` для демонстрации коммита и `agent_prompts.md` — обычные вопросы агенту и атаки с ожидаемой реакцией. - `make local-proxy` — read-only Docker API для `make run`. ## Как проверено - Инструкция «Вариант А» на чистом клоне: `make install`, `make demo-repo`, `.env` → бот поднимается до `Start polling`; миграции применяются на пустой SQLite. - Демо-сервисы на локальном Docker с настоящим монитором алертов: 🩺 сразу, 💥 краш через ~15 с со счётчиком (обновляется не чаще раза в минуту), 🔥 через минуту, 🔁 после трёх рестартов. Этот смоук нашёл две проблемы в алертах, исправлены в #47 (`79ea5ce`). - ruff (сломанные нарочно `syntax_error.py` / `lint_fail.py` исключены), 296 тестов. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Eleboba added 5 commits 2026-10-17 15:57:31 +03:00
feat(logs): раздел «Логи» — хвост и свой grep (#16)
CI / ruff · mypy · pytest (pull_request) Successful in 9m40s
f89338e015
- 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>
- prefilter: правила из config/agent_rules.yaml (длина, команды, shell,
  секреты и системные файлы, prompt injection) — без LLM
- guard: отдельный вызов, JSON {verdict, reason}; невалидный ответ = attack,
  недоступный LLM — «попробуйте позже», а не атака
- planner: только AgentLogQuery (контейнер из белого списка, ≤ 7 д, шаблон
  ≤ 200 без вложенных квантификаторов, лимит ≤ 500); логи в LLM не идут
- бот: «🤖 Спросить агента» → показывает построенный grep и строки;
  атака — вежливый отказ и 🛡 администраторам; квота 30 в сутки
- журнал agent_requests + log_queries (mode=agent)
- при LLM_PROVIDER=mock агент выключен

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- детекторы по состоянию после каждого раунда снапшотов: краш, OOM,
  цикл рестартов, unhealthy, перегрузка ≥ 1 мин, мало места, Docker
  недоступен; пороги в config/alerts.yaml
- AlertService: ключ kind+service, повтор в 10 мин — счётчик в исходном
  сообщении, «✅ восстановлено» ответом; разовые события (🛡) со счётчиком
- рассылка всем активным (🛡 — только админам), темп ~25/с, RetryAfter,
  заблокировавший бота пропускается; alert_deliveries для правок и ответов
- «🚨 Алерты»: активные + 7 дней по 10, карточка; кнопки «📜 Логи»,
  «🩺 Статус» под алертом открывают новое сообщение, а не затирают алерт
- 🛡 атаки через агента идут через общий сервис алертов
- убраны заглушки «Раздел в разработке» — у всех разделов свои роутеры

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Найдено смоуком на живых контейнерах (examples/, #19):
- контейнер с restart: on-failure поднимается за секунду — между раундами
  его не видно в exited; краш теперь распознаётся и по росту RestartCount
  (сравнение со снапшотами до текущего раунда), повторы — счётчик
- алерт закрывается, только когда условия нет resolve_after (60 с): иначе
  флапающий сервис получал бы «✅ восстановлено» после каждого раунда
- правки сообщений со счётчиком — не чаще раза в минуту на алерт

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- README: цели и задачи, что реализовано, развёртывание (локально за 5 минут
  и полный стек), переменные, команды и данные, используемые API,
  ограничения и лимиты, что не сделано, структура репозитория
- examples/: hello (healthy + материал для grep/агента), crash (💥 и 🔁),
  cpu_hog (🔥), unhealthy (🩺), syntax_error/lint_fail для коммита,
  вопросы агенту и атаки; make demo-up / demo-down в том же Compose-проекте
- make local-proxy: read-only Docker API для `make run`
- ARCHITECTURE: краш при restart-политике и гистерезис алертов

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Eleboba merged commit 93dd7ee0a3 into dev 2026-10-17 16:04:46 +03:00
Sign in to join this conversation.