Добавить переносимый шаблон codex-agent-VPS
This commit is contained in:
parent
653f1268a6
commit
b16a23243e
@ -1,2 +1,2 @@
|
||||
client.version=1.2.213
|
||||
server.version=1.2.201
|
||||
client.version=1.2.214
|
||||
server.version=1.2.202
|
||||
|
||||
31
codex-agent-VPS/.env.example
Normal file
31
codex-agent-VPS/.env.example
Normal file
@ -0,0 +1,31 @@
|
||||
TELEGRAM_BOT_TOKEN=replace_me
|
||||
OPENAI_API_KEY=
|
||||
ALLOWED_TELEGRAM_USERNAME=owner_username
|
||||
ALLOWED_TELEGRAM_PLAYERS=user_one:User One,user_two:User Two
|
||||
ALLOWED_TELEGRAM_CHANNEL_USERNAME=
|
||||
BOT_USERNAME=your_bot_username
|
||||
TELEGRAM_API_BASE_URL=https://api.telegram.org
|
||||
OPENAI_TRANSCRIBE_MODEL=gpt-4o-mini-transcribe
|
||||
TELEGRAM_FILE_DOWNLOAD_TIMEOUT_SECONDS=300
|
||||
OPENAI_TRANSCRIBE_TIMEOUT_SECONDS=900
|
||||
OPENAI_TRANSCRIBE_MAX_UPLOAD_BYTES=25165824
|
||||
OPENAI_TRANSCRIBE_MAX_CHUNK_SECONDS=900
|
||||
OPENAI_TRANSCRIBE_OVERLAP_SECONDS=2
|
||||
OPENAI_TRANSCRIBE_REENCODE_BITRATE_KBPS=24
|
||||
OPENAI_TRANSCRIBE_FFMPEG_TIMEOUT_SECONDS=1800
|
||||
FFMPEG_BIN=ffmpeg
|
||||
FFPROBE_BIN=ffprobe
|
||||
OPENAI_TTS_MODEL=gpt-4o-mini-tts
|
||||
OPENAI_TTS_VOICE=alloy
|
||||
OPENAI_TTS_RESPONSE_FORMAT=opus
|
||||
OPENAI_TTS_TIMEOUT_SECONDS=180
|
||||
OPENAI_TTS_CHUNK_CHARS=3500
|
||||
OPENAI_VOICE_REWRITE_MODEL=gpt-4.1-nano
|
||||
OPENAI_VOICE_REWRITE_TIMEOUT_SECONDS=90
|
||||
OPENAI_VOICE_REWRITE_MAX_INPUT_CHARS=12000
|
||||
OPENAI_VOICE_REWRITE_MAX_OUTPUT_TOKENS=900
|
||||
CODEX_BIN=/home/your_user/.local/bin/codex
|
||||
CODEX_WORKDIR=/home/your_user
|
||||
CODEX_TIMEOUT_SECONDS=900
|
||||
MAX_RETRIES=3
|
||||
DATA_DIR=./data
|
||||
5
codex-agent-VPS/.gitignore
vendored
Normal file
5
codex-agent-VPS/.gitignore
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
.env
|
||||
data/
|
||||
logs/
|
||||
run/
|
||||
__pycache__/
|
||||
51
codex-agent-VPS/AGENT.md
Normal file
51
codex-agent-VPS/AGENT.md
Normal file
@ -0,0 +1,51 @@
|
||||
# AGENT.md для codex-agent-VPS
|
||||
|
||||
Ты запущен как обработчик входящего Telegram-сообщения от пользователя.
|
||||
|
||||
## Контекст
|
||||
- `codex-agent-VPS` — Telegram-бот, который принимает сообщения, ведёт историю, ставит задачи в очередь и последовательно запускает `codex` CLI на VPS.
|
||||
- Текстовые сообщения обрабатываются напрямую.
|
||||
- Voice и audio сначала распознаются через OpenAI transcription, затем передаются как текстовая задача.
|
||||
- История диалога хранится в JSONL-файле, путь передаётся в промпте.
|
||||
- Ответ пойдёт пользователю в Telegram как обычное текстовое сообщение.
|
||||
- Основная реализация сервиса — Python-скрипт `py_bot_service.py`.
|
||||
|
||||
## Пользователи и доступ
|
||||
- Разрешённые пользователи задаются через `ALLOWED_TELEGRAM_USERNAME` и `ALLOWED_TELEGRAM_PLAYERS`.
|
||||
- Все разрешённые пользователи считаются полноправными.
|
||||
- Для неизвестных пользователей в личном чате сервис отвечает вежливым отказом.
|
||||
- Все входящие задачи попадают в одну общую очередь и выполняются строго по одной.
|
||||
|
||||
## Очередь и состояние
|
||||
- Сервис ведёт состояние активной задачи и текущего файла истории.
|
||||
- После рестарта сервис продолжает незавершённую обработку с учётом сохранённого состояния.
|
||||
- Истории диалогов хранятся отдельно по username: `data/history/<username>/`.
|
||||
- Архив истории после `/new`: `data/history/<username>/archive/`.
|
||||
- После `/new` для этого же пользователя должен сбрасываться и контекст продолжения Codex-сессии; следующий запрос запускается как новая сессия, не через resume.
|
||||
- Дедупликация Telegram update обязательна, чтобы одно сообщение не обрабатывалось повторно.
|
||||
- Если Codex молчит во время активной задачи 2 минуты подряд, сервис отправляет аварийный статус и повторяет его каждые 2 минуты.
|
||||
|
||||
## Голосовые ответы
|
||||
- Озвучивание финальных ответов настраивается персонально командами `/voice_on` и `/voice_off`.
|
||||
- Для новых пользователей озвучивание включено по умолчанию.
|
||||
- Адаптация текста перед озвучкой настраивается командами `/voice_rewrite_on` и `/voice_rewrite_off`.
|
||||
- Если озвучивание включено, после текстового финального ответа сервис дополнительно отправляет voice-файл через OpenAI TTS.
|
||||
- Промежуточные статусы озвучивать не нужно.
|
||||
|
||||
## Команды
|
||||
- `/status` — состояние очереди и персональных настроек.
|
||||
- `/settings` — текущие пользовательские настройки.
|
||||
- `/queue` — список задач в очереди.
|
||||
- `/tasks` — список задач и предложений пользователя.
|
||||
- `/new` — архивировать историю и начать новую Codex-сессию.
|
||||
- `/stop` — остановить текущую задачу.
|
||||
- `/cancel <id|all>` — удалить задачу по id или очистить очередь.
|
||||
- `/restart` и `/restart_service` — отложенный рестарт после текущей задачи.
|
||||
- `/restart_hard`, `/restart_now`, `/restart_force` — жёсткий рестарт прямо сейчас.
|
||||
|
||||
## Правила ответа
|
||||
- Пиши содержательно и коротко.
|
||||
- Не упоминай внутренние служебные детали, файловую систему и технические логи, если это не нужно пользователю.
|
||||
- Если запрос требует действий с кодом или файлами, выполняй их в рабочей директории `CODEX_WORKDIR`.
|
||||
- Если данных недостаточно, задай ровно один уточняющий вопрос.
|
||||
- Если в промпте есть пометка retry, учитывай текущее состояние и продолжай аккуратно, а не начинай заново без причины.
|
||||
86
codex-agent-VPS/AGENTS.md
Normal file
86
codex-agent-VPS/AGENTS.md
Normal file
@ -0,0 +1,86 @@
|
||||
# AGENTS
|
||||
|
||||
## Назначение
|
||||
- `codex-agent-VPS` — переносимая версия Telegram-бота для запуска `codex` CLI на VPS.
|
||||
- Папку можно ставить в любое место на Linux-сервере, если там есть `python3`, `systemd`, `codex` и доступ в интернет.
|
||||
- Конфигурация делается через `.env`.
|
||||
|
||||
## Состав папки
|
||||
- `py_bot_service.py` — основная реализация сервиса.
|
||||
- `AGENT.md` — инструкции, которые бот передаёт в промпт Codex.
|
||||
- `.env.example` — пример конфигурации.
|
||||
- `scripts/systemd/shine-agent-bot-coder.service` — шаблон systemd unit.
|
||||
|
||||
## Требования к VPS
|
||||
- Linux-сервер с `systemd`.
|
||||
- Установленные `python3`, `curl`, `ffmpeg`.
|
||||
- Установленный `codex` CLI.
|
||||
- Выполненный `codex login` под тем пользователем, от которого будет работать сервис.
|
||||
- Telegram bot token.
|
||||
- Telegram usernames разрешённых пользователей.
|
||||
|
||||
## Установка через Codex
|
||||
1. Скопировать папку `codex-agent-VPS` на сервер в нужное место, например:
|
||||
- `/home/your_user/codex-agent`
|
||||
2. Установить `codex` CLI под рабочим пользователем.
|
||||
3. Выполнить под этим же пользователем:
|
||||
- `codex login`
|
||||
4. Установить системные зависимости:
|
||||
- `python3`
|
||||
- `ffmpeg`
|
||||
5. Скопировать `.env.example` в `.env`.
|
||||
6. В `.env` заполнить:
|
||||
- `TELEGRAM_BOT_TOKEN`
|
||||
- `ALLOWED_TELEGRAM_USERNAME`
|
||||
- `ALLOWED_TELEGRAM_PLAYERS`
|
||||
- `BOT_USERNAME`
|
||||
- `CODEX_BIN`
|
||||
- `CODEX_WORKDIR`
|
||||
7. Если нужны voice/audio и голосовые ответы, дополнительно задать:
|
||||
- `OPENAI_API_KEY`
|
||||
8. В `scripts/systemd/shine-agent-bot-coder.service` заменить:
|
||||
- `your_user`
|
||||
- `/home/your_user/codex-agent`
|
||||
на реальные значения.
|
||||
9. Скопировать unit в:
|
||||
- `/etc/systemd/system/shine-agent-bot-coder.service`
|
||||
10. Выполнить:
|
||||
- `sudo systemctl daemon-reload`
|
||||
- `sudo systemctl enable --now shine-agent-bot-coder`
|
||||
11. Проверить:
|
||||
- `sudo systemctl status shine-agent-bot-coder --no-pager`
|
||||
- `sudo journalctl -u shine-agent-bot-coder -f`
|
||||
|
||||
## Настройка доступа
|
||||
- `ALLOWED_TELEGRAM_USERNAME` — основной разрешённый пользователь.
|
||||
- `ALLOWED_TELEGRAM_PLAYERS` — дополнительные разрешённые пользователи:
|
||||
- `username1:Имя 1,username2:Имя 2`
|
||||
- Все пользователи из whitelist в этой версии считаются полноправными.
|
||||
- Все входящие задачи попадают в одну общую очередь и выполняются строго последовательно.
|
||||
|
||||
## Поведение агента
|
||||
- Бот принимает текст, voice и audio.
|
||||
- Для каждого пользователя ведётся отдельная история.
|
||||
- Все задачи запускаются через `codex exec`.
|
||||
- Рабочая директория задаётся через `CODEX_WORKDIR`.
|
||||
- Вызов идёт без sandbox/approval ограничений: `--dangerously-bypass-approvals-and-sandbox`.
|
||||
|
||||
## Что обычно меняют при переносе
|
||||
- `.env`
|
||||
- `scripts/systemd/shine-agent-bot-coder.service`
|
||||
- при необходимости `AGENT.md`
|
||||
|
||||
## Полезные команды
|
||||
- Проверка установки Codex:
|
||||
- `codex --version`
|
||||
- `codex doctor`
|
||||
- Self-test без Telegram:
|
||||
- `python3 py_bot_service.py --selftest-codex "Ответь одной строкой: Codex работает"`
|
||||
- Проверка сервиса:
|
||||
- `sudo systemctl status shine-agent-bot-coder --no-pager`
|
||||
- `sudo journalctl -u shine-agent-bot-coder -f`
|
||||
|
||||
## Примечания
|
||||
- Если `codex doctor` пишет, что credentials не найдены, нужно выполнить `codex login`.
|
||||
- Если `OPENAI_API_KEY` пустой, текстовые задачи через `codex` будут работать, а voice/audio и TTS-функции — нет.
|
||||
- Если у пользователя в Telegram нет username, whitelist по username его не пропустит.
|
||||
2960
codex-agent-VPS/py_bot_service.py
Normal file
2960
codex-agent-VPS/py_bot_service.py
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,23 @@
|
||||
[Unit]
|
||||
Description=SHiNE Agent Bot Coder (Telegram + Codex queue worker)
|
||||
After=network-online.target
|
||||
Wants=network-online.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=your_user
|
||||
Group=your_user
|
||||
WorkingDirectory=/home/your_user/codex-agent
|
||||
Environment=HOME=/home/your_user
|
||||
Environment=PATH=/home/your_user/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
||||
EnvironmentFile=/home/your_user/codex-agent/.env
|
||||
ExecStart=/usr/bin/python3 /home/your_user/codex-agent/py_bot_service.py
|
||||
Restart=always
|
||||
RestartSec=5
|
||||
TimeoutStopSec=20
|
||||
SuccessExitStatus=143 0
|
||||
StandardOutput=append:/home/your_user/codex-agent/logs/service.log
|
||||
StandardError=append:/home/your_user/codex-agent/logs/service.log
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
Loading…
Reference in New Issue
Block a user