---
name: bot-audit
description: "Полный аудит бота: 3 senior-ревью (баги, security, рефакторинг) + 5 QA-агентов (50 тестов по 10) + health-check. 8 параллельных агентов."
argument-hint: "[bot-project-path or VPS ssh path]"
user-invocable: true
allowed-tools: Read Write Edit Bash Glob Grep Agent
---

# /bot-audit — Полный аудит Telegram-бота / Node.js / Python сервиса

Триггеры: `аудит бота`, `bot audit`, `проверь бота`, `ревью бота`, `тест сеньорами`, `code review`, `тестирование роем`

## WORKFLOW

### Шаг 0: Подготовка

1. **Определить путь проекта:**
   - Если передан аргумент — использовать его
   - Если нет — использовать текущую рабочую директорию (cwd)
   - Проверить что директория существует: `ls [path]/`

2. **Определить стек:**
   ```bash
   # Проверяем package.json, requirements.txt, pyproject.toml
   ls [path]/package.json [path]/requirements.txt [path]/pyproject.toml 2>/dev/null
   ```
   - `grammy` / `telegraf` / `node-telegram-bot-api` в package.json → JS/TS бот
   - `aiogram` / `python-telegram-bot` / `telebot` в requirements.txt → Python бот
   - Ни то ни другое → общий Node.js / Python сервис

3. **Найти точки входа:**
   ```bash
   # JS/TS: main в package.json, index.ts, bot.ts, app.ts, src/index.ts
   # Python: main.py, bot.py, app.py, __main__.py
   ```
   Если несколько entry points — передать ВСЕ каждому агенту.

4. **Собрать список файлов:**
   ```bash
   find [path] -name "*.ts" -o -name "*.js" -o -name "*.py" | grep -v node_modules | grep -v __pycache__ | sort
   ```
   Посчитать количество файлов и строк для оценки объёма.

5. **Прочитать ключевые файлы** (package.json, конфиг, .env.example, README) для контекста.

### Шаг 0.5: Подготовка файлов для агентов

**Для VPS-ботов:** скачать файлы локально в /tmp/:
```bash
ssh root@<VPS> "cat /path/to/core-files" > /tmp/bot-core.py
ssh root@<VPS> "cat /path/to/handlers/*" > /tmp/bot-handlers.py
```
Агенты читают /tmp/ файлы — быстрее чем SSH в каждом агенте.

### Шаг 1: Запуск 8 параллельных агентов (2 волны)

**Волна 1 (ОДНИМ сообщением): 3 senior-ревью агента**

Запустить ВСЕ ТРИ агента в ОДНОМ ответе, каждый через Agent tool.

---

#### Агент 1: Code Reviewer

```
Agent(
  prompt="Ты — senior code reviewer. Проведи полный аудит бот-проекта.

ПРОЕКТ: [path]
СТЕК: [grammy/aiogram/telegraf/etc]
ENTRY POINTS: [список]
ФАЙЛЫ: [список всех файлов]

ЗАДАЧА: Найти ВСЕ проблемы в коде. Читай каждый файл через Read tool.

КАТЕГОРИИ ПРОВЕРКИ:
1. БАГИ — логические ошибки, race conditions, необработанные промисы, неправильная обработка ошибок
2. БЕЗОПАСНОСТЬ — утечка токенов, SQL injection, command injection, отсутствие валидации ввода, небезопасные зависимости
3. УТЕЧКИ ПАМЯТИ — незакрытые соединения, растущие массивы, listeners без removeListener, отсутствие graceful shutdown
4. SILENT FAILURES — catch без обработки, swallowed errors, отсутствие логирования
5. CONCURRENCY — проблемы с параллельным доступом, отсутствие rate limiting, флуд-защиты

ФОРМАТ ОТЧЁТА (строго):
## Code Review Report

### CRITICAL (блокеры, чинить немедленно)
- **[файл:строка]** Описание проблемы → Как исправить

### HIGH (серьёзные, чинить в спринте)
- **[файл:строка]** Описание → Решение

### MEDIUM (улучшения)
- **[файл:строка]** Описание → Решение

### LOW (мелочи, стиль)
- **[файл:строка]** Описание → Решение

### Общая оценка
- Качество кода: [1-10]
- Безопасность: [1-10]
- Надёжность: [1-10]

Будь конкретным — указывай ФАЙЛ:СТРОКУ и точное описание. НЕ придумывай проблемы — только то что реально нашёл в коде."
)
```

