会话、通知与压缩 Hooks
处理启动上下文和退出记录,明确哪些事件不能阻止执行。
This page has not been translated into English yet. The original Chinese version is shown below.
会话和系统事件主要服务初始化与观察。它们不具备工具前置 Hook 的全部阻止能力,不能仅返回 deny 就期待生命周期停住。
SessionStart
source 为 startup、resume 或 clear。additionalContext 在交互模式注入为历史第一轮,在无头模式前置到用户提示;systemMessage 显示在会话开头。
continue 与 decision 被忽略,无法用此事件阻止启动。需要校验用户请求时考虑 BeforeAgent,需要校验工具时考虑 BeforeTool。
SessionEnd
reason 可为 exit、clear、logout、prompt_input_exit 或 other。此事件适合尽力清理与最终遥测,CLI 不等待它完成,且忽略流程控制字段。
因此不可把它作为必须成功的唯一状态持久化步骤,也不能承诺 CLI 退出前数据库已写完。systemMessage 可作为关闭期间的用户信息,但脚本的完成情况仍需独立观测。
Notification
参考当前列出的 notification_type 为 ToolPermission,另有 message 和 details(工具、路径等元数据)。systemMessage 与通知一同显示。
这是观察接口,不能自动授予工具权限,也不能阻止系统通知。把它转发到桌面通知与批准实际工具是两件事。
PreCompress
trigger 为 auto 或 manual,在上下文压缩前触发;异步执行,不阻止也不修改压缩。支持显示 systemMessage,忽略流程控制字段。
需要保留关键状态时,记录应尽量简短,并设计压缩继续进行时仍能处理的逻辑,不依赖同步完成保证。
与通用描述的区别
Hooks 概览将 Hook 总体描述为同步;本页按事件参考保留 SessionEnd 不等待和 PreCompress 异步的例外。选择事件时应依据专属协议,不能把通用退出码表套到所有生命周期事件。