钩子 — 扩展

在内核之外实现的钩子。所有钩子的列表 — 06-hooks-reference。


6.21 script_hook

基于 Rhai 或 JavaScript 的脚本钩子:在脚本中实现任意生命周期点。语法和辅助函数 — 07-scripts。


agent_events

原生的(非脚本)代理操作日志。在选定的生命周期点上将事件保存在内存环形缓冲区中(不落盘);配套路由 GET /v1/events 通过 long-poll 和 cursor drain 将日志对外提供。实现 — 模块 agent_os_events(hook::EventsFactory)。

进程内存:事件无法在重启后存活,也无法让断开的消费者“追上”——对于实时流/仪表盘来说这已经足够,而且成本更低(持久化日志是另一项任务)。

# config/agents/<agent>/hooks/events.yaml
kind: agent_events
name: agent_events
agent: <agent>                          # по умолчанию — name хука
on: [after_tool_result, after_turn]     # по умолчанию [after_tool_result]
ignore: [settings_get]                  # не логировать эти инструменты
mutating: [order_create, order_cancel]  # пометить как изменение состояния
capacity: 5000                          # размер кольцевого буфера
show_notice: false                      # notice в чат-UI на каждое событие
字段 描述
agent 事件中的代理标签;默认为钩子的 name
on 点:after_tool_result、after_turn、after_loop、on_terminate、on_error、on_budget_threshold
watch / ignore 工具过滤器(空 = 全部,除 ignore 外)
mutating 标记为状态变更的工具
capacity 内存环形缓冲区的大小(事件数)
show_notice / notice 每个事件向聊天 UI 发送通知

最少写入:seq, ts, agent, session, user_id, tool, kind, mutating, success, args_fp, detail (args_fp — 参数的非加密指纹,FNV-1a;参数本身和结果不保存)。对外日志提供 GET /v1/events(admin):?mode=drain|wait|events|version、事件批次 seq > since、has_more/dropped_window。完整契约和客户端循环 — 见 事件订阅。


dll_hook

来自原生 Rust DLL(C ABI)的钩子。插件实现内核的任意生命周期点;JSON 参数(before_tool_call args、after_tool_result data/visual、before_inference request)以 UTF-8 JSON 传递。

# config/agents/<name>/hooks/audit.yaml
kind: dll_hook
path: plugins/echo.dll
hook: audit               # имя kind, зарегистрированного плагином

生命周期点 — 基础;构建和 C ABI — 20-native-plugins。