Switch agent team to opencode, drop Codex/Herdr multi-agent setup

This commit is contained in:
vrubelroman 2026-09-16 23:08:21 +00:00
parent c4a772b1e3
commit 6c704cac97
10 changed files with 184 additions and 2606 deletions

View file

@ -1,10 +1,9 @@
# MyYouTube
Персональный YouTube-клиент с категориями подписок и интеграцией с существующим MeTube.
Полное техническое задание: [`youtube_categories_metube_TZ.md`](./youtube_categories_metube_TZ.md).
UI/UX-спека (дизайн-система и сценарии интерфейса): [`UI_UX_spec.md`](./UI_UX_spec.md).
Работа агентской команды (opencode) описана в [руководстве по агентской команде](./AGENT_TEAM.md).
Текущий статус: **функционально готово** (Phases 1-6 из ТЗ + hardening по ходу тестирования). Развёрнуто и вручную протестировано на тестовом окружении (`testmyyoutube.vrubel.xyz` → hermesVM `192.168.8.173` → MeTube на mediaVM `192.168.8.177`).
Текущий статус: **функционально готово** (основные этапы 1–6 и доработки по итогам тестирования). Развёрнуто и вручную протестировано на тестовом окружении (`testmyyoutube.vrubel.xyz` → hermesVM `192.168.8.173` → MeTube на mediaVM `192.168.8.177`).
### Что сделано
@ -12,13 +11,13 @@ UI/UX-спека (дизайн-система и сценарии интерфе
- Раздел **«На сервере»** — скачанные видео; `/saved` перенаправляет на `/local`.
- Тёмный адаптивный интерфейс: общая навигация, категории с постоянными URL, поиск по названиям видео и каналов, мобильное меню.
- Отписанные каналы скрываются из списка каналов.
- **Отклонение от исходного MVP ТЗ (раздел 2)**: реальная отписка от канала на YouTube (`subscriptions.delete`) реализована по явной просьбе пользователя, хотя ТЗ изначально исключало управление подписками из MVP. Из-за этого OAuth scope расширен с `youtube.readonly` до полного `youtube` (read/write) — см. `backend/app/services/google_oauth.py`.
- Реальная отписка от канала на YouTube (`subscriptions.delete`) реализована по запросу пользователя сверх исходного MVP. Из-за этого OAuth scope расширен с `youtube.readonly` до полного `youtube` (read/write) — см. `backend/app/services/google_oauth.py`.
- Удаление скачанного видео с сервера (`DELETE /api/videos/{id}/download`) — тоже сверх исходного MVP-скоупа, добавлено по запросу.
### Что осталось / сознательно отложено
- Остальные пункты раздела 35 ТЗ («Возможные улучшения после MVP») не делались: PWA, watch later, Shorts-фильтр, SponsorBlock и т.д.
- Формальный Phase 7 hardening из ТЗ (retry/recovery, тесты) закрывался по факту находок в live-тестировании, а не отдельным проходом — см. `git log` для конкретных багфиксов (flapping статусов загрузки, неверный id в MeTube `/delete`, OAuth scope mismatch).
- Дополнительные идеи после MVP пока не реализованы: PWA, watch later, Shorts-фильтр, SponsorBlock и т.д.
- Hardening (retry/recovery, тесты) выполнялся по факту находок в live-тестировании, а не отдельным проходом — см. `git log` для конкретных багфиксов (flapping статусов загрузки, неверный id в MeTube `/delete`, OAuth scope mismatch).
## Стек
@ -46,6 +45,25 @@ UI/UX-спека (дизайн-система и сценарии интерфе
## Локальная разработка
### Агентская команда (opencode)
Подробная инструкция: [AGENT_TEAM.md](./AGENT_TEAM.md).
Работа идёт в одной сессии opencode: она стартует агентом `orchestrator`
(`default_agent` в `opencode.json`). Orchestrator сам декомпозирует задачу и
вызывает субагентов через Task tool: `coder` (единственный меняет
отслеживаемые файлы), `reviewer` (read-only review, `edit: deny`) и `tester`
(проверки без правок, `edit: deny`). Роли описаны в
[`.opencode/agent/`](./.opencode/agent/).
```bash
opencode
```
Задачу пиши обычным сообщением: Orchestrator передаст её Coder'у, соберёт
review и QA, повторит цикл при находках и вернёт финальный отчёт. Вручную
писать субагентам не нужно.
### Backend
```bash
@ -96,7 +114,8 @@ myyoutube/
├── Dockerfile
├── compose.yml
├── .env / .env.example
└── youtube_categories_metube_TZ.md
├── .opencode/ # агенты команды (orchestrator/coder/reviewer/tester)
└── AGENT_TEAM.md # руководство по агентской команде opencode
```
## Секреты