本页内容
本页内容
插件 SDK 参考
插件 SDK 事件和钩子语义
类型化生命周期钩子注册器和决策语义核心适用于每个钩子结果。 插件SDK概述的一部分。
事件和生命周期
| 方法 | 它的作用 |
|---|---|
api.on(hookName, handler, opts?) |
类型化生命周期钩子 |
api.onConversationBindingResolved(handler) |
会话绑定回调 |
示例、常见钩子名称和守卫语义请参见 插件钩子。
Hook 决策语义
before_model_resolve 可以与 providerOverride 和 modelOverride 一起返回 fallbacksOverride: string[]。显式列表取代了运行的后备链; [] 禁用模型回退。每个字段的第一个定义值按优先级降序排列获胜,注册顺序打破平局。请参见 本地模型路由。
before_install 是插件运行时生命周期挂钩,而不是操作员安装策略表面。当 allow/warn/block 决策必须涵盖 CLI 和网关支持的安装或更新路径时,请使用 security.installPolicy。
before_tool_call: 返回{ block: true }是终结性的。一旦任何处理器设置了它,低优先级处理器就会被跳过。before_tool_call: 返回{ block: false }会被视为没有决策(与省略block相同),而不是覆盖。before_install: 返回{ block: true }是终结性的。一旦任何处理器设置了它,低优先级处理器就会被跳过。before_install: 返回{ block: false }会被视为没有决策(与省略block相同),而不是覆盖。reply_dispatch: 返回{ handled: true, ... }是终结性的。一旦任何处理器声明接管分发,低优先级处理器和默认模型分发路径都会被跳过。message_sending: 返回{ cancel: true }是终结性的。一旦任何处理器设置了它,低优先级处理器就会被跳过。message_sending: 返回{ cancel: false }会被视为没有决策(与省略cancel相同),而不是覆盖。message_received:当您需要入站 thread/topic 路由时,使用类型化的threadId字段。保留metadata以获取特定于频道的附加功能。message_sending:在回退到特定于通道的metadata之前,使用类型化的replyToId/threadId路由字段。gateway_start: 请使用ctx.config、ctx.workspaceDir和ctx.getCron?.()来获取 Gateway 拥有的启动状态,而不是依赖内部的gateway:startup钩子。此时 Cron 可能仍在加载中。cron_reconciled: 在启动或调度器重新加载后,重建完整的外部 cron 投影。它包含reason和有效的enabled状态,包括enabled: false,而ctx.getCron?.()返回的是精确对齐后的调度器。将ctx.abortSignal传入持久化投影工作;当该调度器快照被替换或 Gateway 关闭时,它会中止。cron_changed: 观察 Gateway 拥有的 cron 生命周期变化。scheduled和removed事件是提交后的对账提示,而不是有序的增量日志。scheduled 事件的event.nextRunAtMs在任务没有下次唤醒时会缺失;removed 事件仍然携带已删除任务的快照。
外部唤醒调度器应对 cron_changed 事件进行去抖或合并, 然后从 cron_reconciled 最后捕获的调度器中重新读取完整的持久视图。不要从 cron_changed 上下文中采用调度器:来自较旧调度器的分离提示可能会与后续重新加载重叠。
将 cron_reconciled 作为在 Gateway 启动或调度器替换时加载的持久状态的完整快照触发器。它不会在仅插件热重载时重新播放。观察处理器并行运行,且即发即忘的分发可能重叠,因此消费者不能依赖事件完成顺序。请将 OpenClaw 作为到期检查和执行的事实来源。
对于具有耐用更换、retry/backoff 和干净关闭功能的单飞行适配器,请参阅 Safe 外部 cron 投影。
本页有帮助吗?