27. Ядро: пробелы
🔵 Аудит ядра (agent_os_core) для продакшн-эксплуатации бизнес-агентов: что
есть, что реализовано частично, чего нет. Спецификация — SPEC.md,
внутренности — 14-kernel-internals, безопасность —
15-security.
Обозначения: ✅ реализовано · 🟡 частично · 🔴 отсутствует.
27.1 Мультитенантность — 🔴
Явный non-goal (SPEC.md). Есть только per-user / per-session / per-template
скоупы; нет tenant/org: ни изоляции таблиц, ни бюджета, ни прав между
клиентами. Для SaaS/агентств — отдельная крупная задача.
27.2 Отказоустойчивость и восстановление — 🟡
- ✅ retry инференса + failover по цепочке провайдеров;
catch_unwindвокруг тулов; wall-clock лимиты; WAL у DuckDB-хранилищ. - 🔴 нет авто-восстановления при старте: restore только по
Syscall::Restore, теряетparent/children/таймауты; process table, budget groups и сессии живут в памяти. - 🔴 нет супервизии: restart-политик агентов, dead-letter / poison-turn quarantine, ретраев упавших ходов сверх «следующее сообщение».
- 🔴 pending-состояние не персистится: approvals,
request_user_input,await_event— в памяти (DashMap+ oneshot), теряются при рестарте.
27.3 Изоляция и песочница — 🟡
- ✅ capability-маска syscall (seccomp-подобная), лимиты токенов/времени,
усечение результатов, allowlist инструментов (гейт по
proc.toolsдобавлен вместе с хуками). - 🔴 нет OS-песочницы: namespaces/containers/cgroups; лимитов CPU/RAM/диска для тулов нет.
- 🔴
shell_toolиfile_toolчитают/исполняют на хосте; скрипты (shell()/exec()/fs_read()) — тоже. Браузер запускается с--no-sandbox.
27.4 Планировщик — 🟡
- ✅ четыре политики как порядок диспетчеризации (
RoundRobinпо умолчанию),concurrency_limit(Semaphore). - 🔴 нет вытеснения:
time_slice— мёртвый код;PriorityPreemptiveне прерывает текущий ход.SPEC.mdописывает preemption, кода нет. - 🔴 не-дефолтные политики недостижимы из конфига — мапится только
round_robin, остальное молча падает в дефолт. - 🔴 нет обработки просроченных дедлайнов (deadline — только ключ сортировки).
27.5 Наблюдаемость — 🟡
- ✅ типизированный event bus, EventDb (аудит + rollup стоимости), message
store, per-process JSONL, HTTP access log, dashboard,
trace_tool. - 🔴 нет метрик:
/metrics/Prometheus, OpenTelemetry, спанов, SLO/алертов, гистограмм. SPEC упоминает «surface in metrics» — подсистемы нет.
27.6 Персистентность — 🟡
- ✅ переживают рестарт:
events.db,messages.db,state.db,access.db,cron.db,workflows.db, роли approvals, allowed-senders, users, connectors, JSONL и чекпоинты — но только если явно вызваны. - 🔴 в памяти (теряются): process table, budget groups, сессии, pending
approvals, pending user-input/
await_event,tool_result_history, логин-сессии.
27.7 IPC, state, распределённость — 🟡
- IPC — in-process
tokio::mpsc;Pid— случайный UUID (не переживает рестарт). State store / checkpoint / message store — единственный бэкенд DuckDB/JSON; DuckDB embedded single-writer. - 🔴 горизонтального масштабирования нет: один инстанс = одна машина, нет
кластера/шардинга/миграции процессов (
SPEC.md— non-goal).
27.8 Высокоуровневые механизмы — 🔴
- Транзакционные сайд-эффекты: нет exactly-once / transactional outbox / идемпотентных ключей / компенсаций (saga). Тул выполнился → крэш → дубль или потеря действия. Критично для платежей/CRM/ЭДО.
- Реактивные триггеры: старт агента/воркфлоу по внутреннему событию
(
ProcessListenerтолько наблюдает, не действует). Сейчас — только cron, внешний webhook и триггеры воркфлоу. - Сигналы/steering: enum
Signalесть, control-plane для паузы/вмешательства в живой ход — нет. - Внешний policy-engine (OPA/CEL) для доступа/egress — нет; capability и approvals статичны.
- Backpressure/flow-control: только семафор вокруг
provider.stream; нет учёта rate-limit провайдера, приоритетных очередей, shedding. - Guardrails/DLP: частично закрыто хуками (
after_assistant_message,before_tool_call, allowlist); нативного input/output-модератора и стриминговогоon_tokenнет. - Record/replay и симуляция, eval/AB-тесты — нет.
- Делегирование креденшелов (STS, per-user ключи) — нет; тулы читают env.
- Coordination: нет pub/sub, blackboard, типизированного RPC между агентами (только point-to-point IPC и DAG-воркфлоу).
- Память: одна
memory-нода (факты + сводка); нет episodic/semantic/procedural, рефлексии/консолидации.
27.9 Расхождения SPEC и кода
time_slice/ preemption описаны (SPEC.md§4.12), но не реализованы.- «surface in metrics» (
SPEC.md§7) — метрик нет. - «for crash recovery» про чекпоинты — restore on-demand и lossy.
27.10 Приоритеты
- Персистентность pending-состояния (approvals / user-input /
await_event). - Транзакционные сайд-эффекты (outbox + идемпотентность) для платежей/CRM.
- Метрики (
/metrics, OTel) для эксплуатации. - Планировщик: преемпция (
time_slice) + доступность политик из конфига. - Песочница/лимиты ресурсов тулов.
- Мультитенантность + RBAC (org/team, fine-grained).
- Горизонтальное масштабирование (общий state, leader-election).