事件与 Hook 语义
类型化生命周期钩子注册器和决策语义核心适用于每个钩子结果。是 Plugin SDK 概览 的一部分。
事件与生命周期¶
| 方法 | 作用 |
|---|---|
api.on(hookName, handler, opts?) |
类型化生命周期钩子 |
api.onConversationBindingResolved(handler) |
会话绑定回调 |
参见 插件钩子 了解示例、常见钩子名称和守卫语义。
钩子决策语义¶
before_install 是插件运行时生命周期钩子,而不是操作员安装策略界面。当允许/警告/阻止决策必须覆盖 CLI 和 Gateway 支持的安装或更新路径时,请使用 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:当需要入站线程/主题路由时,请使用类型化的threadId字段。将metadata保留给通道特定的附加信息。message_sending:在回退到通道特定的metadata之前,请使用类型化的replyToId/threadId路由字段。gateway_start:对于 Gateway 拥有的启动状态,请使用ctx.config、ctx.workspaceDir和ctx.getCron?.(),而不是依赖内部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 作为到期检查和执行的权威来源。
对于具有持久化替换、重试/退避和干净关闭的单飞适配器,参见 安全外部 cron 投影。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw