Destroy
Как worker сворачивается, когда агенту он больше не нужен. Жизненным циклом владеет orchestrator — а не LLM — поэтому teardown детерминирован и ничего не утекает.
Жизненный цикл: Deploy → Use → Destroy.
Состояния сессии
Строка в Postgres — AgentRuntimeSession — отслеживает живой рантайм; под не держит долговечного состояния:
pending → starting → running → idle → stopping → stopped
▲ │
└──────────┘ a follow-up turn reuses the session, resets the idle timerAgentRuntimeSession { agentId, taskId?, status, runtimeType, cpu/mem/storageLimit, ttlSeconds, k8sJobName, namespace, workerUrl, logsUrl, started/lastActivity/stoppedAt }.
Два выхода
| Триггер | Кто | Что происходит |
|---|---|---|
| Конец турна → idle | orchestrator | сессия помечается idle и остаётся тёплой, не убивается, чтобы следующий турн той же беседы её переиспользовал (без холодного старта) |
| Явный release | мозг (LLM) | когда работы заведомо больше нет (разовая задача, пользователь попрощался), мозг немедленно отправляет release по control-каналу |
LLM может выдать подсказку done для раннего release, но по умолчанию это происходит автоматически через reaper.
Idle-reaper
Реализован как delayed jobs BullMQ по ключу sessionId, перепланируются на каждом heartbeat:
- Light idle 60–120с → стоп · Heavy 30–60с · Browser жив до простоя браузера · Warm/премиум 10–30 мин.
- Следующий турн в окне переиспользует сессию и сбрасывает таймер.
- Пропавшие heartbeat'ы → Core помечает сессию
failedи гасит её (защита от зомби).
Очистка при стопе (порядок важен)
По истечении или при release, до того как Job исчезнет:
- Убедиться, что выходные данные выгружены из workspace в
system/file(объектное хранилище). - Стереть
emptyDir-workspace. - Удалить Job; установить
AgentRuntimeSession.status = stopped.
ttlSecondsAfterFinished — подстраховка для нормально завершённых Job; reaper закрывает idle- и зомби-сессии, которые не завершились чисто.
Жёсткие потолки (чтобы ничего не утекало)
activeDeadlineSeconds— жёсткий max execution time (RuntimeProfile.maxExecSeconds); runaway-рантайм гасится k8s.- Потолок max-idle — даже профиль Warm только расширяет окно idle; он никогда не отключает потолок.
- Аудит — каждая сессия логирует start/stop/tools/artifacts через
admin/audit.
А агент живёт дальше
Уничтожение worker'а не завершает агента. Мозг остаётся онлайн: он продолжает стримить пользователю, обрабатывает agent/cron и follow-up'ы и может вызвать свежий worker позже. Worker был лишь временным придатком; агент (строка в БД + цикл api) сохраняется.
См. также
- Deploy — provisioning, Job, runtime-профили.
- Канал инструментов — кадр
release, его окно на завершение и что значит молчание. - Use — модель сессии и control-канал, который несёт
release. - Implementation — build-промпт для этой подсистемы.
- Модель рантайма — поток одного турна от начала до конца.