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
claude_kimi now behaves like claude_deepseek:
- Prompts for Artemox API key if missing
- Validates key via _claude_test_openai_api
- Saves key to ~/.config/claude-launcher/kimi_key
- Starts claude-openai-anthropic-proxy.py locally
- Launches claude through the proxy with Anthropic env vars
- Add claude-openai-anthropic-proxy.py (Anthropic ↔ OpenAI translator)
- Rewrite claude_kimi to use native kimi CLI instead of Claude wrapper
- Add OpenAI-compatible API test helpers (_claude_test_openai_api, _handle_openai_api_response)
- Replace 127.0.0.1 with localhost for broader compatibility
- Add test for query-string handling in Kimi proxy
- Update README to reflect Artemox API usage
Три корневые причины и исправления:
1. effort-proxy: однопоточный HTTPServer заменён на ThreadingMixIn,
включён маппинг xhigh→high (claude-code-proxy больше не принимает xhigh),
добавлено логирование ошибок в /tmp/claude-gpt-effort-proxy.log
2. Стартовая логика claude_gpt: убрано гоночное условие (pkill прокси
при отсутствии effort-proxy), effort-proxy всегда перезапускается,
curl -s вместо curl -sf для healthcheck'а
3. localhost заменён на 127.0.0.1 во всех URL для консистентности
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Если python3 недоступен или JSON не парсится, _emsg пустой.
Теперь grep проверяет сырое тело ответа как запасной вариант.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
При вводе нового ключа ret=429 теперь обрабатывается так же, как для
сохранённого ключа: ключ сохраняется, затем предлагается продолжить всё равно.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Thinking-модели (DeepSeek, Kimi) возвращают 400 на max_tokens=1 при проверке ключа.
Новый case обрабатывает это: RESOURCE_EXHAUSTED → return 429, иначе → OK.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Anthropic SDK отправляет ключ в заголовке x-api-key, а не Authorization: Bearer.
Проверочные запросы теперь используют тот же заголовок, что и реальные вызовы.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Правило 1 упрощено — убрана явная оговорка про git add.
Добавлено правило 3: изменения должны быть видны через plain git diff.
Добавлено правило 4: отвечать на русском языке.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Fix effort-proxy direction: GPT-5.5 natively supports xhigh but not max,
so map max→xhigh (was incorrectly xhigh→max)
- Add EFFORT_MAPPING.md with full mapping table for all providers:
Anthropic, GPT-5.5, DeepSeek V4, Kimi K2.6, Gemini 3.x
- Update proxy docstring and comments
- Add wrapper proxy for fixing effort level in claude-code-proxy
- Improve proxy cleanup trap to include wrapper
- Add credential backup and restore for ChatGPT to prevent Anthropic keys deletion on /logout
- Enhance error messages for 400 and other HTTP errors in ChatGPT and Gemini handlers
В Claude Code v2.x команда "claude auth login" запускает полный интерактивный TUI
(включая "Welcome to Claude Code" и "Select login method"), а затем функция дополнительно
вызывала claude "$@" — вторая сессия. Пользователь проходил выбор типа аккаунта дважды.
Исправление: ветка [L] теперь запускает claude "$@" напрямую с нужными моделями
и сразу делает return "$?", не допуская повторного вызова claude снизу функции.
Claude сам обрабатывает весь auth flow (браузер → OAuth → выбор аккаунта) за одно
взаимодействие.
Добавлен тест test_fix8_no_double_login (3 проверки), итого 24/24.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Fix 1: export ANTHROPIC_API_KEY при ручном вводе ключа в claude_anthropic ([K]-ветка);
без export subprocess claude не видел ключ и падал с ошибкой авторизации
- Fix 2: trap RETURN в claude_gpt убивает прокси при любом ранем return 1,
устраняя утечку фоновых процессов
- Fix 3: sleep 1 заменён на poll-цикл (10 попыток, curl exit 7 = connection refused);
connection refused теперь не маскируется под «нет сети»
- Fix 4: после codex auth login в claude_gpt добавлена повторная проверка _claude_test_api;
прежде claude запускался без подтверждения успешности reauth
- Fix 5: аналогичная re-валидация в claude_gemini после браузерной авторизации
(ветки 401/403 и 429)
- Fix 6: prompt [c/Q] → [C/q] в 429-обработчике claude_anthropic — заглавная буква
соответствует умолчанию (стандарт файла: CAPITAL = default)
- Fix 7: trap 'rm -rf "$TMP"' EXIT — одинарные кавычки + кавычки вокруг $TMP,
предотвращают word-split при путях с пробелами
Добавлены тесты: tests/test_fixes.sh (21 тест, все проходят)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Новая функция claude_kimi: Anthropic-совместимый API Moonshot AI
- Улучшена проверка ключей DeepSeek и Kimi: реальный вызов API
с 1 токеном вместо GET /v1/models (бесплатный endpoint не ловил
заблокированные аккаунты)
- Проверка различает: 200 (OK), 429 (заблокирован/нет средств),
401/403 (невалидный ключ), сетевые ошибки
- При блокировке (429) выводится сообщение об ошибке и ссылка
на пополнение баланса, ключ не сохраняется
- Обновлён README.md
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- claude_setup.sh: обновлён эндпоинт DeepSeek API (/v1/models вместо /anthropic/v1/models),
исправлена аутентификация (Authorization: Bearer вместо x-api-key),
обновлены модели (deepseek-v4-pro, deepseek-v4-flash),
убрано предложение сделать ,
добавлен авто-перезапуск shell после выполнения скрипта
- CLAUDE.md: правила для агентов (запрет самостоятельных коммитов)
- test_interactive.py: тест обработки SIGINT в интерактивном bash (PTY)
- test_sigint.sh: тест сигналов для фоновых процессов
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>