Files
unlimitedcoding/codex/README.md
delta-cloud-208e 72ac0d75a0 chore: fix file permissions (644 → 755)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 07:46:35 +00:00

212 lines
6.1 KiB
Markdown
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 = "high"
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
```