Перейти к содержимому

Модуль II — живая работа и сессии

Модуль II — это представление живой работы estate: что каждая сессия агента делает прямо сейчас, её живые суммарные токены и стоимость, выводимое состояние Claude Code и реконструируемая временная шкала. Тогда как модуль I (инвентаризация) материализует устойчивый estate, модуль II ведёт живое операционное наложение на каждую сессию поверх того же потока наблюдений — и показывает только то, что этот поток честно несёт.

Olivares 0.4 также запускает официальные CLI провайдеров как собственных потомков под профилем провайдера. Этот управляемый путь — тот же модуль. Он не заменяет наложение и не сливает два home, которые объявляют один и тот же id сеанса провайдера (CHANGELOG.md [26.9.0] B1/B2).

Модуль II — управляемый шиной модуль слоя Core, родственный инвентаризации. Он ведёт живую запись с ключом по внешней ссылке каждой сессии, построенную из совместного потока наблюдений — никогда не опрашиваемую, никогда не сфабрикованную. На каждую сессию он отслеживает:

  • текущее действие (последний использованный инструмент) и ресурс/режим, которого оно коснулось;
  • живые суммарные токены и стоимость, считываемые из выборок стоимости (канонический ledger стоимости и FinOps — это модуль XI, а не здесь; это только живая цифра);
  • выводимое состояние Claude Code (cc_state); и
  • временную шкалу, к которой каждое наблюдаемое событие добавляется в порядке приёма.

Модуль регистрирует две сущности в области арендатора. sessions.live хранит живую запись на каждую сессию — текущее действие/ресурс/режим, ссылку на модель, живые входные/выходные токены, живую стоимость, счётчики событий и вызовов инструментов, а также метки времени первого/последнего события. sessions.timeline хранит одну воспроизводимую строку на каждое событие, упорядоченную по приёму. Столбца с хранимым жизненным циклом нет: совместный поток не несёт сигнала о завершении или сбое, поэтому единственный честный признак активности — выводимое cc_state.

cc_state выводится во время чтения из недавности событий — active / idle / ended — и переходит в состояние скрытого уклонения, когда коннектор поднимает эту находку (модуль никогда не записывает его сам). Чтения обслуживаются под маршрутами модуля (живой список, одна сессия, временная шкала на сессию) плюс живой поток SSE; каждое чтение требует разрешения на чтение сессии, а открытие потока автоматически проходит аудит. Канал SSE строго изолирован по арендатору (клиент получает только снимки для своего авторизованного арендатора) и работает по принципу наилучших усилий (медленный клиент пропускает промежуточный кадр и получает следующий — приём никогда не блокируется).

Профиль провайдера — устойчивая идентичность одного настроенного экземпляра провайдера в одной среде выполнения: драйвер, среда и канонические config_home / user_home. Это не аутентифицированная учётная запись провайдера. Регистрация, переименование, отключение/включение и вывод живут под /v1/m/sessions/provider-profiles. Пути появляются только на admin-чтении configuration. Запуск называет provider_profile_ref; сервер разрешает homes и сохраняет несекретный снимок на run до spawn (CHANGELOG.md [26.9.0] B1; web/src/features/agentops/types.ts).

Наблюдение складывается в живую строку своего канала, который сервер вычисляет из регистрации источника, проштампованной хостом (CHANGELOG.md [26.9.0] B2):

Channel Meaning
legacy no registration
observed a source dedicated to a profile by a binding approved at host admission for the exact applied revision
source a known registration with no verifiable profile
managed a run the plane launched; the only row carrying canonical_sid and run_ref

Каждая живая строка предоставляет live_ref и attribution. Два homes, объявляющие один и тот же id сессии провайдера, — две строки с двумя шкалами. Читайте одну строку через GET /v1/m/sessions/live/by-id/{live_ref} (и её запрос timeline / stream / runs). Голые маршруты внешнего id остаются и legacy: отвечают только для legacy-строки.

Драйверы регистрируются на каждом узле при запуске. При запуске сеанса движок использует новейшую проверенную управляемую установку, затем CLI из своего PATH. OLIVARES_SESSION_RUNTIME_CLAUDE_BIN, _CODEX_BIN, _GROK_BIN и _OPENCODE_BIN явно переопределяют этот выбор (см. Конфигурация). Если исполняемый файл не найден, запуск отклоняется. Остальные проверки готовности, включая аутентификацию профиля и политику запуска, остаются в силе. Шаги оператора: Управлять сеансом провайдера.

Сообщение может нести изображения. olivares session send <session> --attach shot.png "what is wrong here?" и редактор сообщения в консоли (вставка, перетаскивание или скрепка) сохраняют каждое изображение PNG, JPEG, WebP или GIF вместе с сессией — не более четырёх на сообщение и по 3.75 MB каждое — и отправляют их вместе с текстом; сообщению нужен его текст, поэтому одно изображение не отправляется (CLI и редактор запрашивают текст). Claude Code получает блок содержимого с изображением, а Codex — свой собственный ввод изображений; инструмент без ввода изображений отклоняет сообщение с указанием названия инструмента, до того как что-либо будет отправлено. API: POST /v1/m/sessions/runs/{ref}/attachments (изображение, base64), GET .../attachments/{id} и attachments в .../input. Изображения хранятся в каталоге данных, отдельно для каждого тенанта и сессии, и удаляются вместе с сессией.

Модуль II потребляет тот же поток наблюдений с минимальными данными, что и инвентаризация — edge.observed, cost.sampled и finding.reported. Только рёбра, чьим инициатором является сессия, порождают живую работу; выборки стоимости, привязанные к сессии, добавляются к живой цифре токенов/стоимости (никакой CostRecord здесь не записывается); находки с субъектом- сессией аннотируются, а находка анти-уклонения помечает состояние уклонения. Два поля выводятся живо из тех же сигналов: agent_ref — из агента, приписанного сессии, и summary — из находки уплотнения контекста (forensic), чей заголовок по контракту безопасен в качестве сводки — никогда не сфабрикованная LLM сводка.