Codex stream disconnected before completion: как найти причину обрыва

Как разобраться с обрывом Codex по полному сообщению, событиям ответа, истории сессии и сетевому маршруту, прежде чем повторять действия.

Обложка на тёплом сером фоне: светлая бумага с линейным рисунком с электрической вилкой и шнуром, геометрические акценты и заголовок Codex Stream Errors.

stream disconnected before completion означает, что ответ Codex не завершился ожидаемым образом. Единственной универсальной причины у этого сообщения нет. Прочитайте продолжение ошибки, установите транспорт SSE или WebSocket и отделите явную ошибку квоты либо контекста от соединения, закрывшегося до события завершения.

До повтора проверьте изменённые файлы и действия инструментов. Обрыв ответа не означает откат уже выполненных команд. Руководство рассчитано на пользователей Codex и разработчиков, работающих с Responses-совместимыми конечными точками. Оно основано на официальной документации и просмотре исходников 14 сентября 2026 года; ваш конкретный инцидент мы не воспроизводили.

Смотрите на продолжение сообщения

Текущий SSE-парсер Codex различает незавершённый поток и записанные конкретные ошибки. Общий вариант «закрыто до завершения» не доказывает, что виноват интернет пользователя.

НаблюдениеЧто установленоЧто проверить первым
Закрытие до response.completedНормальное завершение не наблюдалосьЛоги транспорта, сервера и посредников
response.failed с кодомПровайдер сообщил конкретный сбойРеальный код и текст ошибки
response.incompleteПолучено явное событие неполного ответаincomplete_details.reason
SSE idle timeoutСобытий не было в течение заданного интервалаЗадержки upstream и тайм-ауты посредников
Сервер закрыл WebSocketЗафиксировано закрытие WebSocketПоддержку маршрута и подробности закрытия

Читаемый частичный ответ не подтверждает завершение. Документация стриминга различает текстовые события и жизненный цикл ответа. response.output_text.done завершает текстовую часть, но не заменяет сигнал завершения всего ответа.

Сохраните результат до повторного запуска

Просмотрите diff, вывод терминала и состояние начатых внешних действий. Инструмент может завершиться, хотя финальный ответ модели не дошёл до интерфейса. Для операций с побочными эффектами проверьте объект назначения или журнал исполнения перед повтором.

Не предполагается ни гарантия exactly-once при автоматическом повторе, ни бесплатность запроса, который выглядит неудачным. Это зависит от операции и провайдера. При продолжении задачи сообщите, что уже подтверждено и что неизвестно, чтобы агент не повторял каждый шаг вслепую.

Для диагностики начните новую сессию с короткой задачей только на чтение, сохранив модель и маршрут. Если она проходит, а старая сессия нет, проверьте длину истории, сжатие и последовательность инструментов. Само различие ещё не доказывает конкретный баг клиента.

Разбирайте явные ошибки отдельно

Справочник API-ошибок разделяет аутентификацию, доступ, лимиты частоты и серверные сбои. Читайте тело ответа: не каждый обрыв стоит повторять как сетевую ошибку.

Отсутствующая модель или неверный маршрут разобраны в руководстве model-not-found (на английском). Лимит подписки отличается от баланса API и ограничения частоты за временной интервал. Периоды учёта лимитов описывает руководство по лимитам Codex. Увеличение сетевого тайм-аута не устраняет явно указанную квоту.

context_length_exceeded тоже не равно бездействующему соединению. Управляйте контекстом через поддерживаемые функции клиента и сохраняйте важное состояние задачи. Пустая сессия помогает проверить различие, но не объясняет, какая история была в исходном запросе.

Проверьте фактический сетевой путь

Запишите имя хоста конечной точки, настройки прокси, версию клиента и транспорт. SSE и WebSocket — разные пути: прокси для обычного HTTPS может иначе ограничивать время соединения и WebSocket. Если доступны, сопоставьте клиентские логи, логи шлюза и upstream.

Для сравнения используйте стандартный сетевой путь, одобренный организацией. Не отключайте TLS-проверку или защитные средства ради успешного теста. При ошибке сертификата исследуйте цепочку сертификатов.

Отметьте, происходит ли обрыв после одинакового периода без событий, лишь на одном маршруте или на этапах с множеством вызовов инструментов. Такие закономерности подсказывают следующий тест, но без дополнительных наблюдений не доказывают вину провайдера, прокси или клиента.

Тайм-аут бездействия и повторы — разные настройки

Текущий справочник конфигурации Codex различает stream_idle_timeout_ms, stream_max_retries и request_max_retries у собственного провайдера. На дату проверки документированы значения по умолчанию 300 000 миллисекунд, пять повторов потока и четыре повтора запроса соответственно. Потоковые настройки описаны для SSE; нельзя считать, что они управляют любым сбоем WebSocket.

Idle timeout измеряет отсутствие активности в потоке, а не максимальную длительность всей задачи. Его увеличение не запрещает серверу или посреднику закрыть соединение по другой причине. Меняйте значение, только если наблюдения указывают на этот тайм-аут и upstream поддерживает более долгое ожидание.

Найти действующую конфигурацию поможет руководство config.toml (на английском). Настройка неиспользуемого профиля не меняет текущую сессию. Не копируйте непроверенный переключатель, якобы отключающий WebSocket во всех версиях Codex.

Подготовьте полезный отчёт об инциденте

Сохраните время начала и сбоя, ОС, версию, транспорт, hostname, полный суффикс ошибки и request/response ID. Добавьте результат новой сессии, факт выполнения инструментов и минимальную безопасную задачу для воспроизведения.

Перед отправкой удалите секреты, cookies, файлы аутентификации и приватное содержимое репозитория. Старые issues могут помочь сопоставлению, но проверяйте дату и статус. Codex issue 4302 — закрытый исторический отчёт, не доказательство существования прежней неисправности сегодня.

Частые вопросы

Эта ошибка всегда означает проблему сети?

Нет. Префикс обозначает незавершённый ответ. Продолжение сообщения, событие жизненного цикла и ошибка провайдера помогают отличить соединение от явного отказа запроса.

Можно безопасно попросить Codex повторить всё?

Сначала проверьте уже выполненное. Изменения файлов и внешние операции могли завершиться до обрыва. Не считайте их автоматически отменёнными.

Достаточно увеличить idle timeout?

Только если подтверждён именно этот тайм-аут и маршрут допускает ожидание. Изменение не исправляет квоты, контекст или закрытие соединения сервером по другой причине.

Часто задаваемые вопросы

Эта ошибка всегда означает проблему сети?
Нет. Префикс обозначает незавершённый ответ. Продолжение сообщения, событие жизненного цикла и ошибка провайдера помогают отличить соединение от явного отказа запроса.
Можно безопасно попросить Codex повторить всё?
Сначала проверьте уже выполненное. Изменения файлов и внешние операции могли завершиться до обрыва. Не считайте их автоматически отменёнными.
Достаточно увеличить idle timeout?
Только если подтверждён именно этот тайм-аут и маршрут допускает ожидание. Изменение не исправляет квоты, контекст или закрытие соединения сервером по другой причине.