🤖 AI-агенты для бизнеса

26. Хуки: пробелы и статус

🔵 Аудит подсистемы хуков (hooks core): что закрыто и что ещё предстоит. Справочник — 06-hooks-reference, скриптовый API — 07-scripts, плагины — 20-native-plugins.

Изначально хуки умели только три точки жизненного цикла (before_user_message, after_turn, after_loop) и не имели ни перехвата инструментов/инференса, ни аудита, ни изоляции. Ниже — журнал закрытых пробелов и оставшийся список.

26.1 Что уже закрыто

Пробел Решение
Только 3 точки перехвата Добавлены before_tool_call, after_tool_result, before_inference, on_spawn, on_terminate, on_error, after_assistant_message
Паника в hook-хендлере роняла ход Kernel::run_hook оборачивает каждый вызов в catch_unwind
Хук мог подвесить ход навсегда Лимит timeouts.hook_secs (перекрывает дефолт ядра 300с)
Аудит только текстом в транскрипт Событие ProcessEvent::HookIntercepted (events.db + JSONL) для всех точек; строки kind hook в message store
Скриптовым хукам недоступен scratch сессии HookServices::temp_dir → работают fs_write / caller().temp_dir
hook_tool не проверял новые точки Команды tool / result / inference / spawn / terminate / error
Плагинные хуки без перехвата ABI v2: колбэки перехвата в AoHookVtable (AO_ABI_VERSION = 2)
Нет output-guardrail after_assistant_message (rewrite / suppress / notice; исправленный ответ пере-эмитится как final_answer)
Хук мог вызвать инструмент вне allowlist агента Гейт по proc.tools и на LLM-пути, и в call_tool (хуки/скрипты)
Нет attach/detach у живого процесса grant_hook / revoke_hook / process_hooks (паритет с инструментами)
tool-шаги воркфлоу шли мимо хуков Kernel::run_tool_for (ключ — pid запуска воркфлоу)

26.2 Что осталось

# Пробел Суть Приоритет
1 on_token Перехват стрима токенов (модерация/редакция на лету) средний
2 before_context_evict Кастомная компакция/суммаризация вытесняемого контекста средний
3 Композиция хуков Фиксированный трейт, порядок = порядок регистрации: нет приоритетов, условий активации, enabled, per-scope (tenant/user) средний
4 Глобальные хуки Хуки только per-process (из шаблона); нет wildcard / глобального DLP на всех агентов средний
5 Хуки жизненного цикла сессии Нет on_session_created / on_session_closed низкий
6 Контекст хука HookContext без глубины/родителя, доступных инструментов, остатка бюджета низкий
7 Метрики хуков Нет длительности/счётчиков/ошибок по хукам низкий
8 ABI-паритет after_assistant_message Точка есть в Rust и скриптах, но не в plugin ABI низкий
9 Short-circuit и история Короткозамкнутый результат инструмента не пишется в tool_result_history (композиция его не видит) низкий
10 before_inference без отказа Только мутация запроса; нельзя отказать/заменить ответ; вызывается и на ретраях низкий

26.3 Концептуальные механизмы (не реализовано)

26.4 Приоритеты

  1. on_token + before_context_evict — закрыть оставшиеся точки перехвата (стриминговая модерация + компакция).
  2. Middleware/глобальные хуки — композиция, приоритеты, единый DLP.
  3. ABI-паритет after_assistant_message — иначе плагины отстают от скриптов.
  4. Метрики хуков — длительность/ошибки для эксплуатации.

26.5 История

Коммиты в master: 0d3e1d5, 74edef1, 854d525, 3a8cc5b, f135e1d, f192e5e (слиты в f0cad02). Тесты: agent_os_core (hooks) + plugin-host ABI round-trip.