钩子 — 扩展
在内核之外实现的钩子。所有钩子的列表 — 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。