Skip to content

Destroy

Как worker сворачивается, когда агенту он больше не нужен. Жизненным циклом владеет orchestratorа не LLM — поэтому teardown детерминирован и ничего не утекает.

Жизненный цикл: DeployUseDestroy.

Состояния сессии

Строка в Postgres — AgentRuntimeSession — отслеживает живой рантайм; под не держит долговечного состояния:

pending → starting → running → idle → stopping → stopped
                       ▲          │
                       └──────────┘  a follow-up turn reuses the session, resets the idle timer

AgentRuntimeSession { agentId, taskId?, status, runtimeType, cpu/mem/storageLimit, ttlSeconds, k8sJobName, namespace, workerUrl, logsUrl, started/lastActivity/stoppedAt }.

Два выхода

ТриггерКтоЧто происходит
Конец турна → idleorchestratorсессия помечается 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 исчезнет:

  1. Убедиться, что выходные данные выгружены из workspace в system/file (объектное хранилище).
  2. Стереть emptyDir-workspace.
  3. Удалить 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-промпт для этой подсистемы.
  • Модель рантайма — поток одного турна от начала до конца.