Skip to content

RU codex docs agent runtime execution

rkfsociety edited this page Oct 21, 2026 · 1 revision

Лимиты времени и отмена Agent Runtime

AgentRuntime отделяет ограничения времени выполнения провайдера от истечения блокировки проекта. run_timeout_seconds — необязательный положительный конечный бюджет, измеряемый монотонными часами. Значение по умолчанию None разрешает неограниченный запуск провайдера. В run(..., cancel_event=...) необязательно передаётся threading.Event для кооперативной отмены.

При достижении дедлайна или отмене возникает AgentRunDeadlineExceeded или AgentRunCancelled; оба исключения наследуются от AgentRuntimeError. Проверка выполняется до и после шагов провайдера, перед вызовами инструмента и пока удерживается блокировка команды. Атомарная команда Core, уже допущенная к выполнению, может завершиться; после отмены новые команды не принимаются.

Ожидание провайдера и блокировки команд

Вызовы провайдера выполняются в фоновых daemon-потоках, чтобы основной защищённый вызов мог перестать ждать синхронный вызов, зависший без ответа. Рассуждение провайдера, read-only инспекция и просмотр viewport не требуют блокировки на изменение или heartbeat. Поздний ответ провайдера не содержит исполняемых CADYX-обработчиков и не может изменить проект.

Перед каждой командой execute_command Runtime немедленно возобновляет новую блокировку агента с защитой ревизии, на время команды включает heartbeat и выполняет её с проверкой ожидаемой ревизии и владельца-агента. Затем heartbeat останавливается, а CadyxCore.stop_agent проверяет и освобождает блокировку. Последовательные команды, в том числе команды одного ответа провайдера, используют разные блокировки.

Неудачное возобновление не трогает блокировку другого владельца. Явная инспекция проекта обновляет ожидаемую Runtime ревизию. Если после неё документ меняет другой редактор, возобновление возвращает REVISION_CONFLICT, и команда агента не допускается к запуску.

Очистка и приоритет ошибок

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

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

Тесты tests/test_agent_runtime.py проверяют, что во время ответа провайдера проект разблокирован; команды получают независимые блокировки; обнаруживаются конкурирующий редактор и устаревшая ревизия; отмена во время команды работает; ошибки очистки обрабатываются с правильным приоритетом; состояние восстанавливается после прерванной остановки.

Clone this wiki locally