# Telegram-агент для разрешённых игроков - Горизонт: `near` - Ориентир: сегодня/завтра - Статус: `proposal` ## Кратко Нужно расширить `SHiNE-agent-bot-coder`, чтобы агент мог принимать личные сообщения от заранее разрешённых пользователей, вести по каждому отдельную рабочую папку и историю, помогать им с обсуждениями/документами без изменения кода, а краткий результат публиковать в общий канал. ## Пользовательский сценарий 1. Разрешённый пользователь пишет агенту в личные сообщения текстом или голосом. 2. Голосовое сообщение распознаётся так же, как сейчас распознаются voice/audio-задачи. 3. Сервис определяет пользователя по разрешённому списку логинов. 4. Для пользователя используется отдельная папка в `Players/`. 5. Codex запускается с системным контекстом: от имени какого человека он работает, где лежит его папка, какие у него локальные инструкции. 6. Агент может читать код и документацию проекта, но писать должен только в папку этого пользователя, если нет отдельного согласования на изменение общего проекта. 7. После ответа пользователю агент отправляет в общий канал короткую сводку двумя сообщениями или двумя блоками: вопрос пользователя и полученный ответ. 8. Команда `/new` или `New` сбрасывает только сессию этого пользователя. ## Предлагаемая структура - `Players/` - `Ivan/` - `AGENTS.md` - `history/` - `files/` - `Sergey/` - `AGENTS.md` - `history/` - `files/` - `Milana/` - `AGENTS.md` - `history/` - `files/` Имена папок можно уточнить после получения точных Telegram-логинов. ## Что нужно сделать 1. Добавить конфигурацию разрешённых Telegram-пользователей. 2. Описать соответствие `telegram username -> имя игрока -> папка`. 3. Создавать или использовать отдельную историю диалога для каждого игрока. 4. Поддержать личные сообщения от разрешённых пользователей. 5. Запретить постановку задач от неизвестных пользователей. 6. Для групп/каналов оставить текущую логику: команды Айдара имеют приоритет. 7. При запуске Codex для игрока добавлять отдельный системный контекст: - имя пользователя; - путь к его папке; - правило записи только в эту папку; - путь к персональному `AGENTS.md`. 8. После ответа игроку отправлять краткую сводку в общий канал. 9. Поддержать `/new`/`New` как сброс только персональной сессии игрока. 10. Добавить защиту от случайного изменения общего кода в режиме игрока. ## Вопросы перед реализацией 1. Точные Telegram-логины Ивана, Сергея и Миланы. 2. Какой общий канал использовать для сводок: текущий `@shine_writing` или отдельный чат. 3. Нужно ли отправлять в общий канал полный текст вопроса/ответа или краткую выжимку. 4. Нужно ли пересылать вложения игроков в общий канал или только текстовые сводки. 5. Разрешить ли игрокам читать все документы проекта, включая технические заметки деплоя. 6. Что делать, если пользователь просит изменить код: отказать, создать предложение в своей папке или просить подтверждение Айдара. 7. Нужны ли русские имена папок (`Иван`, `Сергей`, `Милана`) или ASCII-имена (`Ivan`, `Sergey`, `Milana`). 8. Нужно ли хранить истории игроков в общей папке сервиса или внутри `Players//history/`. ## Риски и ограничения - Нужно аккуратно разделить режим Айдара и режим игрока, чтобы игроки не могли случайно запустить изменение общего кода. - Нужно не смешать истории разных пользователей. - Нужно ограничить публикацию в общий канал, чтобы не утекали личные или слишком длинные ответы. - Нужна проверка Telegram-идентификации: username может меняться, поэтому желательно хранить и `user_id`. ## Документы, которые обновить при реализации - `SHiNE-agent-bot-coder/AGENTS.md` - `SHiNE-agent-bot-coder/AGENT.md` - `SHiNE-agent-bot-coder/README.md` - `Dev_Docs/deploy/agent-bot-coder-local-systemd.md`, если появятся новые переменные окружения или настройки сервиса. ## Минимальная проверка 1. Айдар по-прежнему может ставить задачи из `@shine_writing`. 2. Неизвестный пользователь не ставит задачу в очередь. 3. Разрешённый игрок пишет личное текстовое сообщение и получает ответ. 4. Разрешённый игрок отправляет voice, оно распознаётся и обрабатывается. 5. История одного игрока не попадает в историю другого. 6. `/new` сбрасывает только историю текущего игрока. 7. Сводка вопрос/ответ появляется в общем канале. 8. В режиме игрока агент не пишет за пределы `Players//` без отдельного подтверждения.