212 lines
6.1 KiB
Markdown
Executable File
212 lines
6.1 KiB
Markdown
Executable File
# Codex CLI — Patched
|
||
|
||
Patched OpenAI Codex CLI for use with custom API endpoints.
|
||
Latest: **v0.111.0** (6 config patches).
|
||
|
||
> Codex CLI — это compiled Rust binary. В отличие от Claude Code и Gemini CLI (JavaScript),
|
||
> патчинг выполняется через `config.toml` + переменные окружения.
|
||
|
||
## Установка
|
||
|
||
### Требования
|
||
|
||
- **Python 3.11+** (для `tomllib`)
|
||
- **curl** (для скачивания бинарника)
|
||
- **Linux x86_64 или aarch64** (macOS/Windows — вручную)
|
||
|
||
### Быстрая установка (Linux)
|
||
|
||
```bash
|
||
# 1. Клонировать репо (или скачать файлы)
|
||
git clone https://git.sensey24.ru/aibot777/unlimitedcoding.git
|
||
cd unlimitedcoding/codex
|
||
|
||
# 2. Настроить конфиг — указать свой API endpoint и ключ
|
||
cp codex_config.example.json codex_config.json
|
||
nano codex_config.json # Изменить base_url и api_key
|
||
|
||
# 3. Установить бинарник + применить патчи
|
||
sudo bash ucodex_install.sh
|
||
```
|
||
|
||
### Ручная установка (шаг за шагом)
|
||
|
||
**Шаг 1 — Установить бинарник Codex CLI:**
|
||
|
||
```bash
|
||
# Скачать последнюю версию с GitHub
|
||
sudo bash update-codex.sh
|
||
codex --version # Должно показать: codex-cli 0.111.0
|
||
```
|
||
|
||
**Шаг 2 — Настроить конфиг:**
|
||
|
||
```bash
|
||
cp codex_config.example.json codex_config.json
|
||
```
|
||
|
||
Отредактировать `codex_config.json`:
|
||
```json
|
||
{
|
||
"base_url": "https://your-api-endpoint.example.com",
|
||
"api_key": "YOUR_API_KEY",
|
||
"model": "gpt-5.2-codex"
|
||
}
|
||
```
|
||
|
||
**Шаг 3 — Применить патчи:**
|
||
|
||
```bash
|
||
sudo python3 codex_patcher.py --apply --config codex_config.json
|
||
```
|
||
|
||
Вывод:
|
||
```
|
||
Codex CLI Patcher
|
||
Version: 0.111.0
|
||
Binary: /usr/local/bin/codex
|
||
Proxy: https://your-api-endpoint.example.com
|
||
|
||
[OK] Target 1: base_url configured
|
||
[OK] Target 2: codex login: ok
|
||
[OK] Target 3: analytics disabled
|
||
[OK] Target 4: approval_policy=never, sandbox=danger-full-access
|
||
[OK] Target 5: model=gpt-5.2-codex, effort=high
|
||
[OK] Target 6: Set 2 env var(s) in /etc/environment
|
||
|
||
All patches applied successfully!
|
||
```
|
||
|
||
**Шаг 4 — Проверить:**
|
||
|
||
```bash
|
||
# Validate
|
||
python3 update_codex_patcher.py --validate
|
||
|
||
# Test
|
||
codex exec "What is 2+2? Reply with just the number"
|
||
```
|
||
|
||
## Обновление
|
||
|
||
### Обновить бинарник Codex CLI
|
||
|
||
```bash
|
||
cd unlimitedcoding/codex
|
||
sudo bash update-codex.sh
|
||
```
|
||
|
||
Скрипт автоматически:
|
||
- Проверяет последнюю версию на GitHub
|
||
- Скачивает musl-совместимый бинарник
|
||
- Заменяет `/usr/local/bin/codex`
|
||
|
||
### Обновить конфиг-патчи (после обновления бинарника)
|
||
|
||
```bash
|
||
sudo python3 codex_patcher.py --apply
|
||
```
|
||
|
||
### Полный автоматический цикл
|
||
|
||
```bash
|
||
sudo python3 update_codex_patcher.py --auto
|
||
```
|
||
|
||
Выполняет: check → update binary → apply patches → validate → test.
|
||
|
||
### Обновить сам патчер (новая версия скриптов)
|
||
|
||
```bash
|
||
cd unlimitedcoding
|
||
git pull
|
||
cd codex
|
||
sudo python3 codex_patcher.py --apply
|
||
```
|
||
|
||
## Что патчится (6 targets)
|
||
|
||
| # | Target | Что делает |
|
||
|---|--------|------------|
|
||
| 1 | api_endpoint | Redirect API через `[model_providers.custom]` в config.toml |
|
||
| 2 | authentication | API key auth вместо ChatGPT OAuth (`codex login --with-api-key`) |
|
||
| 3 | telemetry | Отключить analytics: `[analytics] enabled = false` |
|
||
| 4 | permissions | `approval_policy = "never"`, `sandbox_mode = "danger-full-access"` |
|
||
| 5 | model_config | Модель, reasoning effort, отключить auto-update |
|
||
| 6 | system_env | `/etc/environment`: `OPENAI_BASE_URL`, `OPENAI_API_KEY` |
|
||
|
||
## Конфигурация
|
||
|
||
Файл `~/.codex/config.toml` (генерируется патчером):
|
||
|
||
```toml
|
||
model = "gpt-5.2-codex"
|
||
model_reasoning_effort = "xhigh"
|
||
model_provider = "custom"
|
||
approval_policy = "never"
|
||
sandbox_mode = "danger-full-access"
|
||
check_for_update_on_startup = false
|
||
forced_login_method = "api"
|
||
|
||
[analytics]
|
||
enabled = false
|
||
|
||
[model_providers.custom]
|
||
name = "custom"
|
||
base_url = "https://your-api-endpoint.example.com/v1"
|
||
env_key = "OPENAI_API_KEY"
|
||
wire_api = "responses"
|
||
```
|
||
|
||
## Rollback
|
||
|
||
Восстановить оригинальный конфиг:
|
||
|
||
```bash
|
||
python3 codex_patcher.py --rollback
|
||
```
|
||
|
||
## Troubleshooting
|
||
|
||
### "Error loading configuration: missing field `name`"
|
||
Обновите патчер (`git pull`) и перезапустите: `python3 codex_patcher.py --apply`
|
||
|
||
### codex не запускается (segfault / GLIBC)
|
||
Скрипт `update-codex.sh` скачивает musl-версию для совместимости. Если проблема остаётся:
|
||
```bash
|
||
# Проверить бинарник
|
||
file /usr/local/bin/codex
|
||
ldd /usr/local/bin/codex # Должно быть "not a dynamic executable" (static)
|
||
```
|
||
|
||
### "OPENAI_API_KEY not set"
|
||
```bash
|
||
# Вариант 1: Перезайти в shell (env vars из /etc/environment)
|
||
source /etc/environment
|
||
|
||
# Вариант 2: Установить вручную
|
||
export OPENAI_BASE_URL="https://your-endpoint/v1"
|
||
export OPENAI_API_KEY="your-key"
|
||
```
|
||
|
||
### Permissions промпты всё ещё появляются
|
||
Убедитесь что config.toml содержит `approval_policy = "never"`:
|
||
```bash
|
||
cat ~/.codex/config.toml | grep approval
|
||
```
|
||
|
||
## Структура файлов
|
||
|
||
```
|
||
codex/
|
||
├── codex_patcher.py # Главный патчер (6 targets)
|
||
├── codex_config.json # Ваш конфиг (не коммитить!)
|
||
├── codex_config.example.json # Пример конфига
|
||
├── update_codex_patcher.py # Pipeline CLI
|
||
├── update-codex.sh # Бинарный updater с GitHub
|
||
├── ucodex_install.sh # One-liner installer
|
||
└── updater/
|
||
├── __init__.py
|
||
└── config_validator.py # Валидация 6 targets
|
||
```
|