# AGENTS.md Правила для персонального YouTube-клиента с категориями подписок и интеграцией с существующим MeTube. Основные этапы разработки (каркас, OAuth/подписки, категории, лента, воспроизведение и MeTube) уже реализованы; ориентируйся на фактический код и `README.md`. ## Архитектурные ограничения 1. Не форкать/копировать Tube Archivist. 2. Не встраивать yt-dlp в этот сервис — скачивание выполняет существующий MeTube на `mediaVM`. 3. Не дублировать функции скачивания MeTube. 4. Не монтировать media storage MeTube на `hermesVM`: видео не хранится локально, только проксируется или линкуется. 5. Не реализовывать YouTube Recommendations/Home. 6. Приложение остаётся single-user (`ALLOWED_GOOGLE_EMAIL`). 7. Frontend не вызывает Google API напрямую. 8. Frontend не вызывает MeTube write API (`POST /add` и т.п.) напрямую — только через наш backend. 9. Не восстанавливать имя скачанного файла из YouTube title: использовать точное имя из события MeTube `completed`. 10. Не удалять существующие файлы MeTube при синхронизации или обслуживании; удаление по явному действию пользователя — отдельный поддерживаемый сценарий. 11. Не менять исходный код MeTube. 12. Все внешние base URL (MeTube, Google) задаются через env/config. 13. REST API должен оставаться пригодным для будущего mobile/PWA клиента. ## Структура и соглашения - `migrations/` — Alembic в корне репозитория; миграции импортируют модели из `backend/app`. Схему БД изменять миграциями, не создавать и не менять ad hoc при старте приложения. - MeTube-специфичные HTTP/Socket.IO вызовы инкапсулировать в `MeTubeClient`, не размазывать по backend. - Секреты хранить только в `.env` (образец — `.env.example`); не коммитить `.env`, refresh token или client secret. - Backend тесты — `pytest` в корневом `tests/`. Интеграции с Google/MeTube по умолчанию mock; реальные вызовы к `http://192.168.8.177:8081` — только opt-in, не в обычном CI. - В unit-тестах использовать `TestClient(app)` без `with`: контекстный менеджер запускает lifespan с подключением к MeTube (Socket.IO) и Postgres (`reconcile_on_startup`). ## Запуск и проверка См. `README.md`. Быстрая проверка: `docker compose up -d --build` и `curl http://localhost:8080/api/health`.