---

#### Агент 2: QA Expert

```
Agent(
  prompt="Ты — QA expert. Сгенерируй 50 поведенческих тестовых сценариев для бота.

ПРОЕКТ: [path]
СТЕК: [grammy/aiogram/telegraf/etc]
ENTRY POINTS: [список]
ФАЙЛЫ: [список всех файлов]

ЗАДАЧА: Прочитай все файлы через Read tool. Разберись в командах, хэндлерах, FSM-состояниях, inline-кнопках, callback-обработчиках. Затем сгенерируй TEST_PLAN.md.

КАТЕГОРИИ СЦЕНАРИЕВ (минимум 50 штук):
1. КОМАНДЫ (10+) — каждая команда: /start, /help, /settings и т.д.
2. ОСНОВНЫЕ FLOW (10+) — пользовательские сценарии от начала до конца
3. EDGE CASES (10+) — пустой ввод, очень длинный текст, спецсимволы, эмодзи, HTML-инъекции
4. ОШИБКИ (10+) — недоступный API, таймауты БД, невалидный callback_data, expired inline keyboards
5. ПРАВА (5+) — admin vs user, заблокированный пользователь, новый пользователь без state
6. НАГРУЗКА (5+) — быстрые повторные нажатия, параллельные сессии, flood

ФОРМАТ: Сохранить как файл TEST_PLAN.md в корень проекта.

```markdown
# Test Plan: [название бота]
Дата: [сегодня]
Стек: [grammy/aiogram/etc]

## Матрица покрытия
| Область | Кол-во сценариев | Приоритет |
|---------|-----------------|-----------|
| Команды | N | P1 |
| ...     | N | P2 |

## Сценарии

### 1. [Название]
- **Категория:** команды/flow/edge/error/permissions/load
- **Приоритет:** P1/P2/P3
- **Предусловие:** [состояние]
- **Шаги:**
  1. Отправить /start
  2. Нажать кнопку X
  3. ...
- **Ожидаемый результат:** [что должно произойти]
- **Покрывает:** [какой хэндлер/файл]
```

Сохрани результат в файл [path]/TEST_PLAN.md через Write tool."
)
```

---

#### Агент 3: Refactoring Specialist

```
Agent(
  prompt="Ты — архитектор с опытом рефакторинга монолитов. Проанализируй структуру бот-проекта.

ПРОЕКТ: [path]
СТЕК: [grammy/aiogram/telegraf/etc]
ENTRY POINTS: [список]
ФАЙЛЫ: [список всех файлов]

ЗАДАЧА: Прочитай все файлы через Read tool. Оцени архитектуру и предложи модульную структуру.

АНАЛИЗ:
1. ТЕКУЩАЯ СТРУКТУРА — нарисуй дерево зависимостей, найди god-objects, длинные файлы (>300 строк)
2. СВЯЗНОСТЬ (coupling) — какие модули слишком связаны, где circular dependencies
3. ТЕСТИРУЕМОСТЬ — что мешает юнит-тестированию (глобальное состояние, hardcoded deps)
4. МАСШТАБИРУЕМОСТЬ — что сломается при x10 пользователей

ФОРМАТ: Сохранить как REFACTORING_PLAN.md в корень проекта.

```markdown
# Refactoring Plan: [название бота]
Дата: [сегодня]

## Текущая архитектура
[ASCII-диаграмма текущей структуры]

