From 1e15e4b6e8c70b637b53f5f7cfaa3502c1dd2b27 Mon Sep 17 00:00:00 2001 From: vitaly Date: Sun, 31 May 2026 18:12:42 +0700 Subject: [PATCH] refactor(claude_gpt): switch to native OpenAI Codex CLI Replace claude-code-proxy + effort-proxy + claude wrapper with direct codex binary invocation. claude_gpt now behaves like a simple launcher: - Looks for codex in ~/.npm-global/bin or PATH - Falls back with helpful install hint if missing - Removes all proxy orchestration, auth polling, and Anthropic env vars --- README.md | 2 +- claude_setup.sh | 108 ++++-------------------------------------------- 2 files changed, 10 insertions(+), 100 deletions(-) diff --git a/README.md b/README.md index 3c80b4a..f8ea866 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ source ~/.bashrc ### Доступные команды запуска -* `claude_gpt`: Доступ к GPT-5.5 (требует авторизации через `claude-code-proxy`). +* `claude_gpt`: Запуск нативного OpenAI Codex (требуется `npm install -g @openai/codex`). * `claude_deepseek`: Доступ к DeepSeek (требуется API ключ). * `claude_kimi`: Доступ к Kimi K2.6 через Artemox OpenAI-compatible API (требуется API ключ). * `claude_gemini`: Доступ к Gemini (требует авторизации через веб-интерфейс `antigravity-claude-proxy`). diff --git a/claude_setup.sh b/claude_setup.sh index 25f13ad..ede37f9 100755 --- a/claude_setup.sh +++ b/claude_setup.sh @@ -863,108 +863,18 @@ chmod +x "$HELPERS_FILE" # === claude_gpt === cat > "$BIN_DIR/claude_gpt" << 'GPTEOF' #!/usr/bin/env bash -source ~/.local/bin/claude_api_helpers.sh +# claude_gpt — запуск нативного OpenAI Codex -proxy_bin="$HOME/.local/bin/claude-code-proxy" -if [ ! -f "$proxy_bin" ]; then - echo "Ошибка: claude-code-proxy не найден. Перезапустите claude_setup.sh" +codex_bin="$HOME/.npm-global/bin/codex" +[ ! -f "$codex_bin" ] && codex_bin="$(command -v codex 2>/dev/null)" + +if [ -z "$codex_bin" ] || [ ! -f "$codex_bin" ]; then + echo "Ошибка: OpenAI Codex не найден." + echo "Установите: npm install -g @openai/codex" exit 1 fi -if ! "$proxy_bin" codex auth status &>/dev/null; then - echo "" - echo "Авторизация ChatGPT не найдена." - echo "Сейчас появится ссылка или откроется браузер..." - echo "" - if ! "$proxy_bin" codex auth login 2>&1; then - echo "Если браузер не открылся, попробуйте device flow: claude-code-proxy codex auth device" - exit 1 - fi -fi - -proxy_pid="" -wrapper_pid="" -effort_proxy="$HOME/.local/bin/claude-gpt-effort-proxy.py" - -cleanup() { - [ -n "$proxy_pid" ] && kill "$proxy_pid" 2>/dev/null - [ -n "$wrapper_pid" ] && kill "$wrapper_pid" 2>/dev/null -} -trap cleanup EXIT INT TERM - -# Всегда принудительно убираем старый effort-proxy (может висеть после краша) -pkill -f "claude-gpt-effort-proxy" 2>/dev/null -sleep 0.3 - -# Запускаем claude-code-proxy если не запущен -if ! pgrep -f "claude-code-proxy serve" &>/dev/null; then - PORT=18766 "$proxy_bin" serve &>/tmp/claude-code-proxy.log & - proxy_pid=$! - # curl exit 7 = connection refused; any other response means the port is alive - _j=0; while [ $_j -lt 10 ]; do sleep 1; curl -s --max-time 1 http://localhost:18766/ &>/dev/null; [ "$?" -ne 7 ] && break; _j=$((_j + 1)); done - if [ $_j -ge 10 ]; then - echo -e "\033[0;31m[ОШИБКА]\033[0m claude-code-proxy не запустился за 10 сек." - exit 1 - fi -fi - -# Запускаем effort-proxy (всегда свежий экземпляр) -python3 "$effort_proxy" 18766 18765 &>/tmp/claude-gpt-effort-proxy.log & -wrapper_pid=$! -_i=0; while [ $_i -lt 10 ]; do sleep 1; curl -s --max-time 1 http://localhost:18765/ &>/dev/null; [ "$?" -ne 7 ] && break; _i=$((_i + 1)); done -if [ $_i -ge 10 ]; then - echo -e "\033[0;31m[ОШИБКА]\033[0m claude-gpt-effort-proxy не запустился за 10 сек." - echo "Лог effort-proxy:" - cat /tmp/claude-gpt-effort-proxy.log 2>/dev/null - exit 1 -fi - -echo -n "Проверка авторизации ChatGPT... " -_claude_test_api "http://localhost:18765/v1/messages" "x-api-key: dummy" "gpt-5.4-mini" - -if [ "$_CLAUDE_TEST_CODE" != "400" ]; then - _handle_api_response "ChatGPT" "$_CLAUDE_TEST_CODE" "$_CLAUDE_TEST_BODY" "" - ret=$? - if [ $ret -eq 401 ]; then - "$proxy_bin" codex auth logout 2>/dev/null - if _claude_offer_reauth "ChatGPT"; then - "$proxy_bin" codex auth login || exit 1 - _claude_test_api "http://localhost:18765/v1/messages" "x-api-key: dummy" "gpt-5.4-mini" - [ "$_CLAUDE_TEST_CODE" != "200" ] && [ "$_CLAUDE_TEST_CODE" != "400" ] && { echo "ОШИБКА"; exit 1; } - echo -e "\033[0;32mOK\033[0m" - else - exit 1 - fi - elif [ $ret -ne 0 ]; then - exit 1 - fi -else - echo -e "\033[0;32mOK\033[0m" -fi - -_creds_file="$HOME/.claude/.credentials.json" -_creds_backup="" -[ -f "$_creds_file" ] && _creds_backup=$(cat "$_creds_file") - -echo -e "\033[0;33m[ИНФО]\033[0m Режим ChatGPT. Для выхода: Ctrl+C или /exit" -echo -e " Команда \033[1m/logout\033[0m выйдет из Anthropic, а не из ChatGPT." -echo "" - -ANTHROPIC_BASE_URL=http://127.0.0.1:18765 \ -ANTHROPIC_AUTH_TOKEN=dummy \ -ANTHROPIC_MODEL=gpt-5.5 \ -ANTHROPIC_DEFAULT_OPUS_MODEL=gpt-5.5 \ -ANTHROPIC_DEFAULT_SONNET_MODEL=gpt-5.5 \ -ANTHROPIC_DEFAULT_HAIKU_MODEL=gpt-5.4-mini \ -CLAUDE_CODE_SUBAGENT_MODEL=gpt-5.4-mini \ -CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 \ -claude "$@" - -if [ -n "$_creds_backup" ] && [ ! -f "$_creds_file" ]; then - mkdir -p "$(dirname "$_creds_file")" - echo "$_creds_backup" > "$_creds_file" - echo -e "\033[0;33m[ИНФО]\033[0m Anthropic credentials восстановлены." -fi +exec "$codex_bin" "$@" GPTEOF chmod +x "$BIN_DIR/claude_gpt" @@ -1215,7 +1125,7 @@ echo -e "${GREEN} Установка завершена!${NC}" echo -e "${GREEN}════════════════════════════════════════════════════${NC}" echo "" echo "Доступные команды (теперь это независимые скрипты в ~/.local/bin):" -echo -e " ${CYAN}claude_gpt${NC} — GPT-5.5 (ChatGPT Plus/Pro, браузерная авторизация)" +echo -e " ${CYAN}claude_gpt${NC} — OpenAI Codex (нативный CLI)" echo -e " ${CYAN}claude_deepseek${NC} — DeepSeek (API ключ сохраняется)" echo -e " ${CYAN}claude_kimi${NC} — Kimi K2.6 (Artemox API, ключ сохраняется)" echo -e " ${CYAN}claude_gemini${NC} — Gemini (Google OAuth через браузер)"