Codex Подписка и шлюз
SubLane Руководство: подписки на кодекс и шлюз.
С персональным ключом готов, настройте клиента ниже. Если у вас его нет, заполните Первая просьба Или попросите администратора войти в систему.
Конфигурация клиента
Создайте персональный API ключ в API-ключи.Использовать источник экземпляра плюс /v1 как базовый URL. Настройте идентификатор модели, возвращенный GET /v1/models.
Настройка SUBLANE_API_KEY в среде клиентского процесса. Объединение следующих настроек в пользовательский уровень ~/.codex/config.tomlЗаменить существующие значения:
model = "<model-id-from-your-account>"
model_provider = "sublane"
[model_providers.sublane]
name = "SubLane"
base_url = "http://127.0.0.1:8080/v1"
env_key = "SUBLANE_API_KEY"
wire_api = "responses"
requires_openai_auth = false
supports_websockets = trueИспользуйте фактический URL вашего экземпляра. HTTPS Для развертывания сети. HTTP/SSE транспорт, комплектация supports_websockets = false. Codex CLI и рабочий стол должны считывать предполагаемую конфигурацию пользовательского уровня.Рабочее приложение, которое уже работает, не автоматически наследует переменные среды, экспортируемые в другой терминал; перезагрузите его в среде, где ключ доступен.
The API Страница ключей предоставляет фрагмент конфигурации без встраивания или сохранения секрета. CC Switch импорт который передает выбранный ключ в локально установленное приложение после явной подготовки. CC Switch генерирует свой собственный Codex конфигурация файла аутентификации; она не сохраняет переменную среду или WebSocket Настройки в ручном фрагменте выше. расширенная конфигурация и аутентификация Руководство по конфигурации клиента и хранению учетных данных.
Каталоги учетных записей кэшируются и перезагружаются.Обнаружение, агрегация пула и выбор учетных записей с учетом моделей описаны в каталоги моделей.
После установки: Отправьте сообщение и проверьте ответ, затем продолжайте Ежедневное использованиеПодробности учетной записи, квоты и протокола ниже являются ссылками на более поздние сроки.
Добавить аккаунт
Зарегистрируйтесь в качестве администратора, откройте Счетаи выбрать Добавить аккаунтЧлены не могут получить доступ к конечным точкам управления подпиской или учетным данным.
- Авторизация браузера: Назовите учетную запись, начните авторизацию и откройте OpenAI После входа, скопируйте полный текст
http://localhost:1455/auth/callback?...адрес из адресной строки браузера и вставить его в SubLaneОшибка подключения к локальному хосту в этот момент ожидается: SubLane Этот поток ручного возврата работает для локальных и удаленных развертываний. - Импорт auth.json: выбрать Codex файл учетных данных подписки или вставить его JSONОба вложены в CLI
tokensСтруктура и плоскость Codex Формат токена принимается. API Ключи отклоняются. SubLane никогда не сканирует локальные каталоги клиентов; он читает только контент, явно представленный администратором.
Авторизация учетной записи / импорт автоматически открывает модель. Проверить соединение обновить и сохранить модельный каталог учетной записи или открыть Модели Импортные учетные данные показывают Не проверено До успешного использования. Меню учетной записи обеспечивает включение/отключение, повторную авторизацию и удаление. Повторная авторизация должна сохранять ту же личность учетной записи. Удаление учетной записи удаляет сохраненные учетные данные из SubLane; он не отменяет сам вход в ChatGPT.
Codex Открытие модели отправляет эффективную клиентскую версию экземпляра в заголовки запросов и запросов каталога. Администрирование: Системные настройкиЭксплицитная версия имеет приоритет над последней синхронизированной официальной стабильной версией. 0.155.1 Автоматический выпуск проверяет по умолчанию каждые шесть часов. Это изменяет метаданные протокола без установки Codex Обновление встроенного SDK; см. Системные настройки.
Каталог восходящего потока зависит от этой версии: устаревшая версия может вернуться HTTP 200 с только скрытыми моделями или частичным видимым каталогом, создающим пустой или неполный /v1/models Пересмотренные каталоги включают фактическую версию обнаружения, поэтому изменение эффективной версии вызывает обновление следующего запроса на чтение каталога или модели, даже когда их временные метки остаются свежими. Изменение разрешений пула не решает эту проблему совместимости.
OAuth Попытки использовать PKCE, 256-битное случайное состояние, десятиминутный срок действия, одна активная попытка на сеанс браузера администратора и максимум восемь отложенных попыток. Обратный вызов связан с сеансом, который начал его и потреблял до обмена его кодом. Закрытие формы требует отмены; истечение является запасным вариантом после потери соединения. OAuth Состояние держится только в памяти.
Использование подписки
Страница аккаунтов показывает окна квоты, оставшийся процент, время до сброса и время наблюдения активных аккаунтов Codex, включая дополнительные ограничения моделей. Количество карт отдельно: неизвестное значение отличается от явного нуля. Список и необязательное использование описаны в разделе Карты сброса. Пропуски остаются неизвестными; ошибка сохраняет старый снимок с предупреждением. Наступление времени сброса не доказывает восстановление: обновите использование.
Адаптер использования читает https://chatgpt.com/backend-api/wham/usage и отдельной https://chatgpt.com/backend-api/wham/rate-limit-reset-credits конечная точка, соответствующая официальный Codex клиентский сервер. Оба запроса используют учетные данные выбранной учетной записи, существующего владельца обновления / повторного использования, ограниченного входа шлюза, общего 20-секундного срока и 128 KiB, связанного за ответ. Если запрос детали сброса карты не выполняется или опускает счет, квота остается доступной и любое действительное количество из ответа на использование сохраняется. Только нормализованные поля квоты и счет возвращаются; сырые метаданные вверх по течению, идентификаторы карт и учетные данные исключены. Этот бэкэнд-контракт может развиваться независимо от того, SubLane.
Консолидированная схема хранит одну ограниченную, нормализованную квоту и снимок карты сброса на счет в SQLiteСнимки включают в себя последнее успешное время наблюдения и перезагрузку процесса; удаление каскадов учетной записи до ее снимка. Процесс сохраняет не более 100 записей снимка в памяти и лениво перезагружает их из SQLiteНикакие учетные данные или необработанные ответы провайдера не хранятся в этой таблице.
GET /api/accounts/{id}/usage возвращает свежий снимок на срок до двух минут (или до сообщения о предстоящей сбросе, если это произойдет раньше). Истекший снимок возвращается немедленно с stale и refreshing Флаги во время обновления фона. Первый приём без снимка ждёт результата. POST /api/accounts/{id}/usage/refresh обходит свежесть и ждет общего обновления, соблюдая пятисекундное охлаждение. Оба маршрута требуют включенного сеанса администратора; POST также требует существующего происхождения /JSON чеки.
Конкурентные абоненты для одной и той же учетной записи используют одну операцию восходящего потока. Рефренши используют настроенную ёмкость пространства (по умолчанию 128, SUBLANE_GATEWAY_CAPACITY) и 45-секундный общий крайний срок, выживают при отключении отдельного браузера и отменяются / ожидаются во время отключения процесса. Неудачное обновление сохраняет предыдущие значения и временную метку, отмечает их несвоевременным и отступает на 30 секунд (или более длительный действительный восходящий поток Retry-After, до одного часа). Насыщение приема использует пятисекундную задержку повторного использования. Кэш все еще проверяет существование учетной записи и включение. Переходное состояние отказа / отключения является локальным процессом; последний успешный снимок является долговечным.
Браузер сохраняет свой одноминутный период свежести запроса. Он опрашивает локальную конечную точку снимка один раз в секунду только в то время, когда обновление активировано, останавливается по завершении или сетевой ошибке. Страница не периодически опрашивает провайдера во время простоя. Распределение по акциям использовать сконфигурированный токен или внутренний USD Бюджеты и расходы, сообщенные об использовании запроса напрямую. Отдельные временные метки наблюдения и время отклика сервера, поэтому восстановленный снимок не перезапускает обратный отсчет сброса. Отключенные учетные записи не запрашиваются. Модельный трафик также нагревает общий кэш квоты без ожидания. Свежий основной лимит исчерпания исключает учетную запись из нового выбора; связанные разговоры возвращают отказ от конкретной квоты. Ограничения использования в верхнем потоке описывают подписку, а не ресурсное ограничение использования участника. См. Выбор с учетом квот.
Карты сброса
Администраторы рабочего пространства могут просматривать и использовать карты активных аккаунтов Codex, которым не нужна повторная авторизация. Участники не могут ими управлять. Использование по расписанию и при исчерпании квоты по умолчанию выключено. Просмотр и обновление списка не расходуют карты.
Настройка и использование
- Откройте Аккаунты и настройки сброса на карточке аккаунта Codex. Проверьте список, доступное количество и время наблюдения. Неизвестное количество не равно нулю.
- Включите расписание, использование при исчерпании квоты или оба режима. Для однократного запуска задайте будущие дату и время, для ежедневного — время, для еженедельного — день недели и время. Проверьте часовой пояс экземпляра.
- Сохраните общий дневной лимит (1–100, по умолчанию 1). Проверьте подтверждение и время следующего запуска при включённом расписании.
- Для ручного использования сначала сохраните изменения, затем выберите использование одной карты сейчас. Попытка использует не более одной карты. Результат отображается в истории; открытие настроек не запускает погашение.
Список и приоритет срока действия
Список показывает название, статус, время выдачи и срок действия. Различаются доступные, погашаемые, использованные, просроченные, неизвестные и неподдерживаемые карты; исходные ID не отображаются. Метка следующей карты описывает автоматический выбор, ручного выбора нет. При неподтверждённом результате метка скрыта. Положительное количество не гарантирует наличие подходящей карты.
Каждая новая ручная, плановая или вызванная исчерпанием попытка перечитывает список и явно передаёт credit_id. Подходят только доступные, поддерживаемые и непросроченные карты. Сначала используется ближайший срок действия, карты без срока идут последними. При равном сроке выбирается более ранняя выдача, затем стабильный порядок ID. Без подходящей карты или подтверждённого списка погашение пропускается; выбор не передаётся провайдеру по умолчанию. Ошибка первой загрузки отличается от пустого списка. При ошибке обновления остаётся прежний список с предупреждением; повторите обновление карт.
Расписание и ограничения
Исчерпание проверяется в фоне примерно раз в минуту. Нужны свежие данные, известное положительное количество карт и явный отказ по основной квоте. Значение 100%, неизвестные данные или сетевая ошибка сами по себе не запускают использование. Ручные и плановые попытки также требуют свежих данных и известного положительного количества.
Все режимы делят дневной лимит по местной дате экземпляра; успешные и неподтверждённые попытки занимают места. Отключённые аккаунты и аккаунты с необходимостью авторизации пропускаются. Запуски, опоздавшие более чем на пять минут, не восполняются. Несуществующее время при переходе на летнее время пропускается, повторный час даёт один запуск на местную дату. Смена пояса пересчитывает будущие запуски. Закрытие браузера не останавливает фоновые процессы. В демо нет автоматизации и погашения.
Результаты и восстановление
| Ситуация | Действие |
|---|---|
| Нет подробностей или подходящих карт | Обновите список, проверьте статус и срок. Без подтверждённого выбора карта не расходуется. |
| Квота неизвестна или недоступна | Обновите использование и устраните проблемы связи или авторизации. |
| Дневной лимит достигнут | Дождитесь следующей местной даты либо осознанно повысьте и сохраните лимит. |
| Результат не подтверждён | Проверьте ожидающий результат. Новые попытки блокируются до подтверждения. |
Провайдер определяет право использования и сбрасываемые окна. Погашение вызывает POST /backend-api/wham/rate-limit-reset-credits/consume; распознаются reset, already_redeemed, nothing_to_reset, no_credit. Успех обновляет квоту и количество карт, не снимая другие ограничения шлюза и не гарантируя снятие всех ограничений.
До отправки сохраняются redeem_request_id и ID выбранной карты. Тайм-аут или неизвестный ответ оставляет результат неподтверждённым. Проверка повторяет оба значения даже при изменении списка или срока; изменение количества не доказывает успех. Старые неподтверждённые запросы сохраняют исходное отсутствие credit_id. После окончательного результата выбранный ID удаляется и не попадает в снимки квоты, публичную историю или аудит. Учётные данные, исходные ответы и профили провайдера не записываются. Удаление аккаунта удаляет настройки и историю.
Браузерные API администратора: GET /api/accounts/{id}/resets — настройки и история, GET /api/accounts/{id}/resets/cards — нормализованный список, PUT /api/accounts/{id}/resets — сохранение, POST /api/accounts/{id}/resets/consume или POST /api/accounts/{id}/resets/retry — использование или проверка. Нужны браузерная сессия и роль рабочего пространства; ключи шлюза не подходят. Чтение использует проверки учётных данных, прокси и жизненного цикла, исключая идентификаторы профиля, URL аватаров и исходные ответы. Внутренний контракт может меняться; синтетические тесты не подтверждают реальную допустимость и успешное погашение.
Изменения и успешные ручные операции попадают в аудит; автоматические результаты хранятся в ограниченной истории.
Полное хранение и обновление
Консолидированная схема создает учетные записи подписки, связанные с рабочим пространством, и ограниченные учетные записи. Токены доступа, обновления и ID шифруются с помощью AES-256-GCM и аутентифицированных данных, связанных с учетной записью. В экземпляре создается приватная 32-байтная информация. credentials.key Ключ не является установочным паролем и не требует ручного ввода.
Резервное копирование базы данных и credentials.key Существующая база данных аккаунта не будет начинаться с отсутствующего, недействительного или несоответствующего ключа. Не заменяйте ключ для восстановления доступа. Шифрование защищает содержимое учетных данных в копии только для базы данных; доступ как к базе данных, так и к ключу позволяет дешифровать.
SubLane Это единственный владелец обновления. Он сериализует обновление учетных данных с изменениями администратора и сохраняет повернутые токены перед публикацией их в запросы. Токены, близкие к истечению срока действия, перед использованием. Верхний 401 разрешает одно обновление и одно повторение в одной учетной записи; одновременные отказы от старого повторного использования уже обновленных учетных данных. Более старые результаты в полете не могут аннулировать более позднее обновление или повторное авторизацию.
Контракт с Gateway
Все маршруты требуют наличия SubLane Ключ на предъявителя, независимо от файлов cookie браузера:
| Маршрут | поведение |
|---|---|
GET /v1/models | Возврат дублированных идентификаторов нативных моделей из существующих каталогов счетов в пуле и его политика |
POST /v1/responses | Responses JSON или SSE используя запрошенные stream устанавливать |
POST /v1/responses/compact | Нетранслируемый Codex уплотнения |
GET /v1/responses с WebSocket модернизировать | Responses повороты, локальное предварительное потепление, постепенная реконструкция ввода и компактная замена транскрипта |
POST /v1/chat/completions | SDK перевод в/из выбранного протокола провайдера |
HTTP Запросы должны включать полный ввод. HTTP previous_response_id Вместо того, чтобы молча терять контекст, он отвергается, потому что Codex HTTP Бэкэнд не имеет гражданства. WebSocket Продолжения используют ограниченную, локальную историю соединения; неизвестные идентификаторы продолжения требуют полного ввода транскрипта. WebSocket Поворот перепроверяет ключ и включение члена. Отозванный ключ не может начать новый поворот на существующем соединении.
Сродство к учетной записи ограничено ключом участника, пула и клиентского сеанса / оперативного кэша, сохраненным в течение 24 часов активности и ограниченным 4096 связываниями. Нативные запросы используют одно связывание между поставщиками; явные запросы на унаследованный префикс сохраняют связывания с конкретными поставщиками. Новые сеансы распределяются по соответствующим учетным записям, сообщающим о запрашиваемой модели в своем пуле, соблюдая параллель между учетными записями и охлаждение. Безсессионные запросы выбирают независимо, не создавая сходства. Существующие сеансы терпят неудачу, когда их учетная запись отключена или удалена, вместо того, чтобы переключать идентификацию по потоку. Для преднамеренного изменения модели полная портативная история может выбрать вспомогательную учетную запись, если исходная учетная запись не может обслуживать новую модель; продолжения провайдера остаются прикрепленными. модель маршрутизацииПерезагрузите разговор после того, как другая умышленная учетная запись изменится. Повторная обработка запроса никогда не перемещает его на другую учетную запись автоматически.
По умолчанию на пространство доступны 128 операций, включая ожидание и общие метаданные, восемь подключений WebSocket, 30 минут на запрос или ход и пять минут ожидания заголовков модели. Запрос и восстановленный контекст ограничены 128 MiB, ответ и событие — 8 MiB каждый. Чтение тела ограничено 30 секундами, общее обнаружение моделей — 45 секундами. Это пределы ресурсов, а не гарантии производительности. См. развёртывание и работу групп. Лимиты участников: управление командой.
Учетные данные провайдера, файлы cookie браузера, произвольные заголовки клиентов и тела ошибок провайдера не пересылаются членам. Ключи на предъявителя клиента заменяются выбранными учетными данными восходящего потока. Приложение не регистрирует подсказки, ответы, токены доступа, токены обновления или OAuth URL-адреса обратного вызова.
Контрольная граница
Автоматизированные тесты используют временные базы данных, синтетические учетные данные и местные поддельные источники. OAuth право собственности / истечение / воспроизведение, шифрование и несоответствие ключей, сериализация обновления, неизменная идентификация, близость к учетной записи, изоляция роли / собственности, отмена потоковой передачи, SSE Ремонт завершенный, и WebSocket Отмена между поворотами.
Тест на интеграцию Opt-in запускает установленный Codex CLI со свежим домом для детей, без унаследованных учетных данных и местной синтетической моделью ответа:
SUBLANE_TEST_CODEX=1 go test ./internal/server -run TestCodexCLIProtocol -count=1 -vCodex CLI 0.152.1 прошел оба HTTP/SSE и WebSocket Реальные режимы против синтетического восходящего потока. Фактические авторизации подписки и запросы живой модели требуют явно авторизованной тестовой учетной записи. Настоящее настольное приложение еще не было проверено; одни только общие тесты конфигурации и протокола не устанавливают совместимость с рабочим столом в реальном времени.
Перед обновлением v7 локальный предварительный просмотр macOS arm64 (CLIProxyAPI v6.10.9, Go 1.26.0, производственный двоичный, один зашифрованный синтетический аккаунт) измерял 23 376 KiB RSS, примерно 22,8 MiB, после примерно двенадцати минут простоя на 2026-09-19. Это только праздное наблюдение; реальные модели, параллелизм, размер полезной нагрузки и использование памяти для изменения платформы. Docker Compose Конфигурация подтверждена локально, но Docker Деймон был недоступен для создания местного изображения.
Ссылка на исполнение
SubLane использует публичных исполнителей и переводчиков CLIProxyAPI v8.0.35 internal/upstream. SubLane владеет авторизацией, зашифрованным хранилищем учетных данных, обновлением, выбором учетной записи и публичным шлюзом. SDK работает как частный реестр исполнителей без живых учетных данных, без опционного наблюдателя, заблокированных маршрутов обратной связи и автоматического отключения обновления. архитектура Для границы исполнения и настройка провайдера для шагов подключения провайдера.Данные авторизации и квоты этого руководства описывают Codex.