## Проблемы
1. **[проблема]** — [влияние] — [файлы]

## Целевая архитектура
[ASCII-диаграмма предлагаемой структуры]

## Этапы рефакторинга

### Этап 1: [название] (~X часов)
- [ ] Задача 1
- [ ] Задача 2
Риск: низкий/средний/высокий

### Этап 2: [название] (~X часов)
...

## Оценка трудозатрат
| Этап | Часы | Риск | Приоритет |
|------|------|------|-----------|
| 1    | X    | low  | must      |

Общая оценка: ~XX часов
```

Сохрани результат в файл [path]/REFACTORING_PLAN.md через Write tool."
)
```

**Волна 2 (ОДНИМ сообщением): 5 QA-агентов (50 тестов)**

После Волны 1 (или параллельно в background) запустить 5 qa-expert агентов:

| Агент | Сценарии | Фокус |
|-------|----------|-------|
| QA-1 | 1-10 | Survey flow: /start, consent, Q1-Q5, scores, LLM |
| QA-2 | 11-20 | Review flow: platforms, screenshot, promo code |
| QA-3 | 21-30 | Admin, booking, doctors, navigation, menu |
| QA-4 | 31-40 | Concern, channel review, CT scan, QR lobby |
| QA-5 | 41-50 | Email, GDPR, edge cases, data persistence |

Каждому агенту передать:
- Путь к файлам: `/tmp/bot-core.py` и `/tmp/bot-handlers.py`
- Конкретные 10 сценариев с описанием
- Формат вывода: таблица `#, Scenario, PASS/FAIL/WARN, Evidence (file:line), Notes`

```
Agent(
  subagent_type="qa-expert",
  prompt="Test scenarios N-M: [FOCUS]. Code: /tmp/bot-core.py, /tmp/bot-handlers.py.
  For each scenario trace through code, verify correctness.
  Output: numbered table with PASS/FAIL/WARN + file:line evidence.",
  run_in_background=true,
)
```

### Шаг 2: Сбор результатов

После завершения ВСЕХ агентов (Волна 1 + Волна 2):

1. Прочитать вывод каждого агента
2. Прочитать сгенерированные файлы TEST_PLAN.md и REFACTORING_PLAN.md
3. Извлечь из Code Review: количество CRITICAL/HIGH/MEDIUM/LOW

### Шаг 3: Комбинированный отчёт

Вывести пользователю сводку:

```
## Аудит бота: [название]

### Проблемы в коде
| Severity | Кол-во |
|----------|--------|
| CRITICAL | N      |
| HIGH     | N      |
| MEDIUM   | N      |
| LOW      | N      |

### TOP-5 проблем (исправить первыми)
1. [CRITICAL] [файл:строка] — описание
2. ...

### Тестовое покрытие
- Всего сценариев: 50
- Команды: N | Flows: N | Edge cases: N | Ошибки: N | Права: N | Нагрузка: N
- Файл: TEST_PLAN.md

### Рефакторинг
- Этапов: N
- Общая оценка: ~XX часов
- Первый этап: [название] (~X ч, риск: low)
- Файл: REFACTORING_PLAN.md

### Приоритетный план действий
1. [неделя 1] Исправить CRITICAL баги
2. [неделя 2] Исправить HIGH + начать этап 1 рефакторинга
3. [неделя 3-4] Прогнать тест-план, закрыть MEDIUM
```

## Правила

- **НЕ модифицировать код** — только анализ и отчёты
- **Агенты читают ВСЕ файлы** — не пропускать вспомогательные модули
- **Конкретика** — каждая проблема привязана к файлу и строке
- **Честная оценка** — не раздувать проблемы, не замалчивать критичные
- **node_modules / __pycache__ / .venv** — НЕ читать

## Стоимость

~3 агента по ~$0.15-0.30 = **~$0.50-0.90** за полный аудит.
Время: ~3-5 минут (параллельно).
