SHiNE-server/TODO/near/2026-05-25_1106_telegram_agent_players.md
2026-06-28 09:30:59 +04:00

7.2 KiB
Raw Permalink Blame History

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/<name>/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/<name>/ без отдельного подтверждения.